From: Andrew Morton <akpm@linux-foundation.org>
To: mm-commits@vger.kernel.org,shuah@kernel.org,davidgow@davidgow.net,brendan.higgins@linux.dev,sj@kernel.org,akpm@linux-foundation.org
Subject: [merged mm-stable] selftests-damon-_damon_sysfs-implement-damonprobes.patch removed from -mm tree
Date: Tue, 06 Oct 2026 17:52:57 -0700 [thread overview]
Message-ID: <20261007005258.45F3D1F0089D@smtp.kernel.org> (raw)
The quilt patch titled
Subject: selftests/damon/_damon_sysfs: implement DamonProbes
has been removed from the -mm tree. Its filename was
selftests-damon-_damon_sysfs-implement-damonprobes.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: SJ Park <sj@kernel.org>
Subject: selftests/damon/_damon_sysfs: implement DamonProbes
Date: Wed, 2 Sep 2026 07:03:09 -0700
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.
Link: https://lore.kernel.org/20260902140313.85983-4-sj@kernel.org
Signed-off-by: SJ Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Brendan Higgins <brendan.higgins@linux.dev>
Cc: David Gow <davidgow@davidgow.net>
Cc: Shuah Khan <shuah@kernel.org>
---
tools/testing/selftests/damon/_damon_sysfs.py | 125 +++++++++++++++-
1 file changed, 124 insertions(+), 1 deletion(-)
--- a/tools/testing/selftests/damon/_damon_sysfs.py~selftests-damon-_damon_sysfs-implement-damonprobes
+++ a/tools/testing/selftests/damon/_damon_sysfs.py
@@ -570,6 +570,117 @@ class IntervalsGoal:
return err
return None
+class DamonFilter:
+ type_ = None
+ matching = None
+ allow = None
+ filters = None
+ path = None
+ idx = None
+
+ def __init__(self, type_='anon', matching=False, allow=False, path=None):
+ self.type_ = type_
+ self.matching = matching
+ self.allow = allow
+ self.path = path
+
+ def sysfs_dir(self):
+ return os.path.join(self.filters.sysfs_dir(), '%d' % self.idx)
+
+ def stage(self):
+ err = write_file(os.path.join(self.sysfs_dir(), 'type'), self.type_)
+ if err is not None:
+ return err
+ err = write_file(os.path.join(self.sysfs_dir(), 'matching'),
+ 'Y' if self.matching else 'N')
+ if err is not None:
+ return err
+ err = 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_ == 'memcg':
+ err = write_file(os.path.join(self.sysfs_dir(), 'path'), self.path)
+ if err is not None:
+ return err
+ return None
+
+class DamonFilters:
+ filters = None
+ probe = None
+
+ def __init__(self, filters=None):
+ if filters is None:
+ filters = []
+ self.filters = filters
+ for idx, filter in enumerate(self.filters):
+ filter.filters = self
+ filter.idx = idx
+
+ def sysfs_dir(self):
+ return os.path.join(self.probe.sysfs_dir(), 'filters')
+
+ def stage(self):
+ err = 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 = filter.stage()
+ if err is not None:
+ return err
+ return None
+
+class DamonProbe:
+ weight = None
+ filters = None
+ probes = None
+ idx = None
+
+ def __init__(self, weight=0, filters=None):
+ self.weight = weight
+ if filters is None:
+ filters = DamonFilters()
+ self.filters = filters
+ self.filters.probe = self
+
+ def sysfs_dir(self):
+ return os.path.join(self.probes.sysfs_dir(), '%d' % self.idx)
+
+ def stage(self):
+ err = write_file(
+ os.path.join(self.sysfs_dir(), 'weight'), '%d' % self.weight)
+ if err is not None:
+ return err
+ return self.filters.stage()
+
+class DamonProbes:
+ probes = None
+ attrs = None
+
+ def __init__(self, probes=None):
+ if probes is None:
+ probes = []
+ self.probes = probes
+ for idx, probe in enumerate(self.probes):
+ probe.probes = self
+ probe.idx = idx
+
+ def sysfs_dir(self):
+ return os.path.join(self.attrs.sysfs_dir(), 'probes')
+
+ def stage(self):
+ err = 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 = probe.stage()
+ if err is not None:
+ return err
+ return None
+
class DamonAttrs:
sample_us = None
aggr_us = None
@@ -577,11 +688,12 @@ class DamonAttrs:
update_us = None
min_nr_regions = None
max_nr_regions = None
+ probes = None
context = None
def __init__(self, sample_us=5000, aggr_us=100000,
intervals_goal=None, update_us=1000000, min_nr_regions=10,
- max_nr_regions=1000):
+ max_nr_regions=1000, probes=None):
self.sample_us = sample_us
self.aggr_us = aggr_us
if intervals_goal is None:
@@ -591,6 +703,10 @@ class DamonAttrs:
self.update_us = update_us
self.min_nr_regions = min_nr_regions
self.max_nr_regions = max_nr_regions
+ if probes is None:
+ probes = DamonProbes()
+ self.probes = probes
+ self.probes.attrs = self
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')
+ def sysfs_dir(self):
+ return os.path.join(self.context.sysfs_dir(), 'monitoring_attrs')
+
def stage(self):
err = 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
+ err = self.probes.stage()
+ if err is not None:
+ return err
+
class DamonCtx:
ops = None
monitoring_attrs = None
_
Patches currently in -mm which might be from sj@kernel.org are
mm-damon-core-use-damon_nr_samples_per_aggr-for-max-merge-threshold.patch
mm-damon-core-remove-debug-messages.patch
mm-damon-core-remove-debug-messages-fix.patch
mm-damon-vaddr-remove-a-debug-message.patch
mm-damon-core-validate-number-of-probes-in-valid_probe_params.patch
mm-damon-sysfs-remove-probes-number-validation.patch
mm-damon-tests-core-kunit-extend-set_regions-test-for-error-case.patch
mm-damon-tests-core-kunit-test-=0-size-damon_set_regions-inputs.patch
mm-damon-tests-core-kunit-test-overlapping-ranges-for-set_regions.patch
mm-damon-tests-core-kunit-test-damon_nr_samples_per_aggr.patch
selftests-damon-sysfssh-test-hugepage_mem_bp-quota-goal.patch
docs-mm-damon-maintainer-profile-update-ai-review-for-sashiko-replies.patch
docs-abi-damon-recommend-subsystem-doc-instead-of-admin-guide.patch
mm-damon-core-error-damos_commit_quota_goal-for-zero-target_value.patch
revert-mm-damon-lru_sort-error-out-for-10000-active_mem_bp.patch
revert-samples-damon-mtier-error-out-for-zero-quota-goal-target-values.patch
mm-damon-core-handle-null-ctx-parameter-in-damon_call.patch
mm-damon-core-set-ctx-call_controls_obsolete-in-damon_new_ctx.patch
mm-damon-reclaim-remove-unnecessary-damon_call-param-validation.patch
mm-damon-lru_sort-remove-unnecessary-damon_call-param-validation.patch
mm-damon-vaddr-support-prep_probes.patch
mm-damon-paddr-move-probe-filter-handling-to-ops-common.patch
mm-damon-vaddr-support-apply_probe.patch
mm-damon-vaddr-extend-apply_probes-for-hugetlb.patch
mm-damon-vaddr-support-pgidle_unset-probe-filter-type.patch
mm-damon-api-introduce-damon_filter_type_pgidle_set.patch
mm-damon-paddr-support-damon_filter_type_pgidle_set.patch
mm-damon-vaddr-support-damon_filter_type_pgidle_set.patch
mm-damon-sysfs-support-damon_filter_type_pgidle_set.patch
docs-mm-damon-design-update-for-pgidle_set-probe-filter.patch
mm-damon-api-introduce-damos_filter_type_probe_hits_wsum.patch
mm-damon-api-introduce-damos_filter_type_probe_hits_wsum-fix.patch
mm-damon-core-extend-probe_hits_wsum-for-moving-sum-based-calculation.patch
mm-damon-core-support-probe_hits_wsum-damos-core-filter.patch
mm-damon-sysfs-schemes-rename-sysfs_filter-sz_range-to-range_minmax.patch
mm-damon-sysfs-schemes-support-probe_hits_wsum-damos-core-filter.patch
docs-mm-damon-design-update-for-probe_hits_wsum-damos-core-filter.patch
docs-admin-guide-mm-damon-usage-update-for-probe_hits_wsum-damos-filter.patch
mm-damon-sysfs-schemes-read-sysfs_filter-addr_range-only-once.patch
mm-damon-sysfs-schemes-read-sysfs_filter-sz_range-only-once.patch
mm-damon-core-return-an-error-from-damos_commit_filter_arg.patch
mm-damon-core-disallow-max-min-damos-filter-range-arguments-commit.patch
mm-damon-sysfs-schemes-drop-centralized-filter-range-arg-validations.patch
mm-damon-sysfs-schemes-use-switch-case-in-add_scheme_filters.patch
mm-damon-core-kunit-extend-damos_commit_filter_for-for-wrong-input.patch
mm-damon-core-kunit-test-invalid-damos-filter-commits.patch
mm-damon-api-introduce-damon_filter_type_hugepage_size.patch
mm-damon-core-commit-hugepage_size-type-damon-filter.patch
mm-damon-ops-common-support-hugepage_size-damon-filter-matching.patch
mm-damon-sysfs-add-minmax-files-under-probe-filter-directory.patch
mm-damon-sysfs-support-hugepage_size-probe-filter.patch
docs-mm-damon-design-update-for-hugepage_size-probe-filter.patch
docs-admin-guide-mm-damon-usage-update-for-hugepage_size.patch
docs-abi-damon-update-for-hugepage_size-probe-filter.patch
mm-damon-api-remove-nr_damos_filter_types.patch
mm-damon-core-use-abs_diff-in-damon_feed_loop_next_input.patch
mm-damon-core-use-mult_frac-in-damon_feed_loop_next_input.patch
mm-damon-core-set-damon_ctx-walk_control_obsolete-in-damon_new_ctx.patch
mm-damon-core-document-damon_call-damon_start-race-hang-issue.patch
mm-damon-paddr-remove-pa-parameter-from-damon_pa_filter_pass.patch
mm-damon-tests-core-kunit-test-eligible_mem_bp-commitment.patch
mm-damon-tests-core-kunit-add-probe_hits_wsum-damos-filter-commit-test.patch
selftests-damon-sysfs_memcg_path_leak-fail-only-for-real-damon-leak.patch
docs-mm-damon-design-clarify-bp-is-basis-point.patch
mm-damon-core-introduce-damos_quota_goal-complement.patch
mm-damon-core-add-complement-argument-to-damos_new_quota_goal.patch
mm-damon-sysfs-schemes-support-quota-goal-complement-flag.patch
mm-damon-tests-core-kunit-test-quota_goal-complement-commit.patch
selftests-damon-sysfssh-test-quota-goal-complement-flag-file.patch
docs-mm-damon-design-document-damos-quota-goal-complement-flag.patch
docs-admin-guide-mm-damon-usage-update-for-quota-goal-complement-file.patch
docs-abi-damon-update-for-quota-goal-metric-complement-sysfs-file.patch
reply other threads:[~2026-10-07 0:52 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261007005258.45F3D1F0089D@smtp.kernel.org \
--to=akpm@linux-foundation.org \
--cc=brendan.higgins@linux.dev \
--cc=davidgow@davidgow.net \
--cc=mm-commits@vger.kernel.org \
--cc=shuah@kernel.org \
--cc=sj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.