]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
samples/damon/prcl: use damon_call() repeat mode instead of damon_callback
authorSeongJae Park <sj@kernel.org>
Sat, 12 Jul 2025 19:50:08 +0000 (12:50 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 20 Jul 2025 01:59:55 +0000 (18:59 -0700)
prcl uses damon_callback for periodically reading DAMON internal data.
Use its alternative, damon_call() repeat mode.

Link: https://lkml.kernel.org/r/20250712195016.151108-7-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
samples/damon/prcl.c

index 8a312dba7691c6e0ff6b6c9707bbef7174a7677a..25a751a67b2d46fec6921ef5cf273b8d052dffb5 100644 (file)
@@ -34,8 +34,9 @@ MODULE_PARM_DESC(enabled, "Enable or disable DAMON_SAMPLE_PRCL");
 static struct damon_ctx *ctx;
 static struct pid *target_pidp;
 
-static int damon_sample_prcl_after_aggregate(struct damon_ctx *c)
+static int damon_sample_prcl_repeat_call_fn(void *data)
 {
+       struct damon_ctx *c = data;
        struct damon_target *t;
 
        damon_for_each_target(t, c) {
@@ -51,10 +52,16 @@ static int damon_sample_prcl_after_aggregate(struct damon_ctx *c)
        return 0;
 }
 
+static struct damon_call_control repeat_call_control = {
+       .fn = damon_sample_prcl_repeat_call_fn,
+       .repeat = true,
+};
+
 static int damon_sample_prcl_start(void)
 {
        struct damon_target *target;
        struct damos *scheme;
+       int err;
 
        pr_info("start\n");
 
@@ -79,8 +86,6 @@ static int damon_sample_prcl_start(void)
        }
        target->pid = target_pidp;
 
-       ctx->callback.after_aggregation = damon_sample_prcl_after_aggregate;
-
        scheme = damon_new_scheme(
                        &(struct damos_access_pattern) {
                        .min_sz_region = PAGE_SIZE,
@@ -100,7 +105,12 @@ static int damon_sample_prcl_start(void)
        }
        damon_set_schemes(ctx, &scheme, 1);
 
-       return damon_start(&ctx, 1, true);
+       err = damon_start(&ctx, 1, true);
+       if (err)
+               return err;
+
+       repeat_call_control.data = ctx;
+       return damon_call(ctx, &repeat_call_control);
 }
 
 static void damon_sample_prcl_stop(void)