]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm/damon/sysfs: setup probes on DAMON core API parameters
authorSeongJae Park <sj@kernel.org>
Mon, 18 May 2026 23:41:02 +0000 (16:41 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 2 Jun 2026 22:22:28 +0000 (15:22 -0700)
Add user-installed data probes to DAMON core API parameters, so that user
inputs for data probes are passed to DAMON core.

Link: https://lore.kernel.org/20260518234119.97569-15-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Liam R. Howlett <liam@infradead.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/damon/sysfs.c

index 51a4f05c9275c605b83994d81574c4c62c2b96e7..eeb7fdd030cf0c5e5421a1f260d76fd1027514ac 100644 (file)
@@ -1855,6 +1855,40 @@ static int damon_sysfs_set_attrs(struct damon_ctx *ctx,
        return damon_set_attrs(ctx, &attrs);
 }
 
+static int damon_sysfs_set_probes(struct damon_ctx *ctx,
+               struct damon_sysfs_probes *sys_probes)
+{
+       int i;
+
+       for (i = 0; i < sys_probes->nr; i++) {
+               struct damon_sysfs_filters *sys_filters =
+                       sys_probes->probes_arr[i]->filters;
+               struct damon_probe *c;
+               int j;
+
+               if (!sys_filters)
+                       continue;
+               c = damon_new_probe();
+               if (!c)
+                       return -ENOMEM;
+               damon_add_probe(ctx, c);
+
+               for (j = 0; j < sys_filters->nr; j++) {
+                       struct damon_sysfs_filter *sys_filter =
+                               sys_filters->filters_arr[j];
+                       struct damon_filter *filter;
+
+                       filter = damon_new_filter(sys_filter->type,
+                                       sys_filter->matching,
+                                       sys_filter->allow);
+                       if (!filter)
+                               return -ENOMEM;
+                       damon_add_filter(c, filter);
+               }
+       }
+       return 0;
+}
+
 static int damon_sysfs_set_regions(struct damon_target *t,
                struct damon_sysfs_regions *sysfs_regions,
                unsigned long min_region_sz)
@@ -1967,6 +2001,9 @@ static int damon_sysfs_apply_inputs(struct damon_ctx *ctx,
                                DAMON_MIN_REGION_SZ / sys_ctx->addr_unit, 1);
        ctx->pause = sys_ctx->pause;
        err = damon_sysfs_set_attrs(ctx, sys_ctx->attrs);
+       if (err)
+               return err;
+       err = damon_sysfs_set_probes(ctx, sys_ctx->attrs->probes);
        if (err)
                return err;
        err = damon_sysfs_add_targets(ctx, sys_ctx->targets);