mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
mm/damon/core: add damon_merge_regions_of() debug_sanity check
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>
This commit is contained in:
parent
0bb7682fdb
commit
c070da2391
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user