]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mm/damon/lru_sort: use damon_call() repeat mode instead of damon_callback
authorSeongJae Park <sj@kernel.org>
Sat, 12 Jul 2025 19:50:07 +0000 (12:50 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 20 Jul 2025 01:59:55 +0000 (18:59 -0700)
DAMON_LRU_SORT 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-6-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/damon/lru_sort.c

index 9bd8a1a115e0b3e324c6d69acc96f19ce777c666..151a9de5ad8b81dbb6c79a19a44c04c7191748b4 100644 (file)
@@ -230,6 +230,39 @@ out:
        return err;
 }
 
+static int damon_lru_sort_handle_commit_inputs(void)
+{
+       int err;
+
+       if (!commit_inputs)
+               return 0;
+
+       err = damon_lru_sort_apply_parameters();
+       commit_inputs = false;
+       return err;
+}
+
+static int damon_lru_sort_damon_call_fn(void *arg)
+{
+       struct damon_ctx *c = arg;
+       struct damos *s;
+
+       /* update the stats parameter */
+       damon_for_each_scheme(s, c) {
+               if (s->action == DAMOS_LRU_PRIO)
+                       damon_lru_sort_hot_stat = s->stat;
+               else if (s->action == DAMOS_LRU_DEPRIO)
+                       damon_lru_sort_cold_stat = s->stat;
+       }
+
+       return damon_lru_sort_handle_commit_inputs();
+}
+
+static struct damon_call_control call_control = {
+       .fn = damon_lru_sort_damon_call_fn,
+       .repeat = true,
+};
+
 static int damon_lru_sort_turn(bool on)
 {
        int err;
@@ -249,7 +282,7 @@ static int damon_lru_sort_turn(bool on)
        if (err)
                return err;
        kdamond_pid = ctx->kdamond->pid;
-       return 0;
+       return damon_call(ctx, &call_control);
 }
 
 static int damon_lru_sort_enabled_store(const char *val,
@@ -288,38 +321,6 @@ module_param_cb(enabled, &enabled_param_ops, &enabled, 0600);
 MODULE_PARM_DESC(enabled,
        "Enable or disable DAMON_LRU_SORT (default: disabled)");
 
-static int damon_lru_sort_handle_commit_inputs(void)
-{
-       int err;
-
-       if (!commit_inputs)
-               return 0;
-
-       err = damon_lru_sort_apply_parameters();
-       commit_inputs = false;
-       return err;
-}
-
-static int damon_lru_sort_after_aggregation(struct damon_ctx *c)
-{
-       struct damos *s;
-
-       /* update the stats parameter */
-       damon_for_each_scheme(s, c) {
-               if (s->action == DAMOS_LRU_PRIO)
-                       damon_lru_sort_hot_stat = s->stat;
-               else if (s->action == DAMOS_LRU_DEPRIO)
-                       damon_lru_sort_cold_stat = s->stat;
-       }
-
-       return damon_lru_sort_handle_commit_inputs();
-}
-
-static int damon_lru_sort_after_wmarks_check(struct damon_ctx *c)
-{
-       return damon_lru_sort_handle_commit_inputs();
-}
-
 static int __init damon_lru_sort_init(void)
 {
        int err = damon_modules_new_paddr_ctx_target(&ctx, &target);
@@ -327,8 +328,7 @@ static int __init damon_lru_sort_init(void)
        if (err)
                goto out;
 
-       ctx->callback.after_wmarks_check = damon_lru_sort_after_wmarks_check;
-       ctx->callback.after_aggregation = damon_lru_sort_after_aggregation;
+       call_control.data = ctx;
 
        /* 'enabled' has set before this function, probably via command line */
        if (enabled)