[PATCH v1.1 13/17] mm/damon/sysfs: pass preps to DAMON core

From: SJ Park

Date: Tue Sep 01 2026 - 10:05:27 EST


DAMON sysfs interface provides the files for setting DAMON probe preps.
But the underlying code is not really passing the user-set values to
DAMON core. Pass those.

Signed-off-by: SJ Park <sj@xxxxxxxxxx>
---
mm/damon/sysfs.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)

diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c
index 1ecf194f71ddb..7ec14f48d157a 100644
--- a/mm/damon/sysfs.c
+++ b/mm/damon/sysfs.c
@@ -812,7 +812,10 @@ static ssize_t prep_action_store(struct kobject *kobj,

action_name = &damon_sysfs_prep_action_names[i];
if (sysfs_streq(buf, action_name->name)) {
+ if (!mutex_trylock(&damon_sysfs_lock))
+ return -EBUSY;
prep->action = action_name->action;
+ mutex_unlock(&damon_sysfs_lock);
ret = count;
break;
}
@@ -2176,6 +2179,23 @@ static int damon_sysfs_set_attrs(struct damon_ctx *ctx,
return damon_set_attrs(ctx, &attrs);
}

+static int damon_sysfs_set_preps(struct damon_probe *probe,
+ struct damon_sysfs_preps *sys_preps)
+{
+ int i;
+
+ for (i = 0; i < sys_preps->nr; i++) {
+ struct damon_sysfs_prep *sys_prep = sys_preps->preps_arr[i];
+ struct damon_prep *prep;
+
+ prep = damon_new_prep(sys_prep->action);
+ if (!prep)
+ return -ENOMEM;
+ damon_add_prep(probe, prep);
+ }
+ return 0;
+}
+
static int damon_sysfs_set_filters(struct damon_probe *probe,
struct damon_sysfs_filters *sys_filters)
{
@@ -2211,7 +2231,15 @@ static int damon_sysfs_set_probe(struct damon_probe *probe,
struct damon_sysfs_probe *sys_probe)
{
struct damon_sysfs_filters *sys_filters;
+ struct damon_sysfs_preps *sys_preps;
+ int err;

+ sys_preps = sys_probe->preps;
+ if (sys_preps) {
+ err = damon_sysfs_set_preps(probe, sys_preps);
+ if (err)
+ return err;
+ }
sys_filters = sys_probe->filters;
if (!sys_filters)
return 0;
--
2.47.3