[RFC PATCH 00/10] mm/damon: cleanup code, add test cases, and update guidances in docs

2 views
Skip to first unread message

SJ Park

unread,
Jul 28, 2026, 1:28:17 AMJul 28
to SJ Park, Liam R. Howlett, Andrew Morton, Brendan Higgins, David Gow, David Hildenbrand, Jonathan Corbet, Lorenzo Stoakes, Michal Hocko, Mike Rapoport, Shuah Khan, Shuah Khan, Suren Baghdasaryan, Vlastimil Babka, da...@lists.linux.dev, kuni...@googlegroups.com, linu...@vger.kernel.org, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
Misc cleanup, improvements and updates of code, test, and documents.

Patches 1-3 cleanup DAMON code. Patches 4-8 adds kunit and selftest
test cases for recently fixed bugs and a new feature. Patches 9 and 10
update guidelines for AI review and what document to read, on DAMON
documents.

SJ Park (10):
mm/damon/core: use damon_nr_samples_per_aggr() for max merge threshold
mm/damon/core: remove debug messages
mm/damon/vaddr: remove a debug message
mm/damon/tests/core-kunit: extend set_regions() test for error case
mm/damon/tests/core-kunit: test <=0 size damon_set_regions() inputs
mm/damon/tests/core-kunit: test overlapping ranges for set_regions()
mm/damon/tests/core-kunit: test damon_nr_samples_per_aggr()
selftests/damon/sysfs.sh: test hugepage_mem_bp quota goal
Docs/mm/damon/maintainer-profile: update AI review for Sashiko replies
Docs/ABI/damon: recommend subsystem doc instead of admin-guide

.../ABI/testing/sysfs-kernel-mm-damon | 2 +-
Documentation/mm/damon/maintainer-profile.rst | 19 ++----
mm/damon/core.c | 12 +---
mm/damon/tests/core-kunit.h | 60 ++++++++++++++++---
mm/damon/vaddr.c | 11 +---
tools/testing/selftests/damon/sysfs.sh | 1 +
6 files changed, 61 insertions(+), 44 deletions(-)


base-commit: f5d0a1c210a9bec33ee6cc888f4cc6dd1f56eda7
--
2.47.3

SJ Park

