summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSJ Park <sj@kernel.org>2026-07-05 08:55:53 -0700
committerAndrew Morton <akpm@linux-foundation.org>2026-07-30 19:40:46 -0700
commitb1471afe4d10eeea7c8f5935b52a3b2cac8ad779 (patch)
treeb4d25d14899a9620d744db6942677a02afcf3136
parentb90408ef116305770142b6d0d3cb077f28d8d41b (diff)
mm/damon/core: do parameter testing commit on damon_start()
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. Link: https://lore.kernel.org/20260705155600.96555-3-sj@kernel.org Signed-off-by: SJ Park <sj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--mm/damon/core.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/mm/damon/core.c b/mm/damon/core.c
index 018dd5ff8032..ca301abcb9ec 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);