]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm/damon/core: add damon_merge_regions_of() debug_sanity check
authorSeongJae Park <sj@kernel.org>
Fri, 6 Mar 2026 15:29:09 +0000 (07:29 -0800)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 5 Apr 2026 20:53:20 +0000 (13:53 -0700)
damon_merge_regions_of() should be called only after aggregation is
finished and therefore each region's nr_accesses and nr_accesses_bp match.
There were bugs that broke the assumption, during development of online
DAMON parameter updates and monitoring results handling changes.  Add a
sanity check for that under CONFIG_DAMON_DEBUG_SANITY.

Link: https://lkml.kernel.org/r/20260306152914.86303-7-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Cc: Brendan Higgins <brendan.higgins@linux.dev>
Cc: David Gow <davidgow@google.com>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/damon/core.c

index 0fa694aff61716abf30a80696fbbae2a781ed7b0..3f55dfcb54e4780a1b0779234c28d15ffb44084b 100644 (file)
@@ -2507,6 +2507,20 @@ static void damon_merge_two_regions(struct damon_target *t,
        damon_destroy_region(r, t);
 }
 
+#ifdef CONFIG_DAMON_DEBUG_SANITY
+static void damon_verify_merge_regions_of(struct damon_region *r)
+{
+       WARN_ONCE(r->nr_accesses != r->nr_accesses_bp / 10000,
+                       "nr_accesses (%u) != nr_accesses_bp (%u)\n",
+                       r->nr_accesses, r->nr_accesses_bp);
+}
+#else
+static void damon_verify_merge_regions_of(struct damon_region *r)
+{
+}
+#endif
+
+
 /*
  * Merge adjacent regions having similar access frequencies
  *
@@ -2520,6 +2534,7 @@ static void damon_merge_regions_of(struct damon_target *t, unsigned int thres,
        struct damon_region *r, *prev = NULL, *next;
 
        damon_for_each_region_safe(r, next, t) {
+               damon_verify_merge_regions_of(r);
                if (abs(r->nr_accesses - r->last_nr_accesses) > thres)
                        r->age = 0;
                else if ((r->nr_accesses == 0) != (r->last_nr_accesses == 0))