unread,
Jul 28, 2026, 1:28:19 AMJul 28
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
damon_test_set_regions_for() is designed to test only success-expected
damon_set_regions() calls. Extend it to cover error-expected calls,
too.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index 4a536d41cdb2d..befc1196d6d60 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -463,11 +463,12 @@ static void damon_test_set_regions_for(struct kunit *test,
struct damon_addr_range *old_ranges, int sz_old_ranges,
struct damon_addr_range *new_ranges, int sz_new_ranges,
unsigned long min_region_sz,
- struct damon_addr_range *expect_ranges, int sz_expect_ranges)
+ struct damon_addr_range *expect_ranges, int sz_expect_ranges,
+ int expect_err)
{
struct damon_target *t;
struct damon_region *r;
- int i;
+ int i, err;

t = damon_new_target();
if (!t)
@@ -481,7 +482,8 @@ static void damon_test_set_regions_for(struct kunit *test,
damon_add_region(r, t);
}

- damon_set_regions(t, new_ranges, sz_new_ranges, min_region_sz);
+ err = damon_set_regions(t, new_ranges, sz_new_ranges, min_region_sz);
+ KUNIT_EXPECT_EQ(test, err, expect_err);

KUNIT_EXPECT_EQ(test, damon_nr_regions(t), sz_expect_ranges);
if (damon_nr_regions(t) != sz_expect_ranges) {
@@ -510,7 +512,7 @@ static void damon_test_set_regions(struct kunit *test)
(struct damon_addr_range[]){
{.start = 5, .end = 15},
{.start = 15, .end = 25},
- }, 2);
+ }, 2, 0);
/* Un-intersecting regions should be removed. */
damon_test_set_regions_for(test,
(struct damon_addr_range[]){
@@ -523,7 +525,7 @@ static void damon_test_set_regions(struct kunit *test)
1,
(struct damon_addr_range[]){
{.start = 18, .end = 23},
- }, 1);
+ }, 1, 0);
/*
* Holes should be filled up with new regions.
*
@@ -544,7 +546,7 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 8, .end = 16},
{.start = 16, .end = 24},
{.start = 24, .end = 28},
- }, 3);
+ }, 3, 0);
/*
* New regions should be able to be appended.
*
@@ -566,7 +568,7 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 0, .end = 4},
{.start = 4, .end = 15},
{.start = 25, .end = 40},
- }, 3);
+ }, 3, 0);
/*
* New regions should be able to be inserted.
*
@@ -589,7 +591,7 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 0, .end = 15},
{.start = 25, .end = 40},
{.start = 44, .end = 50},
- }, 3);
+ }, 3, 0);
}

static void damon_test_update_monitoring_result(struct kunit *test)
--
2.47.3

SJ Park

unread,
Jul 28, 2026, 1:28:19 AMJul 28
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
Commit 1292c0ecb1ca ("mm/damon/core: validate ranges in
damon_set_regions()") disallowed passing zero or negative size input
ranges to damon_set_regions(). Add kunit test cases for those inputs.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index befc1196d6d60..ac15393a7935b 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -592,6 +592,20 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 25, .end = 40},
{.start = 44, .end = 50},
}, 3, 0);
+ /* Zero size regions should return -EINVAL. */
+ damon_test_set_regions_for(test,
+ (struct damon_addr_range[]){}, 0,
+ (struct damon_addr_range[]){
+ {.start = 42, .end = 42},
+ }, 1, 1,
+ (struct damon_addr_range[]){}, 0, -EINVAL);
+ /* Negative size regions should return -EINVAL. */
+ damon_test_set_regions_for(test,
+ (struct damon_addr_range[]){}, 0,
+ (struct damon_addr_range[]){
+ {.start = 42, .end = 21},
+ }, 1, 1,
+ (struct damon_addr_range[]){}, 0, -EINVAL);

SJ Park

unread,
Jul 28, 2026, 1:28:20 AMJul 28
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
Commit 954157679ec3 ("mm/damon/core: disallow overlapping input ranges
for damon_set_regions()") disallowed passing overlapping input ranges to
damon_set_regions(). Add a kunit test case for the overlapping input.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index ac15393a7935b..3041b8288ec26 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -606,6 +606,17 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 42, .end = 21},
}, 1, 1,
(struct damon_addr_range[]){}, 0, -EINVAL);
+ /*
+ * Regions resulting in same region after alingment should return
+ * -EINVAL.
+ */
+ damon_test_set_regions_for(test,
+ (struct damon_addr_range[]){}, 0,
+ (struct damon_addr_range[]){
+ {.start = 10, .end = 20},
+ {.start = 20, .end = 30},
+ }, 2, 4096,

SJ Park

unread,
Jul 28, 2026, 1:28:21 AMJul 28
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
damon_max_nr_accesses(), which is a previous version of
damon_nr_samples_per_aggr() before the renaming, was wrongly returning
zero or random overflowed values for extreme intervals setup. Commit
35d4a3cf70a8 ("mm/damon/ops-common: handle extreme intervals in
damon_hot_score()") updated the function to return correct or more valid
values. Add a kunit test to ensure it is working as expected.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index 3041b8288ec26..511f2856d343c 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -619,6 +619,22 @@ static void damon_test_set_regions(struct kunit *test)
(struct damon_addr_range[]){}, 0, -EINVAL);
}

