From: kernel test robot <lkp@intel.com>
To: SeongJae Park <sj@kernel.org>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [sj:damon/next 29/33] mm/damon/acma.c:146:16: error: too few arguments to function 'damon_new_scheme'
Date: Mon, 13 May 2024 19:37:10 +0800 [thread overview]
Message-ID: <202405131909.nfNoXnZ4-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/sj/linux.git damon/next
head: 8babfaa14bfc8f45e2c3d093952ab737fd0db1d5
commit: 1465b25a340a8aa09800ddcf3d4aef185ea6c84c [29/33] mm/damon: add the initial part of access/contiguity-aware memory auto-scaling module
config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20240513/202405131909.nfNoXnZ4-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240513/202405131909.nfNoXnZ4-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202405131909.nfNoXnZ4-lkp@intel.com/
All errors (new ones prefixed by >>):
mm/damon/acma.c: In function 'damon_acma_new_scheme':
>> mm/damon/acma.c:146:16: error: too few arguments to function 'damon_new_scheme'
146 | return damon_new_scheme(
| ^~~~~~~~~~~~~~~~
In file included from mm/damon/acma.c:19:
include/linux/damon.h:770:15: note: declared here
770 | struct damos *damon_new_scheme(struct damos_access_pattern *pattern,
| ^~~~~~~~~~~~~~~~
mm/damon/acma.c: At top level:
>> mm/damon/acma.c:169:17: error: unknown type name 'damos_quota_goal_metric'
169 | damos_quota_goal_metric goal_metric)
| ^~~~~~~~~~~~~~~~~~~~~~~
mm/damon/acma.c: In function 'damon_acma_new_reclaim_scheme':
>> mm/damon/acma.c:193:15: error: implicit declaration of function 'damon_acma_set_scheme_quota'; did you mean 'damon_acma_new_scheme'? [-Werror=implicit-function-declaration]
193 | err = damon_acma_set_scheme_quota(scheme, old,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
| damon_acma_new_scheme
mm/damon/acma.c: In function 'damon_acma_apply_parameters':
mm/damon/acma.c:206:34: warning: unused variable 'goal' [-Wunused-variable]
206 | struct damos_quota_goal *goal;
| ^~~~
mm/damon/acma.c: In function 'damon_acma_after_aggregation':
>> mm/damon/acma.c:303:22: error: 'DAMOS_LRU_RECLAIM' undeclared (first use in this function); did you mean 'DAMOS_LRU_DEPRIO'?
303 | case DAMOS_LRU_RECLAIM:
| ^~~~~~~~~~~~~~~~~
| DAMOS_LRU_DEPRIO
mm/damon/acma.c:303:22: note: each undeclared identifier is reported only once for each function it appears in
>> mm/damon/acma.c:313:12: error: invalid storage class for function 'damon_acma_after_wmarks_check'
313 | static int damon_acma_after_wmarks_check(struct damon_ctx *c)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> mm/damon/acma.c:318:19: error: invalid storage class for function 'damon_acma_init'
318 | static int __init damon_acma_init(void)
| ^~~~~~~~~~~~~~~
In file included from include/linux/printk.h:6,
from include/asm-generic/bug.h:22,
from arch/alpha/include/asm/bug.h:23,
from include/linux/bug.h:5,
from include/linux/thread_info.h:13,
from include/asm-generic/current.h:6,
from ./arch/alpha/include/generated/asm/current.h:1,
from include/linux/sched.h:12,
from include/linux/cgroup.h:12,
from include/linux/memcontrol.h:13,
from include/linux/damon.h:11:
>> mm/damon/acma.c:335:13: error: initializer element is not constant
335 | module_init(damon_acma_init);
| ^~~~~~~~~~~~~~~
include/linux/init.h:270:55: note: in definition of macro '____define_initcall'
270 | __attribute__((__section__(__sec))) = fn;
| ^~
include/linux/init.h:280:9: note: in expansion of macro '__unique_initcall'
280 | __unique_initcall(fn, id, __sec, __initcall_id(fn))
| ^~~~~~~~~~~~~~~~~
include/linux/init.h:282:35: note: in expansion of macro '___define_initcall'
282 | #define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id)
| ^~~~~~~~~~~~~~~~~~
include/linux/init.h:311:41: note: in expansion of macro '__define_initcall'
311 | #define device_initcall(fn) __define_initcall(fn, 6)
| ^~~~~~~~~~~~~~~~~
include/linux/init.h:316:24: note: in expansion of macro 'device_initcall'
316 | #define __initcall(fn) device_initcall(fn)
| ^~~~~~~~~~~~~~~
include/linux/module.h:88:25: note: in expansion of macro '__initcall'
88 | #define module_init(x) __initcall(x);
| ^~~~~~~~~~
mm/damon/acma.c:335:1: note: in expansion of macro 'module_init'
335 | module_init(damon_acma_init);
| ^~~~~~~~~~~
>> mm/damon/acma.c:335:1: error: expected declaration or statement at end of input
mm/damon/acma.c: In function 'damon_acma_new_scheme':
mm/damon/acma.c:155:1: warning: control reaches end of non-void function [-Wreturn-type]
155 | }
| ^
mm/damon/acma.c: At top level:
mm/damon/acma.c:157:13: warning: 'damon_acma_copy_quota_status' defined but not used [-Wunused-function]
157 | static void damon_acma_copy_quota_status(struct damos_quota *dst,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/damon_new_scheme +146 mm/damon/acma.c
140
141 static struct damos *damon_acma_new_scheme(
142 struct damos_access_pattern *pattern, enum damos_action action)
143 {
144 struct damos_quota quota = damon_acma_quota;
145
> 146 return damon_new_scheme(
147 pattern,
148 action,
149 /* work for every second */
150 1000000,
151 /* under the quota. */
152 "a,
153 /* (De)activate this according to the watermarks. */
154 &damon_acma_wmarks);
155 }
156
157 static void damon_acma_copy_quota_status(struct damos_quota *dst,
158 struct damos_quota *src)
159 {
160 dst->total_charged_sz = src->total_charged_sz;
161 dst->total_charged_ns = src->total_charged_ns;
162 dst->charged_sz = src->charged_sz;
163 dst->charged_from = src->charged_from;
164 dst->charge_target_from = src->charge_target_from;
165 dst->charge_addr_from = src->charge_addr_from;
166 }
167
168 static int damon_acma_set_scheme_quota(struct damos *scheme, struct damos *old,
> 169 damos_quota_goal_metric goal_metric)
170 {
171 if (old)
172 damon_acma_copy_quota_status(&scheme->quota, &old->quota);
173 goal = damos_new_quota_goal(goal_metric, quota_mem_pressure_us);
174 if (!goal)
175 return -ENOMEM;
176 damos_add_quota_goal(&scheme->quota, goal);
177 return 0;
178 }
179
180 /*
181 * Reclaim cold pages on entire physical address space
182 */
183 static struct damos *damon_acma_new_reclaim_scheme(struct damos *old)
184 {
185 struct damos_access_pattern pattern = damon_acma_stub_pattern;
186 struct damos *scheme;
187 int err;
188
189 pattern.max_nr_accesses = 0;
190 scheme = damon_acma_new_scheme(&pattern, DAMOS_PAGEOUT);
191 if (!scheme)
192 return NULL;
> 193 err = damon_acma_set_scheme_quota(scheme, old,
194 DAMOS_QUOTA_SOME_MEM_PSI_US);
195 if (err) {
196 damon_destroy_scheme(scheme);
197 return NULL;
198 }
199 return scheme;
200 }
201
202 static int damon_acma_apply_parameters(void)
203 {
204 struct damos *scheme, *reclaim_scheme;
205 struct damos *old_reclaim_scheme = NULL;
206 struct damos_quota_goal *goal;
207 int err = 0;
208
209 err = damon_set_attrs(ctx, &damon_acma_mon_attrs);
210 if (err)
211 return err;
212
213 damon_for_each_scheme(scheme, ctx)
214 old_reclaim_scheme = scheme;
215
216 reclaim_scheme = damon_acma_new_reclaim_scheme(old_reclaim_scheme);
217 if (!reclaim_scheme)
218 return -ENOMEM;
219 damon_set_schemes(ctx, &reclaim_scheme, 1);
220
221 return damon_set_region_biggest_system_ram_default(target,
222 &monitor_region_start,
223 &monitor_region_end);
224 }
225
226 static int damon_acma_turn(bool on)
227 {
228 int err;
229
230 if (!on) {
231 err = damon_stop(&ctx, 1);
232 if (!err)
233 kdamond_pid = -1;
234 return err;
235 }
236
237 err = damon_acma_apply_parameters();
238 if (err)
239 return err;
240
241 err = damon_start(&ctx, 1, true);
242 if (err)
243 return err;
244 kdamond_pid = ctx->kdamond->pid;
245 return 0;
246 }
247
248 static int damon_acma_enabled_store(const char *val,
249 const struct kernel_param *kp)
250 {
251 bool is_enabled = enabled;
252 bool enable;
253 int err;
254
255 err = kstrtobool(val, &enable);
256 if (err)
257 return err;
258
259 if (is_enabled == enable)
260 return 0;
261
262 /* Called before init function. The function will handle this. */
263 if (!ctx)
264 goto set_param_out;
265
266 err = damon_acma_turn(enable);
267 if (err)
268 return err;
269
270 set_param_out:
271 enabled = enable;
272 return err;
273 }
274
275 static const struct kernel_param_ops enabled_param_ops = {
276 .set = damon_acma_enabled_store,
277 .get = param_get_bool,
278 };
279
280 module_param_cb(enabled, &enabled_param_ops, &enabled, 0600);
281 MODULE_PARM_DESC(enabled,
282 "Enable or disable DAMON_ACMA (default: disabled)");
283
284 static int damon_acma_handle_commit_inputs(void)
285 {
286 int err;
287
288 if (!commit_inputs)
289 return 0;
290
291 err = damon_acma_apply_parameters();
292 commit_inputs = false;
293 return err;
294 }
295
296 static int damon_acma_after_aggregation(struct damon_ctx *c)
297 {
298 struct damos *s;
299
300 /* update the stats parameter */
301 damon_for_each_scheme(s, c) {
302 switch (s->action) {
> 303 case DAMOS_LRU_RECLAIM:
304 damon_acma_reclaim_stat = s->stat;
305 break;
306 default:
307 break;
308 }
309
310 return damon_acma_handle_commit_inputs();
311 }
312
> 313 static int damon_acma_after_wmarks_check(struct damon_ctx *c)
314 {
315 return damon_acma_handle_commit_inputs();
316 }
317
> 318 static int __init damon_acma_init(void)
319 {
320 int err = damon_modules_new_paddr_ctx_target(&ctx, &target);
321
322 if (err)
323 return err;
324
325 ctx->callback.after_wmarks_check = damon_acma_after_wmarks_check;
326 ctx->callback.after_aggregation = damon_acma_after_aggregation;
327
328 /* 'enabled' has set before this function, probably via command line */
329 if (enabled)
330 err = damon_acma_turn(true);
331
332 return err;
333 }
334
> 335 module_init(damon_acma_init);
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2024-05-13 11:37 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202405131909.nfNoXnZ4-lkp@intel.com \
--to=lkp@intel.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=sj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).