mm-damon-tests-core-kunit-test-preservation-of-quota-state.patch removed from -mm tree
The quilt patch titled
Subject: mm/damon/tests/core-kunit: test preservation of quota state
has been removed from the -mm tree. Its filename was
mm-damon-tests-core-kunit-test-preservation-of-quota-state.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Karl Mehltretter <[email protected]>
Subject: mm/damon/tests/core-kunit: test preservation of quota state
Date: Mon, 28 Sep 2026 01:58:34 -0700
Check that damon_new_scheme() initializes the new scheme's quota without changing the quota passed as a parameter. Cover all eight fields initialized by damos_quota_init().
Also check that damon_commit_ctx() preserves those fields in the destination scheme for both accepted and rejected parameter updates. Use an invalid min_region_sz for the rejected update and confirm that returning -EINVAL leaves the running quota state unchanged.
Without the preceding fix, all eight fields are cleared in the constructor test and in both context update cases.
---
mm/damon/tests/core-kunit.h | 107 ++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+)
mm/damon/tests/core-kunit.h renamed from mm/damon/tests/core-kunit.h~mm-damon-tests-core-kunit-test-preservation-of-quota-state +107 -0
@@ -812,6 +812,48 @@ static void damos_test_new_filter(structdamos_destroy_filter (filter); } +static void damos_test_new_scheme_keeps_src_quota (struct kunit *test) +{ +struct damos_access_pattern pattern = {}; +struct damon_target target = {}; +struct damos_quota quota = { + .sz =SZ_64K , + .esz =123 , + .esz_bp =456 , + .total_charged_sz =789 , + .total_charged_ns =1011 , + .charged_sz =12 , + .charged_from =13 , + .charge_target_from = &target, + .charge_addr_from =14 , + }; +struct damos_watermarks wmarks = {}; +struct damos *s; + + s =damon_new_scheme (&pattern,DAMOS_STAT ,0 , "a, &wmarks, +NUMA_NO_NODE ); +if (!s) +kunit_skip (test,"scheme alloc fail" ); +KUNIT_EXPECT_EQ (test, s->quota.sz, (unsigned long )SZ_64K ); +KUNIT_EXPECT_EQ (test, s->quota.esz,0ul ); +KUNIT_EXPECT_EQ (test, s->quota.esz_bp,0ul ); +KUNIT_EXPECT_EQ (test, s->quota.total_charged_sz,0ul ); +KUNIT_EXPECT_EQ (test, s->quota.total_charged_ns,0ul ); +KUNIT_EXPECT_EQ (test, s->quota.charged_sz,0ul ); +KUNIT_EXPECT_EQ (test, s->quota.charged_from,0ul ); +KUNIT_EXPECT_PTR_EQ (test, s->quota.charge_target_from,NULL ); +KUNIT_EXPECT_EQ (test, s->quota.charge_addr_from,0ul ); +KUNIT_EXPECT_EQ (test, quota.esz,123ul ); +KUNIT_EXPECT_EQ (test, quota.esz_bp,456ul ); +KUNIT_EXPECT_EQ (test, quota.total_charged_sz,789ul ); +KUNIT_EXPECT_EQ (test, quota.total_charged_ns,1011ul ); +KUNIT_EXPECT_EQ (test, quota.charged_sz,12ul ); +KUNIT_EXPECT_EQ (test, quota.charged_from,13ul ); +KUNIT_EXPECT_PTR_EQ (test, quota.charge_target_from, &target); +KUNIT_EXPECT_EQ (test, quota.charge_addr_from,14ul ); +damon_destroy_scheme (s); +} +static void damos_test_commit_quota_goal_for (struct kunit *test,struct damos_quota_goal *dst,struct damos_quota_goal *src)
@@ -1572,6 +1614,69 @@ static void damon_test_commit_ctx(structdamon_destroy_ctx (dst); } +static void damon_test_commit_ctx_keeps_quota_for (struct kunit *test, +unsigned long min_region_sz,int expected_err) +{ +struct damos_access_pattern pattern = {}; +struct damos_quota quota = {.sz =SZ_64K }; +struct damos_watermarks wmarks = {}; +struct damon_ctx *src, *dst; +struct damon_target *target; +struct damos *s; + + dst =damon_new_ctx (); +if (!dst) +kunit_skip (test,"dst alloc fail" ); + target =damon_new_target (); +if (!target) { +damon_destroy_ctx (dst); +kunit_skip (test,"target alloc fail" ); + } +damon_add_target (dst, target); + s =damon_new_scheme (&pattern,DAMOS_STAT ,0 , "a, &wmarks, +NUMA_NO_NODE ); +if (!s) { +damon_destroy_ctx (dst); +kunit_skip (test,"scheme alloc fail" ); + } +damon_add_scheme (dst, s); + +/* Copy the parameters before populating dst's runtime quota state. */ + src =damon_new_test_ctx (dst); +if (!src) { +damon_destroy_ctx (dst); +kunit_skip (test,"src alloc fail" ); + } + src->min_region_sz = min_region_sz; + s->quota.esz =123 ; + s->quota.esz_bp =456 ; + s->quota.total_charged_sz =789 ; + s->quota.total_charged_ns =1011 ; + s->quota.charged_sz =12 ; + s->quota.charged_from =13 ; + s->quota.charge_target_from = target; + s->quota.charge_addr_from =14 ; + +KUNIT_EXPECT_EQ (test,damon_commit_ctx (dst, src), expected_err); +KUNIT_EXPECT_EQ (test, s->quota.esz,123ul ); +KUNIT_EXPECT_EQ (test, s->quota.esz_bp,456ul ); +KUNIT_EXPECT_EQ (test, s->quota.total_charged_sz,789ul ); +KUNIT_EXPECT_EQ (test, s->quota.total_charged_ns,1011ul ); +KUNIT_EXPECT_EQ (test, s->quota.charged_sz,12ul ); +KUNIT_EXPECT_EQ (test, s->quota.charged_from,13ul ); +KUNIT_EXPECT_PTR_EQ (test, s->quota.charge_target_from, target); +KUNIT_EXPECT_EQ (test, s->quota.charge_addr_from,14ul ); +damon_destroy_ctx (src); +damon_destroy_ctx (dst); +} + +static void damon_test_commit_ctx_keeps_quota (struct kunit *test) +{ +/* Only power of two min_region_sz is allowed. */ +damon_test_commit_ctx_keeps_quota_for (test,4096 ,0 ); +damon_test_commit_ctx_keeps_quota_for (test,4095 , -EINVAL ); +} +static void damon_test_valid_probe_params (struct kunit *test) {struct damon_ctx *ctx;
@@ -2259,6 +2364,7 @@ static struct kunit_case damon_test_caseKUNIT_CASE (damon_test_mvsum),KUNIT_CASE (damon_test_nr_accesses_mvsum),KUNIT_CASE (damos_test_new_filter), +KUNIT_CASE (damos_test_new_scheme_keeps_src_quota),KUNIT_CASE (damos_test_commit_quota_goal),KUNIT_CASE (damos_test_commit_quota_goals), KUNIT_CASE(damos_test_commit_quota),
@@ -2270,6 +2376,7 @@ static struct kunit_case damon_test_caseKUNIT_CASE (damon_test_commit_filter),KUNIT_CASE (damon_test_commit_probes),KUNIT_CASE (damon_test_commit_ctx), +KUNIT_CASE (damon_test_commit_ctx_keeps_quota),KUNIT_CASE (damon_test_valid_probe_params),KUNIT_CASE (damos_test_filter_out), KUNIT_CASE(damos_test_apply_scheme_filtered_sz),
_
Patches currently in -mm which might be from [email protected] are
squashfs-fix-fragment-index-table-sizing-overflow-on-32-bit.patch squashfs-make-the-fragment-index-table-bounds-check-overflow-safe.patch