+static void damon_test_nr_samples_per_aggr(struct kunit *test)
+{
+ struct damon_attrs attrs = {
+ .sample_interval = 0,
+ .aggr_interval = 0,
+ };
+
+ /* Zero aggregation interval doesn't cause division by zero */
+ KUNIT_EXPECT_EQ(test, damon_nr_samples_per_aggr(&attrs), 1);
+
+ /* Too large aggregation interval doesn't cause overflow */
+ attrs.aggr_interval = (unsigned long)UINT_MAX + 1;
+ KUNIT_EXPECT_GE(test, damon_nr_samples_per_aggr(&attrs), 0);
+ KUNIT_EXPECT_LE(test, damon_nr_samples_per_aggr(&attrs), UINT_MAX);
+}
+
static void damon_test_update_monitoring_result(struct kunit *test)
{
struct damon_attrs old_attrs = {
@@ -1670,6 +1686,7 @@ static struct kunit_case damon_test_cases[] = {
KUNIT_CASE(damon_test_split_above_half_progresses),
KUNIT_CASE(damon_test_ops_registration),
KUNIT_CASE(damon_test_set_regions),
+ KUNIT_CASE(damon_test_nr_samples_per_aggr),
KUNIT_CASE(damon_test_update_monitoring_result),
KUNIT_CASE(damon_test_set_attrs),
KUNIT_CASE(damon_test_mvsum),
--
2.47.3

SJ Park

unread,
Jul 28, 2026, 11:38:01 PMJul 28
to SJ Park, Liam R. Howlett, Andrew Morton, Brendan Higgins, David Gow, David Hildenbrand, Jonathan Corbet, Lorenzo Stoakes, Michal Hocko, Mike Rapoport, Shuah Khan, Shuah Khan, Suren Baghdasaryan, Vlastimil Babka, da...@lists.linux.dev, kuni...@googlegroups.com, linu...@vger.kernel.org, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
Misc cleanup, improvements and updates of code, test, and documents.

Patches 1-3 cleanup DAMON code. Patches 4-8 adds kunit and selftest
test cases for recently fixed bugs and a new feature. Patches 9 and 10
update guidelines for AI review and what document to read, on DAMON
documents.

Changes from RFC
- RFC: https://lore.kernel.org/2026072805281...@kernel.org
- Remove ctx parameter of __damon_va_init_regions().
- Fix damon_nr_samples_per_aggr() overflow kunit test.
- Rebase to the latest mm-new.

SJ Park (10):
mm/damon/core: use damon_nr_samples_per_aggr() for max merge threshold
mm/damon/core: remove debug messages
mm/damon/vaddr: remove a debug message
mm/damon/tests/core-kunit: extend set_regions() test for error case
mm/damon/tests/core-kunit: test <=0 size damon_set_regions() inputs
mm/damon/tests/core-kunit: test overlapping ranges for set_regions()
mm/damon/tests/core-kunit: test damon_nr_samples_per_aggr()
selftests/damon/sysfs.sh: test hugepage_mem_bp quota goal
Docs/mm/damon/maintainer-profile: update AI review for Sashiko replies
Docs/ABI/damon: recommend subsystem doc instead of admin-guide

.../ABI/testing/sysfs-kernel-mm-damon | 2 +-
Documentation/mm/damon/maintainer-profile.rst | 19 ++----
mm/damon/core.c | 12 +---
mm/damon/tests/core-kunit.h | 65 ++++++++++++++++---
mm/damon/vaddr.c | 16 +----
tools/testing/selftests/damon/sysfs.sh | 1 +
6 files changed, 68 insertions(+), 47 deletions(-)


base-commit: bc87db7fa4d8d45745620150a9487efcb6ebbd51
--
2.47.3

SJ Park

unread,
Jul 28, 2026, 11:38:03 PMJul 28
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
damon_test_set_regions_for() is designed to test only success-expected
damon_set_regions() calls. Extend it to cover error-expected calls,
too.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index 4a536d41cdb2d..befc1196d6d60 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -463,11 +463,12 @@ static void damon_test_set_regions_for(struct kunit *test,
struct damon_addr_range *old_ranges, int sz_old_ranges,
struct damon_addr_range *new_ranges, int sz_new_ranges,
unsigned long min_region_sz,
- struct damon_addr_range *expect_ranges, int sz_expect_ranges)
+ struct damon_addr_range *expect_ranges, int sz_expect_ranges,
+ int expect_err)
{
struct damon_target *t;
struct damon_region *r;
- int i;
+ int i, err;

t = damon_new_target();
if (!t)
@@ -481,7 +482,8 @@ static void damon_test_set_regions_for(struct kunit *test,
damon_add_region(r, t);
}

- damon_set_regions(t, new_ranges, sz_new_ranges, min_region_sz);
+ err = damon_set_regions(t, new_ranges, sz_new_ranges, min_region_sz);
+ KUNIT_EXPECT_EQ(test, err, expect_err);

KUNIT_EXPECT_EQ(test, damon_nr_regions(t), sz_expect_ranges);
if (damon_nr_regions(t) != sz_expect_ranges) {
@@ -510,7 +512,7 @@ static void damon_test_set_regions(struct kunit *test)
(struct damon_addr_range[]){
{.start = 25, .end = 40},
- }, 3);
+ }, 3, 0);
/*
* New regions should be able to be inserted.
*
@@ -589,7 +591,7 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 0, .end = 15},
{.start = 25, .end = 40},
{.start = 44, .end = 50},
- }, 3);
+ }, 3, 0);
}

static void damon_test_update_monitoring_result(struct kunit *test)
--
2.47.3

SJ Park

unread,
Jul 28, 2026, 11:38:03 PMJul 28
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
Commit 1292c0ecb1ca ("mm/damon/core: validate ranges in
damon_set_regions()") disallowed passing zero or negative size input
ranges to damon_set_regions(). Add kunit test cases for those inputs.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index befc1196d6d60..ac15393a7935b 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -592,6 +592,20 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 25, .end = 40},
{.start = 44, .end = 50},
}, 3, 0);
+ /* Zero size regions should return -EINVAL. */
+ damon_test_set_regions_for(test,
+ (struct damon_addr_range[]){}, 0,
+ (struct damon_addr_range[]){
+ {.start = 42, .end = 42},
+ }, 1, 1,
+ (struct damon_addr_range[]){}, 0, -EINVAL);
+ /* Negative size regions should return -EINVAL. */
+ damon_test_set_regions_for(test,
+ (struct damon_addr_range[]){}, 0,
+ (struct damon_addr_range[]){
+ {.start = 42, .end = 21},
+ }, 1, 1,
+ (struct damon_addr_range[]){}, 0, -EINVAL);

SJ Park

unread,
Jul 28, 2026, 11:38:04 PMJul 28
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
damon_max_nr_accesses(), which is a previous version of
damon_nr_samples_per_aggr() before the renaming, was wrongly returning
zero or random overflowed values for extreme intervals setup. Commit
35d4a3cf70a8 ("mm/damon/ops-common: handle extreme intervals in
damon_hot_score()") updated the function to return correct or more valid
values. Add a kunit test to ensure it is working as expected.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index 3041b8288ec26..0a1882ce6a081 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -619,6 +619,27 @@ static void damon_test_set_regions(struct kunit *test)
(struct damon_addr_range[]){}, 0, -EINVAL);
}

