From nobody Sat Sep 26 10:01:22 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 747B447F2D3; Wed, 2 Sep 2026 14:03:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357819; cv=none; b=O4ot00ZTdMw2gCN/Ww9pXAAG9psODusDUrhQdE9bPaslLHjzqhNLERGQqNTRhJ+63y3b/S29kon4Qe+DSjUhBKRpjA+jhwORm1DfNc//o2H/kICsw32r91FPTZqTQ5KmGrPeRsUVDTqeJa7dJR+ne+25cx6LakIiWklKs2CD2ew= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357819; c=relaxed/simple; bh=yuRjMV6HPxxGg3F8T//08K7nMtyRS0b4BVjN4ba2aTA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=B2HQbjZnhW6K+bCGHSp+JESxIKajJ7gSMnyUDJQ/31eT3I4Mnd/dL892eTIxHJ1yxmP56pWTtXqT+DlniaK30WVQ2vRh9hRiLUcNPY1PndmRoagQgWgn9gLL0tA6wKBooa172kKD1NKpfl8gZ9VxNJOr1VUULXBEsWE5pFfGT4Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QlBh8+Wj; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QlBh8+Wj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D6F8C1F00A3D; Wed, 2 Sep 2026 14:03:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788357818; bh=kRgNHsjFIHJ5E6PMMKzx1XWhx+ToWlevPqGLUpHC1XU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=QlBh8+WjuF2tUrcxK9t8i6OKujglfGERH1zT9Ygc6ORXDetBsjv9UkXIFPqat4qQ/ XxncyUXVP54V9k1BE3y8dWajPTkMQFkwKuk0ZuKXnC2dI9HngItnFELEAuGjITSNDl MQ/nOi7ad3OeZoVC6LjxAp3qr17gxsqPNEPcudfcbphgNtcisXwHuWLbuun77C0usV pUWFJavZyMgYMZRK7/wFPzocZGYf6PR/6ryvRh9lvs2ab+TDN0FGpXL9BFcxICOmWn f3SpQgIuEPObRLv1sQhlxhrxZ/lwGw4P00nBuBC/e5tlMazAXyQWveSIgGeRpk3lp9 H049qrbpP/sPQ== From: SJ Park To: Andrew Morton Cc: SJ Park , Brendan Higgins , David Gow , damon@lists.linux.dev, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 1/6] mm/damon/tests/core-kunit: test damon_commit_filter() Date: Wed, 2 Sep 2026 07:03:07 -0700 Message-ID: <20260902140313.85983-2-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260902140313.85983-1-sj@kernel.org> References: <20260902140313.85983-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add kunit test to ensure damon_commit_filter() updates destination filter as expected for valid inputs. Signed-off-by: SJ Park --- mm/damon/tests/core-kunit.h | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h index d0bed01a5b7fe..c2ddef3c76d35 100644 --- a/mm/damon/tests/core-kunit.h +++ b/mm/damon/tests/core-kunit.h @@ -1364,6 +1364,45 @@ static void damon_test_commit_target_regions(struct = kunit *test) (unsigned long[][2]) {{3, 8}, {8, 10}}, 2); } =20 +static void damon_test_commit_filter_for(struct kunit *test, + struct damon_filter *dst, struct damon_filter *src) +{ + damon_commit_filter(dst, src); + KUNIT_EXPECT_EQ(test, dst->type, src->type); + KUNIT_EXPECT_EQ(test, dst->matching, src->matching); + KUNIT_EXPECT_EQ(test, dst->allow, src->allow); + switch (src->type) { + case DAMON_FILTER_TYPE_MEMCG: + KUNIT_EXPECT_EQ(test, dst->memcg_id, src->memcg_id); + break; + default: + break; + } +} + +static void damon_test_commit_filter(struct kunit *test) +{ + struct damon_filter dst =3D { + .type =3D DAMON_FILTER_TYPE_ANON, + .matching =3D false, + .allow =3D false, + }; + + damon_test_commit_filter_for(test, &dst, + &(struct damon_filter){ + .type =3D DAMON_FILTER_TYPE_ANON, + .matching =3D true, + .allow =3D true, + }); + damon_test_commit_filter_for(test, &dst, + &(struct damon_filter){ + .type =3D DAMON_FILTER_TYPE_MEMCG, + .matching =3D false, + .allow =3D false, + .memcg_id =3D 123, + }); +} + static void damon_test_commit_ctx(struct kunit *test) { struct damon_ctx *src, *dst; @@ -1771,6 +1810,7 @@ static struct kunit_case damon_test_cases[] =3D { KUNIT_CASE(damos_test_commit_pageout), KUNIT_CASE(damos_test_commit_migrate_hot), KUNIT_CASE(damon_test_commit_target_regions), + KUNIT_CASE(damon_test_commit_filter), KUNIT_CASE(damon_test_commit_ctx), KUNIT_CASE(damon_test_valid_probe_params), KUNIT_CASE(damos_test_filter_out), --=20 2.47.3 From nobody Sat Sep 26 10:01:22 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B9D9B49F127; Wed, 2 Sep 2026 14:03:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357820; cv=none; b=XHVCR56oI1crrORhWt+vwSWYNjyyLqOMloJ6u4eSL8u0hqHUKG+h0uurRTRIpoa1cWrhchzRClEbj8kDuWlEigwcfD++y8WmswY6uXWh9KVZpCb5O1w1aMS3QW43f0hwfTeWHHL3IJu+k4YormnKV6vDbVPhW7x2L15cnn4HUu0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357820; c=relaxed/simple; bh=mhg5spd/dAFzjI717T5/J5tKnG9ErLfa6LKK+y41F6I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UWHFYiStmFqFgW2bJtiGY2tMEYJJII+TZdnSKaht0M6rXpt0X1tekgAck3ybF4bGdMea9Hdt1IUO9OvLs3Dq6jE+99VJDIUvujmpGKzPguR66Sq3UpGDc0flyGgQOWOn1r4zeUNHL8tXZSunv4XKCPteu+EYxUi1gWmTvhYHvn8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=A8GMKvau; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="A8GMKvau" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4E0D01F00A3A; Wed, 2 Sep 2026 14:03:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788357818; bh=w+y2YGAE9dCS66KlFXJ1CfqA9PNhGVCbFRiU+z6GWB8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=A8GMKvaur5A0pGiCYcRq25dH9g8ieYXqvdJV7+FJTx227q0RwkObIse7UVbq8E52B wsGio2tAGIeJImnBWe930VkihgttsxasQNoolrwco2tMmdTjC946GflB60YrJOBCJE 6PujGNQOkx18GuRX46w9/DdLvFPHwh/AOBM9S1fqD2bJfbICQwJwS58HQ9+Vm4skFW GS+tgCIKssbWirh9QIi/61bIyMrMqCH19z/v7kZTLxTEVEuUjETXoe7HmqtC4JfrEZ a3047oU+oe3oOmxG702GvYLytWS6KCzGCXD2jhOJmpSjWm/j+iXBXDAyXsrZLvlaxZ c9e5sWL6PEXIw== From: SJ Park To: Andrew Morton Cc: SJ Park , Brendan Higgins , David Gow , damon@lists.linux.dev, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 2/6] mm/damon/tests/core-kunit: add damon_commit_probes() test Date: Wed, 2 Sep 2026 07:03:08 -0700 Message-ID: <20260902140313.85983-3-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260902140313.85983-1-sj@kernel.org> References: <20260902140313.85983-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add kunit test to ensure damon_commit_probes() updates destination DAMON context with source probes as expected. Signed-off-by: SJ Park --- mm/damon/tests/core-kunit.h | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h index c2ddef3c76d35..c01e6a75cadc1 100644 --- a/mm/damon/tests/core-kunit.h +++ b/mm/damon/tests/core-kunit.h @@ -1403,6 +1403,89 @@ static void damon_test_commit_filter(struct kunit *t= est) }); } =20 +static struct damon_ctx *damon_test_help_setup_probes(unsigned int weights= [], + int nr_weights) +{ + struct damon_ctx *ctx; + struct damon_probe *probe; + int i; + + ctx =3D damon_new_ctx(); + if (!ctx) + return NULL; + for (i =3D 0; i < nr_weights; i++) { + probe =3D damon_new_probe(); + if (!probe) { + damon_destroy_ctx(ctx); + return NULL; + } + probe->weight =3D weights[i]; + damon_add_probe(ctx, probe); + } + return ctx; +} + +static void damon_test_commit_probes_for(struct kunit *test, + unsigned int dst_weights[], int nr_dst_probes, + unsigned int src_weights[], int nr_src_probes) +{ + struct damon_ctx *dst, *src; + int err; + struct damon_probe *dst_probe, *src_probe; + + dst =3D damon_test_help_setup_probes(dst_weights, nr_dst_probes); + if (!dst) + kunit_skip(test, "dst alloc fail"); + src =3D damon_test_help_setup_probes(src_weights, nr_src_probes); + if (!src) { + damon_destroy_ctx(dst); + kunit_skip(test, "src alloc fail"); + } + + err =3D damon_commit_probes(dst, src); + KUNIT_EXPECT_EQ(test, err, 0); + if (err) + goto out; + nr_dst_probes =3D 0; + damon_for_each_probe(dst_probe, dst) + nr_dst_probes++; + nr_src_probes =3D 0; + damon_for_each_probe(src_probe, src) + nr_src_probes++; + KUNIT_EXPECT_EQ(test, nr_dst_probes, nr_src_probes); + if (nr_dst_probes !=3D nr_src_probes) + goto out; + nr_dst_probes =3D 0; + damon_for_each_probe(dst_probe, dst) { + src_probe =3D damon_nth_probe(nr_dst_probes, src); + KUNIT_EXPECT_EQ(test, src_probe->weight, dst_probe->weight); + nr_dst_probes++; + } +out: + damon_destroy_ctx(dst); + damon_destroy_ctx(src); +} + +static void damon_test_commit_probes(struct kunit *test) +{ + damon_test_commit_probes_for(test, + (unsigned int[]){}, 0, (unsigned int[]){}, 0); + damon_test_commit_probes_for(test, + (unsigned int[]){}, 0, (unsigned int[]){1}, 1); + damon_test_commit_probes_for(test, + (unsigned int[]){}, 0, (unsigned int[]){1, 2}, 2); + damon_test_commit_probes_for(test, + (unsigned int[]){1}, 1, (unsigned int[]){2}, 1); + damon_test_commit_probes_for(test, + (unsigned int[]){1}, 1, (unsigned int[]){2, 3}, 2); + damon_test_commit_probes_for(test, + (unsigned int[]){2, 3}, 2, (unsigned int[]){1}, 1); + damon_test_commit_probes_for(test, + (unsigned int[]){2, 3}, 2, (unsigned int[]){}, 0); + damon_test_commit_probes_for(test, + (unsigned int[]){2}, 1, (unsigned int[]){}, 0); +} + static void damon_test_commit_ctx(struct kunit *test) { struct damon_ctx *src, *dst; @@ -1811,6 +1894,7 @@ static struct kunit_case damon_test_cases[] =3D { KUNIT_CASE(damos_test_commit_migrate_hot), KUNIT_CASE(damon_test_commit_target_regions), KUNIT_CASE(damon_test_commit_filter), + KUNIT_CASE(damon_test_commit_probes), KUNIT_CASE(damon_test_commit_ctx), KUNIT_CASE(damon_test_valid_probe_params), KUNIT_CASE(damos_test_filter_out), --=20 2.47.3 From nobody Sat Sep 26 10:01:22 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4637E4A091F; Wed, 2 Sep 2026 14:03:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357820; cv=none; b=kco2Qjlbu7MJ0u+eDiV6awZCaJEKZBxwWdB+OAjjicuCqW59Izhu7E7JSmnKKYPXw+/3MYZCZvpRNfZZIMVQqH71iYc15NdaXdxtN+LFCec0I/icbM0AjfuMBHHOwnZvPp2Y1qHNjWqdRedt9xrnzhNLh2DHjWTlakJbRm/psc4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357820; c=relaxed/simple; bh=e9XXcPGdiu7jKQNaRWID+VQr3UMeObYB3tZ/IXjFhCE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DLstKgNiHnZxEhIHqBLT0w6k4dYlSh74+LcBsgruWYtyhzCHAtS9uWkQhGc564DW3iACSMkBIQQvZayoXlTp5/+NCac3Rz540zexb6vGeGP1o5rtXcJSRK8potKg4Et8n0R+8njVJO0Ua1VCP+wOoClfm45q3QBYpoGog3vq/xk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=idvUACI2; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="idvUACI2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BA0AF1F00A3F; Wed, 2 Sep 2026 14:03:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788357819; bh=d7E8/+9tPmws87WGovoxRC/oQMT8cFB9YIJxkAr2MhY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=idvUACI26/k1C0XqqOqWLVI4Rmd9LGPJ9tmtyN0+S0BIaSijEBokM8ybeEcPKqkur oSl27LswLlmXfrrdEo3aKSQOYEMks9MGB4DaSFKN76JIynYpO8lHIcbMn0xj9ErOSY xXaJXh6YEohELcOQIRfkca8J5XKHDp6fegGNeTXAaHV1kxDxxQWMMKA7A1jSwyNmIG k69Eg+VgQiPtbYVCcKn3SI0tWaCENb53qOA0UCH/VkUMmZY37Dy6rLnt3dL72B2wFj nYqf/a8IBpk3u9T7GP1AhBBltHkKBNZsz9GwDzHGSvOt8TMYmPZN0EIAq67hua6vCn iIUu3APb6htcw== From: SJ Park To: Andrew Morton Cc: SJ Park , Shuah Khan , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 3/6] selftests/damon/_damon_sysfs: implement DamonProbes Date: Wed, 2 Sep 2026 07:03:09 -0700 Message-ID: <20260902140313.85983-4-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260902140313.85983-1-sj@kernel.org> References: <20260902140313.85983-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend _damon_sysfs.py to support staging and committing DAMON probes. It will be used for setting DAMON probes via sysfs changes for testing purposes. Signed-off-by: SJ Park --- tools/testing/selftests/damon/_damon_sysfs.py | 125 +++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/damon/_damon_sysfs.py b/tools/testing/= selftests/damon/_damon_sysfs.py index f604b7d6530b3..e7095c3365245 100644 --- a/tools/testing/selftests/damon/_damon_sysfs.py +++ b/tools/testing/selftests/damon/_damon_sysfs.py @@ -570,6 +570,117 @@ class IntervalsGoal: return err return None =20 +class DamonFilter: + type_ =3D None + matching =3D None + allow =3D None + filters =3D None + path =3D None + idx =3D None + + def __init__(self, type_=3D'anon', matching=3DFalse, allow=3DFalse, pa= th=3DNone): + self.type_ =3D type_ + self.matching =3D matching + self.allow =3D allow + self.path =3D path + + def sysfs_dir(self): + return os.path.join(self.filters.sysfs_dir(), '%d' % self.idx) + + def stage(self): + err =3D write_file(os.path.join(self.sysfs_dir(), 'type'), self.ty= pe_) + if err is not None: + return err + err =3D write_file(os.path.join(self.sysfs_dir(), 'matching'), + 'Y' if self.matching else 'N') + if err is not None: + return err + err =3D write_file(os.path.join(self.sysfs_dir(), 'allow'), + 'Y' if self.allow else 'N') + if err is not None: + return err + if self.type_ =3D=3D 'memcg': + err =3D write_file(os.path.join(self.sysfs_dir(), 'path'), sel= f.path) + if err is not None: + return err + return None + +class DamonFilters: + filters =3D None + probe =3D None + + def __init__(self, filters=3DNone): + if filters is None: + filters =3D [] + self.filters =3D filters + for idx, filter in enumerate(self.filters): + filter.filters =3D self + filter.idx =3D idx + + def sysfs_dir(self): + return os.path.join(self.probe.sysfs_dir(), 'filters') + + def stage(self): + err =3D write_file( + os.path.join(self.sysfs_dir(), 'nr_filters'), + len(self.filters)) + if err is not None: + return err + for filter in self.filters: + err =3D filter.stage() + if err is not None: + return err + return None + +class DamonProbe: + weight =3D None + filters =3D None + probes =3D None + idx =3D None + + def __init__(self, weight=3D0, filters=3DNone): + self.weight =3D weight + if filters is None: + filters =3D DamonFilters() + self.filters =3D filters + self.filters.probe =3D self + + def sysfs_dir(self): + return os.path.join(self.probes.sysfs_dir(), '%d' % self.idx) + + def stage(self): + err =3D write_file( + os.path.join(self.sysfs_dir(), 'weight'), '%d' % self.weig= ht) + if err is not None: + return err + return self.filters.stage() + +class DamonProbes: + probes =3D None + attrs =3D None + + def __init__(self, probes=3DNone): + if probes is None: + probes =3D [] + self.probes =3D probes + for idx, probe in enumerate(self.probes): + probe.probes =3D self + probe.idx =3D idx + + def sysfs_dir(self): + return os.path.join(self.attrs.sysfs_dir(), 'probes') + + def stage(self): + err =3D write_file(os.path.join(self.sysfs_dir(), 'nr_probes'), + len(self.probes)) + if err is not None: + return err + for probe in self.probes: + err =3D probe.stage() + if err is not None: + return err + return None + class DamonAttrs: sample_us =3D None aggr_us =3D None @@ -577,11 +688,12 @@ class DamonAttrs: update_us =3D None min_nr_regions =3D None max_nr_regions =3D None + probes =3D None context =3D None =20 def __init__(self, sample_us=3D5000, aggr_us=3D100000, intervals_goal=3DNone, update_us=3D1000000, min_nr_region= s=3D10, - max_nr_regions=3D1000): + max_nr_regions=3D1000, probes=3DNone): self.sample_us =3D sample_us self.aggr_us =3D aggr_us if intervals_goal is None: @@ -591,6 +703,10 @@ class DamonAttrs: self.update_us =3D update_us self.min_nr_regions =3D min_nr_regions self.max_nr_regions =3D max_nr_regions + if probes is None: + probes =3D DamonProbes() + self.probes =3D probes + self.probes.attrs =3D self =20 def interval_sysfs_dir(self): return os.path.join(self.context.sysfs_dir(), 'monitoring_attrs', @@ -600,6 +716,9 @@ class DamonAttrs: return os.path.join(self.context.sysfs_dir(), 'monitoring_attrs', 'nr_regions') =20 + def sysfs_dir(self): + return os.path.join(self.context.sysfs_dir(), 'monitoring_attrs') + def stage(self): err =3D write_file(os.path.join(self.interval_sysfs_dir(), 'sample= _us'), self.sample_us) @@ -629,6 +748,10 @@ class DamonAttrs: if err is not None: return err =20 + err =3D self.probes.stage() + if err is not None: + return err + class DamonCtx: ops =3D None monitoring_attrs =3D None --=20 2.47.3 From nobody Sat Sep 26 10:01:22 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7BE2B4A0EF5; Wed, 2 Sep 2026 14:03:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357820; cv=none; b=IDqCxirN1A1mtsQLVKFpjd9H2QNmuIiaOp5tcPnOjyt6OJUaNtO9krSixDe2Seu62t/otXyvyDz8saeCrGtiC2WA7FM69RieAHWZsf+2uFu9Lb3G3XEOWcy5SiHxHaP7K8ZRzcCTeoEH57tGl+AlwZLzKa9gX6UxOY0T/uvZpB8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357820; c=relaxed/simple; bh=DJPYvh3BoeDGZsI6ipGISBHF/SQmPmzJIQyhoWHeFFc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ir4R3RkZrQu6A/pZ7h4TtDA7urkgGZk2YX7qeAORNTRDBVQ2/SnGLVQ+eWJZx+KKkiMZJUP6dt1khaldNGwEFIlPamWi6i3gdf/pixJM/lNhH0lmTHMC7TcccZDPlBl0xwMHmDgwxbGKqrSylMpONHJCvjOJNgdAiBh4S3c3KNo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ep7T5umy; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ep7T5umy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D26E1F00AC4; Wed, 2 Sep 2026 14:03:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788357819; bh=MtDpGEkDh7eFQBN1dloGGbcdOXn6qckrmCm8+BjUBow=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ep7T5umyQPsaQIuxBEjumOhQlbQ6KcBV9dQNiJD3+3dTJb2dztfr3aHL5vmczrWjA cXBm21+OWPnSjsnD8FIij3l8BzZ2UKed60ObsRunCyGG5YXeP6Q5L28a1PMsvqKGSu P0zGLpDTUXqFttIyEsqNQYcPr/ObNSLd8gOd3SFBTuqsl+24UxLiEnu066WYvWhDPS EYitdTC6bVj7x6LwAGAFVbiP5EVx9bSFL/wR4vMRJr6oRq1DWuDQkjxaqqc8QH7y1L d1z1XZ0AsRckAlxG0qoGawcypHeIaCh8jJ4RYxA5eCpij96/ZDZeTnyKMvN2k2cUhG juLQnHGGMFIZQ== From: SJ Park To: Andrew Morton Cc: SJ Park , Shuah Khan , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 4/6] selftests/damon/drgn_dump_damon_status: dump probes Date: Wed, 2 Sep 2026 07:03:10 -0700 Message-ID: <20260902140313.85983-5-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260902140313.85983-1-sj@kernel.org> References: <20260902140313.85983-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend drgn_dump_damon_status.py to dump damon_ctx->probes. It will be used to see if in-kernel DAMON status are changed as the user sets the probes via sysfs. Signed-off-by: SJ Park --- .../selftests/damon/drgn_dump_damon_status.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tools/testing/selftests/damon/drgn_dump_damon_status.py b/tool= s/testing/selftests/damon/drgn_dump_damon_status.py index 09552e91bc782..4622046fd0118 100755 --- a/tools/testing/selftests/damon/drgn_dump_damon_status.py +++ b/tools/testing/selftests/damon/drgn_dump_damon_status.py @@ -48,6 +48,37 @@ def attrs_to_dict(attrs): ['max_nr_regions', int], ]) =20 +def filter_to_dict(damon_filter): + filter_type_keyword =3D { + 0: 'anon', + 1: 'memcg', + } + dict_ =3D { + 'type': filter_type_keyword[int(damon_filter.type)], + 'matching': bool(damon_filter.matching), + 'allow': bool(damon_filter.allow), + } + type_ =3D dict_['type'] + if type_ =3D=3D 'memcg': + dict_['memcg_id'] =3D int(damon_filter.memcg_id) + return dict_ + +def filters_to_list(filters): + return [filter_to_dict(f) + for f in list_for_each_entry( + 'struct damon_filter', filters.address_of_(), 'list')] + +def probe_to_dict(probe): + return to_dict(probe, [ + ['weight', int], + ['filters', filters_to_list], + ]) + +def probes_to_list(probes): + return [probe_to_dict(p) + for p in list_for_each_entry( + 'struct damon_probe', probes.address_of_(), 'list')] + def addr_range_to_dict(addr_range): return to_dict(addr_range, [ ['start', int], @@ -199,6 +230,7 @@ def damon_ctx_to_dict(ctx): return to_dict(ctx, [ ['ops', ops_to_dict], ['attrs', attrs_to_dict], + ['probes', probes_to_list], ['adaptive_targets', targets_to_list], ['schemes', schemes_to_list], ['pause', bool], --=20 2.47.3 From nobody Sat Sep 26 10:01:22 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 00A214A0F0F; Wed, 2 Sep 2026 14:03:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357821; cv=none; b=khBFS7KaBIRQzxKSRumahhjtrxJZKiZhXhUFRyzyyU6GP7BALC+FFoViNtU/G3bMjphUSzJYeGyd2F9OtJQdS6KbpnyAMJ9Leatja7BpuT/xEWKl4xxSYA7qJqmNtewymojt2mgYKqiTW4SnWVHeu1Y1qRtSroh7yoV8OK+Dweo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357821; c=relaxed/simple; bh=EyGYe1pU3SXAfXTYD4+UZCYXK73KxuSHWUw08aCr/9A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EDsdgr7rdRlMYusY/A/1E0LkPSKIn8kR7u8kmHLV7BcseuzfCjEdcBH2NEEMthr+VF1Dv/iBL6k6s4Qq3Z1/jK5biygK2RLJbqU5szTV9zkw7+SxJw9z3LMh85jIhsO2OAfn8Qlq5NR1rYBmtg8UNhCEtD7niYlil58swUUA53k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=e7vlAqWY; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="e7vlAqWY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 89EFB1F00ACA; Wed, 2 Sep 2026 14:03:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788357819; bh=nGhv1+JUPjQ740yCFrpuYKel7DV1kBFhSIfzEnBWQIg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=e7vlAqWYeD503881Q18uBCW59tnF7IrujoycZ/1loFYqEAJTk79ZCTJqDm7motQk8 l9YtXYH/yv9cTfI9I2QBWj/MHnjMZqAffIOdz+4hOjw7fXL5s84Guz5eBAuWmN8o8Q m6qaGqpY5jEV2RXrtJLSU6qkJuyBXIF9ZEGP7FumNkmaO+bP1CFmtXzAx4/cR34VA8 YavY8bZnGq7crfAHb4toZD74S0JMnTdTR8mB0WyWGDiCLAE4KK7ql/q0LZqLvVEX3i 1Ch5upfuGoOFsqHScLk3Lwe4rKHp/PU98SPXQYwxx1LF3bPMJBm6dOMsH0uD9R2YaY z9pbkv6Ifyh3g== From: SJ Park To: Andrew Morton Cc: SJ Park , Shuah Khan , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 5/6] selftests/damon/sysfs.py: extend commit assertion function for probes Date: Wed, 2 Sep 2026 07:03:11 -0700 Message-ID: <20260902140313.85983-6-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260902140313.85983-1-sj@kernel.org> References: <20260902140313.85983-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend DAMON sysfs testing commit assertion helper function to check probes too. Signed-off-by: SJ Park --- tools/testing/selftests/damon/sysfs.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/testing/selftests/damon/sysfs.py b/tools/testing/selftes= ts/damon/sysfs.py index 88a26422ff44c..159cbeac067f8 100755 --- a/tools/testing/selftests/damon/sysfs.py +++ b/tools/testing/selftests/damon/sysfs.py @@ -178,6 +178,24 @@ def assert_monitoring_attrs_committed(attrs, dump): assert_true(dump['max_nr_regions'] =3D=3D attrs.max_nr_regions, 'max_nr_regions', dump) =20 +def assert_damon_filters_committed(filters, dump): + assert_true(len(dump) =3D=3D len(filters.filters), 'probe filters', du= mp) + for idx, damon_filter in enumerate(filters.filters): + filter_dump =3D dump[idx] + assert_true(filter_dump['type'] =3D=3D damon_filter.type_, 'type', + filter_dump) + assert_true(filter_dump['matching'] =3D=3D damon_filter.matching, + 'matching', filter_dump) + assert_true(filter_dump['allow'] =3D=3D damon_filter.allow, 'allow= ', + filter_dump) + +def assert_probes_committed(probes, dump): + assert_true(len(dump) =3D=3D len(probes.probes), 'probes length', dump) + for idx, probe in enumerate(probes.probes): + probe_dump =3D dump[idx] + assert_true(probe.weight =3D=3D probe_dump['weight'], 'weight', pr= obe_dump) + assert_damon_filters_committed(probe.filters, probe_dump['filters'= ]) + def assert_monitoring_target_committed(target, dump): # target.pid is the pid "number", while dump['pid'] is 'struct pid' # pointer, and hence cannot be compared. @@ -196,6 +214,7 @@ def assert_ctx_committed(ctx, dump): } assert_true(dump['ops']['id'] =3D=3D ops_val[ctx.ops], 'ops_id', dump) assert_monitoring_attrs_committed(ctx.monitoring_attrs, dump['attrs']) + assert_probes_committed(ctx.monitoring_attrs.probes, dump['probes']) assert_monitoring_targets_committed(ctx.targets, dump['adaptive_target= s']) assert_schemes_committed(ctx.schemes, dump['schemes']) assert_true(dump['pause'] =3D=3D ctx.pause, 'pause', dump) --=20 2.47.3 From nobody Sat Sep 26 10:01:22 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 564284A13AF; Wed, 2 Sep 2026 14:03:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357821; cv=none; b=btpKzmzcJEPnwlP6o6PQjZhWwILKLrwQmRHHbAD3MeWYrnZtdZJ34Rf5iE17DS1OdVQEj+sZaE82VTwLVJq/vFB88UZXFsoGAaq0bOm42mI9fL0qCCN/YPn/ch4oiAwnzow1wLsVut1QRbeekKakcJ8H8Bvy1o5bvLXkIoGNSiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788357821; c=relaxed/simple; bh=fxU+kl/M3exfDLzFkdNJVMJXwSy1c6L92KGmpdS7j5A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ts6vsmD4z7zINEfaNK9u7TvVak7smBlxiApop5xOfbatXVyBt98w1K2dBULA9QyBs0pQoghyHBYBkRu+dwT6iPmNElaY/mIn1hXVT2IWn31QVpaJ1x3x4oMvYXIz/um5ZGKU7xMHIzil7WrACBzGFKvWXJnJe4ecqBj8ZvLOYKA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RgwqaSXI; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RgwqaSXI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E5C021F00A3D; Wed, 2 Sep 2026 14:03:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788357820; bh=PRRcJRQPR3buBmMaDcVwulWeVM6qSbo735r2+CfQnW4=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=RgwqaSXIkQEz1vhxnOdulppt/3ZaMvLIuJSzXNSWE/ZfH967bovgdPQb/0nZnVAG4 cfTdVa1PDTrmh1cSX7ZjjiPQ0096HP07TeGLh8/ly6NFcy2N9q/AvlV3H4i7UvVfon /AWvQwkrn+fNg2fSDniyehiKIXpdKiPrpcQ0hQx1FbRcX1ArfliGyazuyQSJXOTbXF I2xcXb3UYH3FGJ7TzxEXEmR3za8dhbaNTrdZYs+E8K/J3OQ1x/nDd84LdqGtOMJM7I BZLtNaIb0ArjuSoJx4HbPtj9H3KG3iyHU4ZC/oWaVz03bmklD+zoMWSVjOGmDAUoFu +27Dy6+sQ87vw== From: SJ Park To: Andrew Morton Cc: SJ Park , Shuah Khan , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 6/6] selftests/damon/sysfs.py: test damon probes Date: Wed, 2 Sep 2026 07:03:12 -0700 Message-ID: <20260902140313.85983-7-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260902140313.85983-1-sj@kernel.org> References: <20260902140313.85983-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend sysfs.py to commit DAMON probes via sysfs, and see if it changed in-kernel DAMON status as expected using drgn. Signed-off-by: SJ Park --- tools/testing/selftests/damon/sysfs.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/damon/sysfs.py b/tools/testing/selftes= ts/damon/sysfs.py index 159cbeac067f8..66c826189320d 100755 --- a/tools/testing/selftests/damon/sysfs.py +++ b/tools/testing/selftests/damon/sysfs.py @@ -319,7 +319,21 @@ def main(): intervals_goal=3D_damon_sysfs.IntervalsGoal( access_bp=3D400, aggrs=3D3, min_sample_us=3D5000, max_sample_us=3D10000000), - update_us=3D2000000), + update_us=3D2000000, + probes=3D_damon_sysfs.DamonProbes( + probes=3D[_damon_sysfs.DamonProbe( + weight=3D42, + filters=3D_damon_sysfs.DamonFilters( + filters=3D[ + _damon_sysfs.DamonFilter( + type_=3D'anon', + matching=3DTrue, + allow=3DTrue, + ), + ]), + ), + ]), + ), schemes=3D[_damon_sysfs.Damos( action=3D'pageout', access_pattern=3D_damon_sysfs.DamosAccessPattern( --=20 2.47.3