summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSJ Park <sj@kernel.org>2026-10-25 09:48:06 -0700
committerAndrew Morton <akpm@linux-foundation.org>2026-11-02 18:14:44 -0800
commitc4ff3ea30640b394df4156d7ddf60ad8ffe765f1 (patch)
treefd7d2aaf57965218f3cb2725c4f6254205b1f98d /include
parent26ae50a0901a44f7d50053f87dc38abd9f9a269c (diff)
mm/damon/core: move static variable rotation to damon_ctx
damon_split_some_reigons() uses a static variable, rotation, to remember how many times it was called. It is again used to determine fair selection of regions to split. Since it is a static variable, it can be indeterministic and therefore less fair. The user impact is not critical. No crash, no leak. DAMON's best-effort and indeterministic monitoring accuracy could be slightly more indeterministic when multiple kdamonds are used in parallel. Fix the problem by moving the static variable into the damon_ctx struct. Link: https://lore.kernel.org/20261025164808.152048-4-sj@kernel.org Fixes: 1a582e6e0174 ("mm/damon/core: split a fraction of regions when nr_regions exceeds max/2") Signed-off-by: SJ Park <sj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Closes: https://sashiko.dev/#/bug/linux-eebfcdde-2881-48ef-8df1-e2019d2a47f2 Cc: Jiayuan Chen <jiayuan.chen@shopee.com> Cc: <stable@vger.kernel.org> # 7.3.x
Diffstat (limited to 'include')
-rw-r--r--include/linux/damon.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/include/linux/damon.h b/include/linux/damon.h
index cb6a50032a1e..380f9cf6ddd8 100644
--- a/include/linux/damon.h
+++ b/include/linux/damon.h
@@ -963,6 +963,11 @@ struct damon_ctx {
* for more details.
*/
unsigned long last_nr_regions;
+ /*
+ * number of damon_split_some_regions() invocations for this context.
+ * Read damon_split_some_regions() for more details.
+ */
+ unsigned long region_split_rotation;
};
/* Get a random number in [@l, @r) using @ctx's lockless PRNG. */