+static void damon_test_nr_samples_per_aggr(struct kunit *test)
+{
+ struct damon_attrs attrs = {
+ .sample_interval = 0,
+ .aggr_interval = 0,
+ };
+
+ /* Zero aggregation interval doesn't cause division by zero */
+ KUNIT_EXPECT_EQ(test, damon_nr_samples_per_aggr(&attrs), 1);
+
+ /*
+ * Too large aggregation interval on 64 bit system doesn't cause
+ * overflow
+ */
+ if (ULONG_MAX > UINT_MAX) {
+ attrs.aggr_interval = (unsigned long)UINT_MAX + 1;
+ KUNIT_EXPECT_EQ(test, damon_nr_samples_per_aggr(&attrs),
+ UINT_MAX);
+ }
+}
+
static void damon_test_update_monitoring_result(struct kunit *test)
{
struct damon_attrs old_attrs = {
@@ -1670,6 +1691,7 @@ static struct kunit_case damon_test_cases[] = {

SJ Park

unread,
Jul 28, 2026, 11:38:04 PMJul 28
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
Commit 954157679ec3 ("mm/damon/core: disallow overlapping input ranges
for damon_set_regions()") disallowed passing overlapping input ranges to
damon_set_regions(). Add a kunit test case for the overlapping input.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index ac15393a7935b..3041b8288ec26 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -606,6 +606,17 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 42, .end = 21},
}, 1, 1,
(struct damon_addr_range[]){}, 0, -EINVAL);
+ /*
+ * Regions resulting in same region after alingment should return
+ * -EINVAL.
+ */
+ damon_test_set_regions_for(test,
+ (struct damon_addr_range[]){}, 0,
+ (struct damon_addr_range[]){
+ {.start = 10, .end = 20},
+ {.start = 20, .end = 30},
+ }, 2, 4096,
+ (struct damon_addr_range[]){}, 0, -EINVAL);
}

