[PATCH 2/8] mm/damon/core: do parameter testing commit on damon_start()

From: SJ Park

Date: Sun Jul 05 2026 - 11:56:12 EST


damon_start() and damon_commit_ctx() are two main DAMON core API
functions for setting whole DAMON parameters. While damon_commit_ctx()
does holistic parameters testing, damon_start() just believes the caller
validated the whole thing. Embed the holistic parameter check that is
already in damon_commit_ctx() into damon_start(). After this change,
the callers can safely call damon_start() without validating the
parameters.

Signed-off-by: SJ Park <sj@xxxxxxxxxx>
---
mm/damon/core.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/mm/damon/core.c b/mm/damon/core.c
index 018dd5ff80324..ca301abcb9ec5 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -1865,6 +1865,8 @@ static int __damon_start(struct damon_ctx *ctx)
return err;
}

+static int __damon_commit_ctx(struct damon_ctx *dst, struct damon_ctx *src);
+
/**
* damon_start() - Starts the monitorings for a given group of contexts.
* @ctxs: an array of the pointers for contexts to start monitoring
@@ -1886,8 +1888,16 @@ int damon_start(struct damon_ctx **ctxs, int nr_ctxs, bool exclusive)
int err = 0;

for (i = 0; i < nr_ctxs; i++) {
- if (!is_power_of_2(ctxs[i]->min_region_sz))
- return -EINVAL;
+ struct damon_ctx *test_ctx;
+
+ test_ctx = damon_new_ctx();
+ if (!test_ctx)
+ return -ENOMEM;
+
+ err = __damon_commit_ctx(test_ctx, ctxs[i]);
+ damon_destroy_ctx(test_ctx);
+ if (err)
+ return err;
}

mutex_lock(&damon_lock);
--
2.47.3