2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

mm/damon/reclaim: use damon_call() repeat mode instead of damon_callback

DAMON_RECLAIM uses damon_callback for periodically reading and writing
DAMON internal data and parameters.  Use its alternative, damon_call()
repeat mode.

Link: https://lkml.kernel.org/r/20250712195016.151108-5-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
SeongJae Park 2025-07-12 12:50:06 -07:00 committed by Andrew Morton
parent 405f61996d
commit 5da7c70318

View File

@ -238,6 +238,35 @@ out:
return err; return err;
} }
static int damon_reclaim_handle_commit_inputs(void)
{
int err;
if (!commit_inputs)
return 0;
err = damon_reclaim_apply_parameters();
commit_inputs = false;
return err;
}
static int damon_reclaim_damon_call_fn(void *arg)
{
struct damon_ctx *c = arg;
struct damos *s;
/* update the stats parameter */
damon_for_each_scheme(s, c)
damon_reclaim_stat = s->stat;
return damon_reclaim_handle_commit_inputs();
}
static struct damon_call_control call_control = {
.fn = damon_reclaim_damon_call_fn,
.repeat = true,
};
static int damon_reclaim_turn(bool on) static int damon_reclaim_turn(bool on)
{ {
int err; int err;
@ -257,7 +286,7 @@ static int damon_reclaim_turn(bool on)
if (err) if (err)
return err; return err;
kdamond_pid = ctx->kdamond->pid; kdamond_pid = ctx->kdamond->pid;
return 0; return damon_call(ctx, &call_control);
} }
static int damon_reclaim_enabled_store(const char *val, static int damon_reclaim_enabled_store(const char *val,
@ -296,34 +325,6 @@ module_param_cb(enabled, &enabled_param_ops, &enabled, 0600);
MODULE_PARM_DESC(enabled, MODULE_PARM_DESC(enabled,
"Enable or disable DAMON_RECLAIM (default: disabled)"); "Enable or disable DAMON_RECLAIM (default: disabled)");
static int damon_reclaim_handle_commit_inputs(void)
{
int err;
if (!commit_inputs)
return 0;
err = damon_reclaim_apply_parameters();
commit_inputs = false;
return err;
}
static int damon_reclaim_after_aggregation(struct damon_ctx *c)
{
struct damos *s;
/* update the stats parameter */
damon_for_each_scheme(s, c)
damon_reclaim_stat = s->stat;
return damon_reclaim_handle_commit_inputs();
}
static int damon_reclaim_after_wmarks_check(struct damon_ctx *c)
{
return damon_reclaim_handle_commit_inputs();
}
static int __init damon_reclaim_init(void) static int __init damon_reclaim_init(void)
{ {
int err = damon_modules_new_paddr_ctx_target(&ctx, &target); int err = damon_modules_new_paddr_ctx_target(&ctx, &target);
@ -331,8 +332,7 @@ static int __init damon_reclaim_init(void)
if (err) if (err)
goto out; goto out;
ctx->callback.after_wmarks_check = damon_reclaim_after_wmarks_check; call_control.data = ctx;
ctx->callback.after_aggregation = damon_reclaim_after_aggregation;
/* 'enabled' has set before this function, probably via command line */ /* 'enabled' has set before this function, probably via command line */
if (enabled) if (enabled)