static void damon_test_update_monitoring_result(struct kunit *test)
--
2.47.3

SJ Park

unread,
Jul 29, 2026, 10:03:07 AMJul 29
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
damon_test_set_regions_for() is designed to test only success-expected
damon_set_regions() calls. Extend it to cover error-expected calls,
too.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index 4a536d41cdb2d..befc1196d6d60 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
{.start = 25, .end = 40},
- }, 3);
+ }, 3, 0);
/*
* New regions should be able to be inserted.
*
@@ -589,7 +591,7 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 0, .end = 15},
{.start = 25, .end = 40},
{.start = 44, .end = 50},
- }, 3);
+ }, 3, 0);
}

SJ Park

unread,
Jul 29, 2026, 10:03:07 AMJul 29
to SJ Park, Liam R. Howlett, Andrew Morton, Brendan Higgins, David Gow, David Hildenbrand, Jonathan Corbet, Lorenzo Stoakes, Michal Hocko, Mike Rapoport, Shuah Khan, Shuah Khan, Suren Baghdasaryan, Vlastimil Babka, da...@lists.linux.dev, kuni...@googlegroups.com, linu...@vger.kernel.org, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
Misc cleanup, improvements and updates of code, test, and documents.

Patches 1-5 cleanup DAMON code. Patches 6-10 adds kunit and selftest
test cases for recently fixed bugs and a new feature. Patches 11 and 12
update guidelines for AI review and what document to read, on DAMON
documents.

Changes from RFC v1.1
- RFC v1.1: https://lore.kernel.org/2026072903375...@kernel.org
- Fix a typo: s/alingment/alignment/.
- Add damon probes parameter validation cleanup (patches 4 and 5).
Changes from RFC
- RFC: https://lore.kernel.org/2026072805281...@kernel.org
- Remove ctx parameter of __damon_va_init_regions().
- Fix damon_nr_samples_per_aggr() overflow kunit test.
- Rebase to the latest mm-new.

SJ Park (12):
mm/damon/core: use damon_nr_samples_per_aggr() for max merge threshold
mm/damon/core: remove debug messages
mm/damon/vaddr: remove a debug message
mm/damon/core: validate number of probes in valid_probe_params()
mm/damon/sysfs: remove probes number validation
mm/damon/tests/core-kunit: extend set_regions() test for error case
mm/damon/tests/core-kunit: test <=0 size damon_set_regions() inputs
mm/damon/tests/core-kunit: test overlapping ranges for set_regions()
mm/damon/tests/core-kunit: test damon_nr_samples_per_aggr()
selftests/damon/sysfs.sh: test hugepage_mem_bp quota goal
Docs/mm/damon/maintainer-profile: update AI review for Sashiko replies
Docs/ABI/damon: recommend subsystem doc instead of admin-guide

.../ABI/testing/sysfs-kernel-mm-damon | 2 +-
Documentation/mm/damon/maintainer-profile.rst | 19 ++----
mm/damon/core.c | 19 +++---
mm/damon/sysfs.c | 2 +-
mm/damon/tests/core-kunit.h | 65 ++++++++++++++++---
mm/damon/vaddr.c | 16 +----
tools/testing/selftests/damon/sysfs.sh | 1 +
7 files changed, 76 insertions(+), 48 deletions(-)


base-commit: a8aa6f3b608c8c9119a7978f5f4eb083c53ea56b
--
2.47.3

SJ Park

unread,
Jul 29, 2026, 10:03:08 AMJul 29
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
Commit 954157679ec3 ("mm/damon/core: disallow overlapping input ranges
for damon_set_regions()") disallowed passing overlapping input ranges to
damon_set_regions(). Add a kunit test case for the overlapping input.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index ac15393a7935b..252d81c30d6f1 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -606,6 +606,17 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 42, .end = 21},
}, 1, 1,
(struct damon_addr_range[]){}, 0, -EINVAL);
+ /*
+ * Regions resulting in same region after alignment should return
+ * -EINVAL.
+ */
+ damon_test_set_regions_for(test,
+ (struct damon_addr_range[]){}, 0,
+ (struct damon_addr_range[]){
+ {.start = 10, .end = 20},
+ {.start = 20, .end = 30},
+ }, 2, 4096,
+ (struct damon_addr_range[]){}, 0, -EINVAL);
}

