mm/damon: cleanup code, add test cases, and update guidances in docs
Subsystems (5)
SJ Park
maintainercover mm/damon: cleanup code, add test cases, and update guidances in docs
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/[email protected]
- Fix a typo: s/alingment/alignment/.
- Add damon probes parameter validation cleanup (patches 4 and 5). Changes from RFC
- RFC: https://lore.kernel.org/[email protected]
- 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
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 1/12 mm/damon/core: use damon_nr_samples_per_aggr() for max merge threshold
kdamond_merge_regions() open-codes max region merge threshold calculation. What it does is fundamentally the same as damon_nr_samples_per_aggr() but missing a few corner cases. The unhandled corner cases should be rare and make only a negligible level of monitoring results degradation. But having the inconsistency could increase future maintenance burden. Use the dedicated function.
--- mm/damon/core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
mm/damon/core.c +1 -2
@@ -3470,8 +3470,7 @@ static void kdamond_merge_regions(struct damon_ctx *c, unsigned int threshold,unsigned int max_thres;bool count_age = true; - max_thres = c->attrs.aggr_interval / - (c->attrs.sample_interval ? c->attrs.sample_interval :1 ); + max_thres =damon_nr_samples_per_aggr (&c->attrs);while (true) { nr_regions =0 ;damon_for_each_target (t, c) {
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 2/12 mm/damon/core: remove debug messages
In reply to SJ ParkThere are a few debug messages in DAMON core. Those have not really been used in a meaningful way for the last few years, though. Remove those.
--- mm/damon/core.c | 9 --------- 1 file changed, 9 deletions(-)
mm/damon/core.c +0 -9
@@ -3693,10 +3693,6 @@ static unsigned long damos_wmark_wait_us(struct damos *scheme)/* higher than high watermark or lower than low watermark */ if (metric > scheme->wmarks.high || scheme->wmarks.low > metric) { -if (scheme->wmarks.activated) -pr_debug ("deactivate a scheme (%d) for %s wmark\n" , - scheme->action, -str_high_low (metric > scheme->wmarks.high)); scheme->wmarks.activated = false;return scheme->wmarks.interval; }
@@ -3706,8 +3702,6 @@ static unsigned long damos_wmark_wait_us(struct damos *scheme) !scheme->wmarks.activated)return scheme->wmarks.interval; -if (!scheme->wmarks.activated) -pr_debug ("activate a scheme (%d)\n" , scheme->action); scheme->wmarks.activated = true;return 0 ; }
@@ -3850,8 +3844,6 @@ static int kdamond_fn(void *data)struct damon_ctx *ctx = data;unsigned long sz_limit =0 ; -pr_debug ("kdamond (%d) starts\n" , current->pid); -mutex_lock (&ctx->call_controls_lock); ctx->call_controls_obsolete = false;mutex_unlock (&ctx->call_controls_lock);
@@ -4005,7 +3997,6 @@ static int kdamond_fn(void *data)mutex_unlock (&ctx->walk_control_lock);damos_walk_cancel (ctx); -pr_debug ("kdamond (%d) finishes\n" , current->pid);mutex_lock (&ctx->kdamond_lock); ctx->kdamond =NULL ;mutex_unlock (&ctx->kdamond_lock);
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 3/12 mm/damon/vaddr: remove a debug message
In reply to SJ ParkThere is a debug message in the DAMON virtual address space operation set. It has not really been used in a meaningful way for the last few years, though. Remove it.
--- mm/damon/vaddr.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-)
mm/damon/vaddr.c +3 -13
@@ -189,22 +189,12 @@ static int damon_va_three_regions(struct damon_target *t,* <BIG UNMAPPED REGION 2> * <stack> */ -static void __damon_va_init_regions (struct damon_ctx *ctx, -struct damon_target *t) +static void __damon_va_init_regions (struct damon_target *t) { -struct damon_target *ti;struct damon_addr_range regions[3 ]; -int tidx =0 ; -if (damon_va_three_regions (t, regions)) { -damon_for_each_target (ti, ctx) { -if (ti == t) -break ; - tidx++; - } -pr_debug ("Failed to get three regions of %dth target\n" , tidx); +if (damon_va_three_regions (t, regions))return ; - }damon_set_regions (t, regions,3 ,DAMON_MIN_REGION_SZ ); }
@@ -217,7 +207,7 @@ static void damon_va_init(struct damon_ctx *ctx)damon_for_each_target (t, ctx) {/* the user may set the target regions as they want */ if (!damon_nr_regions (t)) -__damon_va_init_regions (ctx, t); +__damon_va_init_regions (t); } }
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 4/12 mm/damon/core: validate number of probes in valid_probe_params()
In reply to SJ ParkEach DAMON context is allowed to have only up to DAMON_MAX_PROBES probes. The central place for validating DAMON probe parameters, damon_valid_probe_params(), is not validating the upper limit, though. Do the validation.
--- mm/damon/core.c | 7 +++++++ 1 file changed, 7 insertions(+)
mm/damon/core.c +7 -0
@@ -1401,6 +1401,13 @@ static bool damon_valid_probe_params(struct damon_ctx *ctx)unsigned char max_probe_hits;struct damon_probe *probe;unsigned int wsum, wsum_to_add; +int nr_probes; + + nr_probes =0 ; +damon_for_each_probe (probe, ctx) + nr_probes++; +if (nr_probes >DAMON_MAX_PROBES ) +return false;if (!damon_has_probe_weights (ctx))return true;
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 5/12 mm/damon/sysfs: remove probes number validation
In reply to SJ ParkDAMON sysfs interface is disallowing >DAMON_MAX_PROBES nr_probes input, since DAMON_MAX_PROBES is the upper limit of probes per DAMON context. The core layer is validating the upper limit again, though. It is preferred to let DAMON API callers such as sysfs interface to set parameters in flexible ways, and do parameters validation in the core layer. Drop the duplicated validation in the sysfs interface.
--- mm/damon/sysfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/damon/sysfs.c +1 -1
@@ -1477,7 +1477,7 @@ static ssize_t nr_probes_store(struct kobject *kobj,if (err)return err; -if (nr <0 || nr >DAMON_MAX_PROBES ) +if (nr <0 )return -EINVAL ; probes = container_of(kobj, struct damon_sysfs_probes, kobj);
Signature · 1 line
2.47.3
[email protected]
AI reviewRe: [RFC PATCH v1.2 05/12] mm/damon/sysfs: remove probes number validation
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [High] Removing the upper bound check on `nr_probes` allows userspace to trigger massive unbounded…
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Removing the upper bound check on nr_probes allows userspace to trigger massive unbounded kobject allocations, causing soft lockups and OOM. --
--- Patch [5]: [RFC PATCH v1.2 05/12] mm/damon/sysfs: remove probes number validation --- commit a336beb0d20022011c91edc1b40bfb3902ced157
Author: SJ Park <[email protected]>
mm/damon/sysfs: remove probes number validation
DAMON sysfs interface drops the >DAMON_MAX_PROBES validation on nr_probes input, intending to let the core layer validate the upper limit instead.
mm/damon/sysfs.c static ssize_t nr_probes_store(struct kobject *kobj, · line 1238
Quoted 11 lines
mm/damon/sysfs.c +1
-1@@ -1234,7 +1234,7 @@ static ssize_t nr_probes_store(struct kobject *kobj,if (err)return err; -if (nr <0 || nr >DAMON_MAX_PROBES ) +if (nr <0 )return -EINVAL ;
[Severity: High]
Does removing this upper bound allow userspace to trigger soft lockups or OOM?
If a user writes a very large value (e.g. 2,000,000) here, that unbounded value is passed into damon_sysfs_probes_add_dirs() and iterates this loop:
mm/damon/sysfs.c:damon_sysfs_probes_add_dirs() {
...
probes_arr = kmalloc_objs(*probes_arr, nr_probes,
GFP_KERNEL | __GFP_NOWARN);
if (!probes_arr)
return -ENOMEM;
probes->probes_arr = probes_arr;
for (i = 0; i < nr_probes; i++) {
probe = damon_sysfs_probe_alloc();
...
}Since this loop allocates sysfs kobjects synchronously without cond_resched(), will this cause the system to freeze or exhaust memory before the DAMON core layer ever gets a chance to validate the parameters?
Quoted 2 lines
mm/damon/sysfs.c +0
-0probes = container_of(kobj, struct damon_sysfs_probes, kobj);
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=5
SJ Park
maintainerRe: [RFC PATCH v1.2 05/12] mm/damon/sysfs: remove probes number validation
Quoted 46 lines · On Wed, 29 Jul 2026 14:16:24 +0000 [email protected] wrote:
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Removing the upper bound check onnr_probesallows userspace to trigger massive unbounded kobject allocations, causing soft lockups and OOM. ----- Patch [5]: [RFC PATCH v1.2 05/12]
mm/damon/sysfs: remove probes number validation --- commita336beb0d20022011c91edc1b40bfb3902ced157
Author: SJ Park <[email protected]>
mm/damon/sysfs: remove probes number validationDAMON sysfs interface drops the >DAMON_MAX_PROBES validation on
nr_probesinput, intending to let the core layer validate the upper limit instead.mm/damon/sysfs.c static ssize_t nr_probes_store(struct kobject *kobj, · line 1238
Quoted 11 lines
mm/damon/sysfs.c +1
-1@@ -1234,7 +1234,7 @@ static ssize_t nr_probes_store(struct kobject *kobj,if (err)return err; -if (nr <0 || nr >DAMON_MAX_PROBES ) +if (nr <0 )return -EINVAL ;[Severity: High]
Does removing this upper bound allow userspace to trigger soft lockups or OOM?If a user writes a very large value (e.g. 2,000,000) here, that unbounded value is passed into
damon_sysfs_probes_add_dirs()and iterates this loop:mm/damon/sysfs.c:damon_sysfs_probes_add_dirs() { ... probes_arr = kmalloc_objs(*probes_arr, nr_probes, GFP_KERNEL | __GFP_NOWARN); if (!probes_arr) return -ENOMEM; probes->probes_arr = probes_arr; for (i = 0; i < nr_probes; i++) { probe = damon_sysfs_probe_alloc(); ... }
Quoted 3 lines
Since this loop allocates sysfs kobjects synchronously without
cond_resched(), will this cause the system to freeze or exhaust memory before the DAMON core layer ever gets a chance to validate the parameters?
Sane users wouldn't do that. We can revisit if this turns out to be a real issue.
Quoted 6 lines
Quoted 3 lines
mm/damon/sysfs.c +0
-0probes = container_of(kobj, struct damon_sysfs_probes, kobj);Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=5
Thanks,
SJ
SJ Park
maintainerRFC PATCH 6/12 mm/damon/tests/core-kunit: extend set_regions() test for error case
In reply to SJ Parkdamon_test_set_regions_for() is designed to test only success-expected damon_set_regions() calls. Extend it to cover error-expected calls, too.
--- mm/damon/tests/core-kunit.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)
mm/damon/tests/core-kunit.h +10 -8
@@ -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)
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 7/12 mm/damon/tests/core-kunit: test <=0 size damon_set_regions() inputs
In reply to SJ ParkCommit 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.
--- mm/damon/tests/core-kunit.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
mm/damon/tests/core-kunit.h +14 -0
@@ -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 ); }static void damon_test_update_monitoring_result (struct kunit *test)
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 8/12 mm/damon/tests/core-kunit: test overlapping ranges for set_regions()
In reply to SJ ParkCommit 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.
--- mm/damon/tests/core-kunit.h | 11 +++++++++++ 1 file changed, 11 insertions(+)
mm/damon/tests/core-kunit.h +11 -0
@@ -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 ); }static void damon_test_update_monitoring_result (struct kunit *test)
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 9/12 mm/damon/tests/core-kunit: test damon_nr_samples_per_aggr()
In reply to SJ Parkdamon_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.
--- mm/damon/tests/core-kunit.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
mm/damon/tests/core-kunit.h +22 -0
@@ -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[] = {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),
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 10/12 selftests/damon/sysfs.sh: test hugepage_mem_bp quota goal
In reply to SJ ParkDAMON sysfs quota goal target_metric file now accepts 'hugepage_mem_bp' input. Test it is accepted in fundamental DAMON sysfs file operation selftest.
--- tools/testing/selftests/damon/sysfs.sh | 1 + 1 file changed, 1 insertion(+)
tools/testing/selftests/damon/sysfs.sh +1 -0
@@ -210,6 +210,7 @@ test_goal() ensure_write_succ "$fpath" "active_mem_bp" "valid input" ensure_write_succ "$fpath" "inactive_mem_bp" "valid input" ensure_write_succ "$fpath" "node_eligible_mem_bp" "valid input" + ensure_write_succ "$fpath" "hugepage_mem_bp" "valid input" ensure_write_fail "$fpath" "foo" "invalid input" ensure_file "$goal_dir/nid" "exist" "600" ensure_file "$goal_dir/path" "exist" "600"
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 11/12 Docs/mm/damon/maintainer-profile: update AI review for Sashiko replies
In reply to SJ ParkIn the past, sharing Sashiko review results was tedious. Also it was suggested to minimize the recipients on the sharing mails. Hence the AI review section of DAMON maintainer profile document was updated to give guidance about available tools for making the sharing easier, and how the recipients list should be managed.
Now DAMON is onboarded [1] to Sashiko's automatic review replies feature. Sashiko directly sends its reviews as replies to the patch mail thread. It also reduces the recipients list to deliver the reporting to only the author and the mailing list.
Remove the old guidance that is no more necessary but only confusing.
[1] https://github.com/sashiko-dev/sashiko/commit/b554c7b6e733
--- Documentation/mm/damon/maintainer-profile.rst | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-)
Documentation/mm/damon/maintainer-profile.rst +5 -14
@@ -106,18 +106,9 @@ AI Review For patches that are publicly posted to DAMON mailing list ([email protected]), AI reviews of the patches will be available at -sashiko.dev. The reviews could also be sent as mails to the author of the -patch. - -Patch authors are encouraged to check the AI reviews and share their opinions. -The sharing could be done as a reply to the mail thread. Consider reducing the -recipients list for such sharing, since some people are not really interested -in AI reviews. As a rule of thumb, drop [email protected] and individuals -except DAMON maintainer. - -`hkml` also provides a `feature -<https://github.com/sjp38/hackermail/blob/master/USAGE.md#forwarding-sashikodev-statuscomments-to-mailing-list>`_ -for such sharing. Please feel free to use the feature. +sashiko.dev. The reviews will also be sent as replies to the author of the +patch and the mailing list. -It is only an optional recommendation. DAMON maintainer could also ask any -question about the AI reviews, though. +Patch authors are encouraged to check the AI reviews and share their opinions +by replying on the mail thread. It is only an optional recommendation. DAMON +maintainer could also ask any question about the AI reviews, though.
Signature · 1 line
2.47.3
SJ Park
maintainerRFC PATCH 12/12 Docs/ABI/damon: recommend subsystem doc instead of admin-guide
In reply to SJ ParkDAMON ABI doc is recommending DAMON admin-guide for people who are willing to know further about DAMON. Nowadays the subsystem doc (Documentation/mm/damon) is a more recommended place for even beginners. Recommend the subsystem doc over admin-guide.
--- Documentation/ABI/testing/sysfs-kernel-mm-damon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Documentation/ABI/testing/sysfs-kernel-mm-damon +1 -1
@@ -3,7 +3,7 @@ Date: Mar 2022 Contact: SJ Park <[email protected]> Description: Interface for Data Access MONitoring (DAMON). Contains files for controlling DAMON. For more details on DAMON itself, - please refer to Documentation/admin-guide/mm/damon/index.rst. + please refer to Documentation/mm/damon/index.rst. What: /sys/kernel/mm/damon/admin/ Date: Mar 2022
Signature · 1 line
2.47.3