SJ Park

unread,
Jul 29, 2026, 10:03:09 AMJul 29
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
Commit 1292c0ecb1ca ("mm/damon/core: validate ranges in
damon_set_regions()") disallowed passing zero or negative size input
ranges to damon_set_regions(). Add kunit test cases for those inputs.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index befc1196d6d60..ac15393a7935b 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -592,6 +592,20 @@ static void damon_test_set_regions(struct kunit *test)
{.start = 25, .end = 40},
{.start = 44, .end = 50},
}, 3, 0);
+ /* Zero size regions should return -EINVAL. */
+ damon_test_set_regions_for(test,
+ (struct damon_addr_range[]){}, 0,
+ (struct damon_addr_range[]){
+ {.start = 42, .end = 42},
+ }, 1, 1,
+ (struct damon_addr_range[]){}, 0, -EINVAL);
+ /* Negative size regions should return -EINVAL. */
+ damon_test_set_regions_for(test,
+ (struct damon_addr_range[]){}, 0,
+ (struct damon_addr_range[]){
+ {.start = 42, .end = 21},
+ }, 1, 1,

SJ Park

unread,
Jul 29, 2026, 10:03:10 AMJul 29
to SJ Park, Andrew Morton, Brendan Higgins, David Gow, da...@lists.linux.dev, kuni...@googlegroups.com, linux-...@vger.kernel.org, linux-k...@vger.kernel.org, linu...@kvack.org
damon_max_nr_accesses(), which is a previous version of
damon_nr_samples_per_aggr() before the renaming, was wrongly returning
zero or random overflowed values for extreme intervals setup. Commit
35d4a3cf70a8 ("mm/damon/ops-common: handle extreme intervals in
damon_hot_score()") updated the function to return correct or more valid
values. Add a kunit test to ensure it is working as expected.

Signed-off-by: SJ Park <s...@kernel.org>
---
mm/damon/tests/core-kunit.h | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index 252d81c30d6f1..c7bda8aadef3f 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -619,6 +619,27 @@ static void damon_test_set_regions(struct kunit *test)
(struct damon_addr_range[]){}, 0, -EINVAL);
}

+static void damon_test_nr_samples_per_aggr(struct kunit *test)
+{
+ struct damon_attrs attrs = {
+ .sample_interval = 0,
+ .aggr_interval = 0,
+ };
+
+ /* Zero aggregation interval doesn't cause division by zero */
+ KUNIT_EXPECT_EQ(test, damon_nr_samples_per_aggr(&attrs), 1);
+
+ /*
+ * Too large aggregation interval on 64 bit system doesn't cause
+ * overflow
+ */
+ if (ULONG_MAX > UINT_MAX) {
+ attrs.aggr_interval = (unsigned long)UINT_MAX + 1;
+ KUNIT_EXPECT_EQ(test, damon_nr_samples_per_aggr(&attrs),
+ UINT_MAX);
+ }
+}
+
static void damon_test_update_monitoring_result(struct kunit *test)
Reply all
Reply to author
Forward
0 new messages