From nobody Sat Sep 26 13:46:42 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 1945035B63D; Tue, 1 Sep 2026 04:34:25 +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=1788237267; cv=none; b=Vvn8J5vCoFksHdJTHFzvQpoRN1F1DWyyq+TWGkim2QS4tlLi7ILWJ0SZDcqrI0kFhh+yUyKbe4mqxA/hLedqmRiyFSUR+F9O6mDdor0ocZppR95vyv/xmBllij9lrTGnGW7D3tWz+QuJ1p2goRyXudr98T/izKKhIhOR6VqYP7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237267; c=relaxed/simple; bh=5eiAy3QIbJG0jFQflcMO3WVJL5e78NjuZ+mSKp0XpBg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cDoa5Adtlp3FFlVuUDtQ/md9pRx9A//Y4Qyowi9RbYxPvR2LevoJv27loCFPWBdg3dqCJsllBM7WsoVo96Js3rHwE1k6eVDthBH089J6rktXcSGX0jgG3cDaODRmIWYoxZM2LAA7QimwAbeiznRiRFXDw5IJCdWO73Nop8MdCPk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GjwMQpj3; 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="GjwMQpj3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 923571F00A3D; Tue, 1 Sep 2026 04:34:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237265; bh=U+5n2m69nUp/8eBxRsZKrpQRqRxmZwpAKuJfK8YQaNw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=GjwMQpj3Wrb/6erZFWASypzljTlgEQ+oER1CXJfcnVo3griBMbAIy4bpGwhfkiVtc mQg0Mc48Ji/5Y/+VaSBbR395CYi0YLrtjEZLRwPF2bUPIwoQz8qsHOXbIZNWEy6Nbn MdUzuH/aeom/r7+4r5mN5r7xRGRcqLboHE+OSJOdmSVFUEt9W3mjil1gqP7jU7XlmI hvE3ckZMTIIOj3n2UE+YxTPQZtnZ5KOwizXfBGPUQ26uWqjhtZzie78GPMcNqgj/Ra MvKYybYiR/SrnZDAKmt12QGmtHgPK0ZqWS8zM4+WkloDq/4fTojMoP9gwa4uXncHmc vfJZSWNm0NUZw== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 01/17] mm/damon/core: introduce DAMON_FILTER_TYPE_PGIDLE_UNSET Date: Mon, 31 Aug 2026 21:33:57 -0700 Message-ID: <20260901043417.2165-2-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Introduce a new DAMON filter type, pgidle_unset. It will match pages that have their PG_Idle flag unset, or the page table accessed bit set. In other words, it says if the page is accessed. Signed-off-by: SJ Park --- include/linux/damon.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index 7b1b6050a8286..7a42cbe791845 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -745,12 +745,14 @@ struct damon_intervals_goal { /** * enum damon_filter_type - Type of &struct damon_filter * - * @DAMON_FILTER_TYPE_ANON: Anonymous pages. - * @DAMON_FILTER_TYPE_MEMCG: Specific memcg's pages. + * @DAMON_FILTER_TYPE_ANON: Anonymous pages. + * @DAMON_FILTER_TYPE_MEMCG: Specific memcg's pages. + * @DAMON_FILTER_TYPE_PGIDLE_UNSET: Pgidle is unset. */ enum damon_filter_type { DAMON_FILTER_TYPE_ANON, DAMON_FILTER_TYPE_MEMCG, + DAMON_FILTER_TYPE_PGIDLE_UNSET, }; =20 /** --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 43C8130649C; Tue, 1 Sep 2026 04:34:26 +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=1788237267; cv=none; b=ZTSVqXDW8IpvaInb7fDU5dUaioVurz/zdkaqDRkeHdMA81yMZC+a3qNgjYqdW/94DMjxMUT7CBhMmoZCSdPo0ZGcoWq88mQKii8GiMkxERHn9K2a61PzuofEDmUe1LP1UW4v8Yp9WVpmf2VvcqHN8uNtLTwk8Z10BZKQTJg8Eqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237267; c=relaxed/simple; bh=ieT/ne0vOY5EYTrH52WVPjFrGyxfjporIuBqWV3GlGo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X3dfYcdSlNHv9+2aeaUo7eyw5kaeWNhOw604T+rXmz/wtKg9CpvudzvBjA5RymZNutJT8aeoB3m5n3i+jrd7jUI2Gg3KNytt+hNqFAZHLPG3/vhA2af/lgvrVi8xYBOl0Yi3KZjU2Mn+TQanz3nHFBLyaGziUtoHcg3DwhmQWlI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lYH3zQ5S; 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="lYH3zQ5S" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E065C1F00A3E; Tue, 1 Sep 2026 04:34:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237266; bh=atWhsqWAE5VXdJdWplOPI8OSXhIZpjioTpYT4VKG/08=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lYH3zQ5SYuwmCzVXw1REpmSNZgFjVOsByf6Q1uK0lugnPZhdQWMzCHvyY4kH+Z3RV oUTL0YnSlkcmSj1DGoGZf9ya/a2JfqIoPPNpD8728FfC1jeYBqLMx+rBC6IeufIehi o+8xoqtqOA4nxI6KoEJV/Sfg3TcOUNXSGHaNP43tBO4ZuFQT490Ux9Mkx3nKVGHYxa Ce8sCG0hmz/9kEgQw2dDvqoPTCFE8dVqYplQ0N/VaiCYFlHnV0Dbi3oGkZW7fz7hE0 i2KaXBCGMPg3r1qkYEjM6n6PjJCwG2T/OWYkMjAElBAb+dgRFH4otY681Frxkf2hVF qgwyMFxfkeaFQ== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 02/17] mm/damon/paddr: support PGIDLE_UNSET probe filter type Date: Mon, 31 Aug 2026 21:33:58 -0700 Message-ID: <20260901043417.2165-3-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Implement support of DAMON_FILTER_TYPE_PGIDLE_UNSET in the physical address space DAMON operations set. It reuses damon_folio_young(), which was being used for access monitoring. Signed-off-by: SJ Park --- mm/damon/paddr.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 9ddd1ec8202b7..6f756f8493894 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -132,6 +132,12 @@ static bool damon_pa_filter_match(struct damon_filter = *filter, matched =3D filter->memcg_id =3D=3D mem_cgroup_id(memcg); rcu_read_unlock(); break; + case DAMON_FILTER_TYPE_PGIDLE_UNSET: + if (!folio) + matched =3D false; + else + matched =3D damon_folio_young(folio); + break; default: break; } --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 906163603C2; Tue, 1 Sep 2026 04:34:26 +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=1788237267; cv=none; b=kbAFf7Ejdgv608uIYBACn04tzhRm64smkMuDTNVIRGSYHhVxOG4rWLk5aWz6BYWNgfLUkDw9xaR/3rE6z1WpwqV0BmPrFzuXeoIFxFm1VfZiSU4voCfNPQzlspEJjI1CKf6E0HC3MDpSGJ5dSdVL+SBuMwXaWih2DY5qDRigBKY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237267; c=relaxed/simple; bh=ur9aM9M3M3StIkcfs2dlkFt4MZLQoyzztUq2x+Y/rss=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FtXa07fU4GNPSF44R7fUN/JTlf+5NME2iu8wENQSs7uRnJCCYLE5VvHvu7BzEQT+PhMiM0B7mZ3xMwevn8iFpvT2YiT7pnw9gTo3McVX4uqBsw+7rIp7vTqs6w/oacqROe9XrxVgHVnFTWUAzco09m8FpshMsfaGe7Qd0YGlY9s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AooYVBmd; 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="AooYVBmd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 396091F00ACA; Tue, 1 Sep 2026 04:34:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237266; bh=fRLux0o/6DOEf/DKOzdhtuDNwLGjkWNCPtBCJqp5Lu8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=AooYVBmduwo3wuWJa2eFShjfV9QGIH4sLwqx9KJLkgi3eq1EIBDQ0FD3hVY5Vh+A2 J4K9GkBAMrQqckcC63FjlFACmwrHpy8+04DoJlFM59j7hCqrY15ZVBs4VXgN4bUpZ4 UrfdtQTItJe43mhZjbKIjmZBzWYs/9J+noss6QwNL+/hQwQ097sT/gliISw2ctb+n1 deoD41DeLdr55qhJ2Lkv0fM5RBtjCvkWyLNJnjOyQtWbdNK0x9sesgMnZ2E4JFopS0 G7WSKHcM0xdEtOkAsUI7nNE/OOdFFCSvYVBpbDewI2YYENz+35ZVvRdWUdRz4O3mWa BDNh/dnCD85aA== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 03/17] mm/damon/sysfs: support pgidle_unset probe filter type Date: Mon, 31 Aug 2026 21:33:59 -0700 Message-ID: <20260901043417.2165-4-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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 interface to allow users to set DAMON_FILTER_TYPE_PGIDLE_UNSET by writing 'pgidle_unset' to the probe filter type file. Signed-off-by: SJ Park --- mm/damon/sysfs.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index dcb739ce0a729..3593bf9c7b7aa 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -781,6 +781,10 @@ damon_sysfs_filter_type_names[] =3D { .type =3D DAMON_FILTER_TYPE_MEMCG, .name =3D "memcg", }, + { + .type =3D DAMON_FILTER_TYPE_PGIDLE_UNSET, + .name =3D "pgidle_unset", + }, }; =20 static ssize_t type_show(struct kobject *kobj, --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 564773A8724; Tue, 1 Sep 2026 04:34:27 +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=1788237268; cv=none; b=VectHUa9OIW+95zDUK+ooi9LbE90D3VBsYkjDVCUfUvdR5fX5okIATCJipZHe2zkLR4s+9X2/eQWa/b2IboBYeJk/FnEjKnHU3otWHBA1k4LpKbJPh+VQwRF+PKy2Wt5yO4ciHQEfcQ2pgub7AE4if6HVotf5a8NvjYzjMSSBiM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237268; c=relaxed/simple; bh=9zsAoynOHHRc7GbHj8uhKfcJe1SrIdX7FjQmo/V/mBI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W6D4pFL8lqu/1QUXRo3m8xJ7/P2jfUceWIbINsdP8EHaN2+AQBq2Lul1M28wHCggmbKaIALz93OwwrC4iGTfrYy/nSdd9UR2Ih05t4C7rFTFEUfQLOCtzocv+UNbtWUXhhpN1CUv6gJdc82gA4a62dcnCdryMT9lNNr2DEQXk90= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SDvIeati; 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="SDvIeati" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 86AFF1F00A3F; Tue, 1 Sep 2026 04:34:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237267; bh=vf/K9c9fWpOSUYmz+e9QIT0AziWQ1IhtxaGnZ535xtg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=SDvIeatinPoWIpeGqt3q14CdDYcaOLS749sJnD0rX7wO4cectL9C4yehlVJMUHUBN lKmNhV++GF4JSibAEbZp4fRHmvYC2KHHZ7kEPAODC+LQrKW7JW2Zkj45otANbRlgpG icLgGmFhiMioBTVWiPWTzqxqi1I5bq71yTd/ZK3qdPKL0wiPusp047xGbk+Uo+EmOE xBjJc9x1ZXal81uYnnJQxhND/oQbScxZz1osVNyJrqocxzimYVvi9cHRO8oaNqOJmd pZlxJPGO1h8AzVrUgpTEaQPv9ofRDiQy2QJUU+MFsV+6CJkk2IJIjCDQlcksHZT3s4 ytk+n5n4ix2ZA== From: SJ Park To: Andrew Morton Cc: SJ Park , "Liam R. Howlett" , David Hildenbrand , Jonathan Corbet , Lorenzo Stoakes , Michal Hocko , Mike Rapoport , Randy Dunlap , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , damon@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 04/17] Docs/mm/damon/design: document pgidle_unset probe filter type Date: Mon, 31 Aug 2026 21:34:00 -0700 Message-ID: <20260901043417.2165-5-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Update DAMON design document for the newly added pgidle_unset probe filter type. Also use a list for the types, as it becomes not very easy to read the whole types in a simple sentence. Signed-off-by: SJ Park --- Documentation/mm/damon/design.rst | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Documentation/mm/damon/design.rst b/Documentation/mm/damon/des= ign.rst index 63cbb7b536da2..947d91ae24a39 100644 --- a/Documentation/mm/damon/design.rst +++ b/Documentation/mm/damon/design.rst @@ -293,8 +293,12 @@ registration is made by specifying a probe per attribu= te. Each of the probe specifies a rule to determine if a given memory region has the related attribute. The rule is constructed with multiple filters. The filters wo= rk same to :ref:`DAMOS filters ` except the suppo= rted -filter types. Currently only ``anon`` and ``memcg`` filter types are supp= orted -for data attributes monitoring. +filter types. Currently below filter types are supported. + +- ``anon``: Same to that for DAMOS filters. +- ``memcg``: Same to that for DAMOS filters. +- ``pgidle_unset``: Matches if the page for the memory is marked as not + access-idle. =20 If such probes are registered, DAMON executes the probes for each region's sampling memory when it does the access :ref:`sampling --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 8F6CC3AE6F3; Tue, 1 Sep 2026 04:34:27 +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=1788237268; cv=none; b=HbPPggb0FJf3fJ57kW9/CALysLwiecQMWv4q2V450IM10qbQV8JKEY8RT2y1wLF+gFun0bSjVT7sQRwFe3ArFapMtyuIBqp+ozUpbmDNPkfG0evOBWqvdSP5HXK5B6K42CTjt07ul5t1+bblMpMgrWDnYaauazJEu1PSJFotEcc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237268; c=relaxed/simple; bh=//uK5VLSyeG2PpmSTHj372R5hdfNw2eAp/n+fs5INA0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KFnGjN+BB3BjrIRmkHzZX5KZHIxNaqu4ZvlbzMrEQtMX2VexKDMJDLUzzy8KbNVa2O8D+rTsv0pBzpYp/bkbMlJ1P35fub0hW/4Wp1GxPtU1VJFL6ZUcAzxRyqXOZMVcMLun5YVedIaNdUVGi2knksGdfdCUBIMlFnfQxGQHAhM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kpcWyOAN; 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="kpcWyOAN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3F48A1F000E9; Tue, 1 Sep 2026 04:34:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237267; bh=xDsh4DffQRbrA3+l3qVbLOikgSrH6WeYk4b6TXVz7Rk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=kpcWyOANd2C9UyiEEq20jHtCu1I241GxdMY3ac9mT0fSF/WXG3sDspeQ2tsk9C4Sn cfRZGdcbL3dUKtJwS38OC+2KqCVKJSYQmxXp7DMljtgzmlsIccM9FOae7j2dy8yzNb lP9tDCzo7orLFclV+Lk2omL0EMrNb+zcf8FAfNo6rBbvWy8ijcgbczTNXeG2G9CCeH 6fn+UcCGDIuN1WznmG39Tx4bI8SFcT+jCt4H9QDkVbQGD+n9Zn9UFfeP0Svf3bmDnH anlRo3WrMLxkzTYEKQphIwXy4O2jTiPL1MUibensFsklYrFCDhXhO5xORm4SwDBnpa Owluaz4yAioag== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 05/17] mm/damon/core: introduce damon_prep struct Date: Mon, 31 Aug 2026 21:34:01 -0700 Message-ID: <20260901043417.2165-6-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Some DAMON probe filter types require preparatory actions. For example, pgilde_unset probe filter can say if the page was accessed but when. To answer the second question, the PG_Idle flag should be set at a specific time. It can make life much easier if DAMON can do such preparatory actions. Introduce a new data type called damon_prep. It specifies each of the preparation actions for each probe. DAMON will execute the action for each region per sampling interval, like it clears page table accessed bits and unsets PG_Idle flag for access monitoring. Also introduce DAMON_PREP_SET_PGIDLE as the initial prep action. As the name says, it will do exactly what DAMON was doing as the preparation action for the access monitoring. Signed-off-by: SJ Park --- include/linux/damon.h | 32 ++++++++++++++++++++++++++++++++ mm/damon/core.c | 26 ++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 7a42cbe791845..1780c14942e63 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -742,6 +742,27 @@ struct damon_intervals_goal { unsigned long max_sample_us; }; =20 +/** + * enum damon_prep_action - DAMON probing preparation action. + * + * @DAMON_PREP_SET_PGIDLE: Set the probing memory as idle page. + */ +enum damon_prep_action { + DAMON_PREP_SET_PGIDLE, +}; + +/** + * struct damon_prep - DAMON probing preparation request. + * + * @action: Action to do to the probing memory for the preparation. + */ +struct damon_prep { + enum damon_prep_action action; +/* private: */ + /* siblings list. */ + struct list_head list; +}; + /** * enum damon_filter_type - Type of &struct damon_filter * @@ -783,6 +804,8 @@ struct damon_filter { struct damon_probe { unsigned int weight; /* private: */ + /* Preparation actions to apply to each probing memory. */ + struct list_head preps; /* Filters for assessing if a given region is for this probe. */ struct list_head filters; /* Siblings list. */ @@ -962,6 +985,12 @@ static inline unsigned long damon_sz_region(struct dam= on_region *r) return r->ar.end - r->ar.start; } =20 +#define damon_for_each_prep(p, probe) \ + list_for_each_entry(p, &(probe)->preps, list) + +#define damon_for_each_prep_safe(p, next, probe) \ + list_for_each_entry_safe(p, next, &(probe)->preps, list) + #define damon_for_each_filter(f, p) \ list_for_each_entry(f, &(p)->filters, list) =20 @@ -1015,6 +1044,9 @@ static inline unsigned long damon_sz_region(struct da= mon_region *r) =20 #ifdef CONFIG_DAMON =20 +struct damon_prep *damon_new_prep(enum damon_prep_action action); +void damon_add_prep(struct damon_probe *p, struct damon_prep *prep); + struct damon_filter *damon_new_filter(enum damon_filter_type type, bool matching, bool allow); void damon_add_filter(struct damon_probe *probe, struct damon_filter *f); diff --git a/mm/damon/core.c b/mm/damon/core.c index 53c3f97e3f126..85774dbca64b8 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -112,6 +112,28 @@ int damon_select_ops(struct damon_ctx *ctx, enum damon= _ops_id id) return err; } =20 +struct damon_prep *damon_new_prep(enum damon_prep_action action) +{ + struct damon_prep *prep; + + prep =3D kmalloc_obj(*prep); + if (!prep) + return NULL; + prep->action =3D action; + INIT_LIST_HEAD(&prep->list); + return prep; +} + +void damon_add_prep(struct damon_probe *p, struct damon_prep *prep) +{ + list_add_tail(&prep->list, &p->preps); +} + +static void damon_free_prep(struct damon_prep *p) +{ + kfree(p); +} + struct damon_filter *damon_new_filter(enum damon_filter_type type, bool matching, bool allow) { @@ -168,6 +190,7 @@ struct damon_probe *damon_new_probe(void) if (!p) return NULL; p->weight =3D 0; + INIT_LIST_HEAD(&p->preps); INIT_LIST_HEAD(&p->filters); INIT_LIST_HEAD(&p->list); return p; @@ -185,8 +208,11 @@ static void damon_del_probe(struct damon_probe *p) =20 static void damon_free_probe(struct damon_probe *p) { + struct damon_prep *prep, *prep_next; struct damon_filter *f, *next; =20 + damon_for_each_prep_safe(prep, prep_next, p) + damon_free_prep(prep); damon_for_each_filter_safe(f, next, p) damon_free_filter(f); kfree(p); --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 E4FE03B14C3; Tue, 1 Sep 2026 04:34:27 +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=1788237269; cv=none; b=XYdw8KLJxe4r5I0xe169mfbF+noZeEviWWpclLTehLgnDYDZMX/7PAxWl+7R1hrH812uNoI3rQYNFGQrT5Y7LKTNUPisN0km9p6qHU5FHF8FZDHrLfluN02xG6wwA4EXdhxgo3yE8NriatPoL0xQZTvrZmlkH2L8HGFPvm2600o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237269; c=relaxed/simple; bh=bYnhZzmEUV5gZA6RShFmEAIvutDPD7sX7y/nXrffjVw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QI7manvnwM7nuSiHIXFgj6H0gNH7xou/ZT91NMhSkbSjh08GFRWX53BPcFcNYndhpWwaWAmjfq+r2RUmkhCb/3Rngc5T8HptlveRFLCz8WpthQIEDZejUhGkPi487w/piMMIjw9iho2LDDu68nHBy622r5QDQR9zROJkmmnUnfg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=krIhuBi4; 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="krIhuBi4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8F2011F00A3E; Tue, 1 Sep 2026 04:34:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237267; bh=IMsa03+GswfqkWjEdLMDvVsbH1S2RLUAm5b70sXm7PU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=krIhuBi4auk0TVj3onlZzLl4XbW0+zYwwjIRfN3q71lQT70yIZldYdwC81VvuBQZt Ik0SnnFw6bGvURZ9NKZr3utvEl927pkVvzdXT0qV+Z/sLpgIptr0Mu8t1fT1hCAL+v PWvwRoMR+St/RwamqEeIDZStd2zaNRV71l967E5eSTuo/SPxqt2lkp1uaDqSOhUCTR 7UnUyNxJdYTCo3BCb08ICYuagAQA86FMaZlHMIecHSzkDcPSO57Sol7yZ9mcZPV655 Cxr0HZqLsXhfbgxHUzmcVC8YiLbrO+QSPgZDFpmLi9qGCOw2YleCBpyWmbF8HAmngI LgfSZpQ9cWNag== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 06/17] mm/damon/core: commit preps Date: Mon, 31 Aug 2026 21:34:02 -0700 Message-ID: <20260901043417.2165-7-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" damon_commit_probes() is ignoring damon_prep. Commit the prep actions, too. Signed-off-by: SJ Park --- mm/damon/core.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/mm/damon/core.c b/mm/damon/core.c index 85774dbca64b8..87ac428358ec0 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -129,11 +129,34 @@ void damon_add_prep(struct damon_probe *p, struct dam= on_prep *prep) list_add_tail(&prep->list, &p->preps); } =20 +static void damon_del_prep(struct damon_prep *p) +{ + list_del(&p->list); +} + static void damon_free_prep(struct damon_prep *p) { kfree(p); } =20 +static void damon_destroy_prep(struct damon_prep *p) +{ + damon_del_prep(p); + damon_free_prep(p); +} + +static struct damon_prep *damon_nth_prep(int n, struct damon_probe *p) +{ + struct damon_prep *prep; + int i =3D 0; + + damon_for_each_prep(prep, p) { + if (i++ =3D=3D n) + return prep; + } + return NULL; +} + struct damon_filter *damon_new_filter(enum damon_filter_type type, bool matching, bool allow) { @@ -1706,6 +1729,36 @@ static int damon_commit_targets( return err; } =20 +static void damon_commit_prep(struct damon_prep *dst, struct damon_prep *s= rc) +{ + dst->action =3D src->action; +} + +static int damon_commit_preps(struct damon_probe *dst, struct damon_probe = *src) +{ + struct damon_prep *dst_prep, *next, *src_prep, *new_prep; + int i =3D 0, j =3D 0; + + damon_for_each_prep_safe(dst_prep, next, dst) { + src_prep =3D damon_nth_prep(i++, src); + if (src_prep) + damon_commit_prep(dst_prep, src_prep); + else + damon_destroy_prep(dst_prep); + } + + damon_for_each_prep_safe(src_prep, next, src) { + if (j++ < i) + continue; + + new_prep =3D damon_new_prep(src_prep->action); + if (!new_prep) + return -ENOMEM; + damon_add_prep(dst, new_prep); + } + return 0; +} + static void damon_commit_filter(struct damon_filter *dst, struct damon_filter *src) { @@ -1764,6 +1817,9 @@ static int damon_commit_probes(struct damon_ctx *dst,= struct damon_ctx *src) src_probe =3D damon_nth_probe(i++, src); if (src_probe) { dst_probe->weight =3D src_probe->weight; + err =3D damon_commit_preps(dst_probe, src_probe); + if (err) + return err; err =3D damon_commit_filters(dst_probe, src_probe); if (err) return err; @@ -1781,6 +1837,9 @@ static int damon_commit_probes(struct damon_ctx *dst,= struct damon_ctx *src) return -ENOMEM; damon_add_probe(dst, new_probe); new_probe->weight =3D src_probe->weight; + err =3D damon_commit_preps(new_probe, src_probe); + if (err) + return err; err =3D damon_commit_filters(new_probe, src_probe); if (err) return err; --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 4AC663B4EB6; Tue, 1 Sep 2026 04:34:28 +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=1788237269; cv=none; b=pwk4GPD15s7WVeFOMwXDdoS6UJSLU2Tj3XtyEyWX1gEH9FiGgTfN4d4G220vudz1oYax/7D4qtZ1bRFcdwEtzeUzSF0XuEKjimKO+7ij5RGpl1jCwm43H0Fs6bGm4poA1CPdhMlZa3QOyny7gHVLbl9+W2t6+OD1BIx22NNY2cM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237269; c=relaxed/simple; bh=SZeQ5JCi8iR4wDXzcllj59HrIjfGWjZKEdSDpPM3xSs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IPuG/ZA0w+hw89sPVUt6uy8lu69u5HMd/kzBocHEeDOQE3Up7JH/SAN8kfI+oRMy78yApu10D0/M+GxDrj+0g1T7vb9nSenQmIqby8XxTzR22IxjJrKpsYphQaYlzedRmYPmiWUBDYCZPynK+lFadUnst4DIeKcaPGlLcMU/m3s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b1B7fSKm; 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="b1B7fSKm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DCEEE1F00A3D; Tue, 1 Sep 2026 04:34:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237268; bh=SiFpyzeeZ8dXbIxeNUm9NHfmBqlBoJ0Y+FG8UIsF09c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=b1B7fSKmTaevM3gSN3pxa/A4LvqYOlnjwJ3SjeADvPcu/2AoBiSvSzwPkeO2u+fRo cAw5M9nKCSc3Pefqdbvhbh8TLwJfUf00f8x6X/aLjJLLtpNGQaOG9OZa9AVr7OjBxy StpjF7+1UWE5niicDG1ZxDWFF2pVwjZgX13EujZROsmqMqy3vaqfvB5uFzB+2lyv/S U+u/6luoPJGFK3cdBg4uMQ8hysWhcv67bq1bf5H/PFVSyxIlSYiFFmkEbzYCllUr6F Ec0VID+YzaYS1vtnxY15Fv0N4O49lhkYrWDTY8lb5wQecxRgYS5xevtRFI0Q/hwHxI 17aCoeAfO0dEQ== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 07/17] mm/damon/core: introduce damon_operations->prep_probes() Date: Mon, 31 Aug 2026 21:34:03 -0700 Message-ID: <20260901043417.2165-8-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" damon_prep needs to be executed by the underlying DAMON operation set. Extend the operation set callback list for the execution of damon_prep actions. If the underlying operation set implements the callback, DAMON core executes it in the monitoring preparation time. Signed-off-by: SJ Park --- include/linux/damon.h | 5 +++++ mm/damon/core.c | 20 +++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index 1780c14942e63..871d26adf6ae5 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -630,6 +630,7 @@ enum damon_ops_id { * @update: Update operations-related data structures. * @prepare_access_checks: Prepare next access check of target regions. * @check_accesses: Check the accesses to target regions. + * @prep_probes: Prepare applying probes for each region. * @apply_probes: Apply probes for each region. * @get_scheme_score: Get the score of a region for a scheme. * @apply_scheme: Apply a DAMON-based operation scheme. @@ -657,6 +658,9 @@ enum damon_ops_id { * last preparation and update the number of observed accesses of each reg= ion. * It should also return max number of observed accesses that made as a re= sult * of its update. The value will be used for regions adjustment threshold. + * @prep_probes should execute required &struct damon_prep for next &struct + * damon_probe applications to each region. It should also set + * &damon_region->sampling_addr of each region if ``set_samples`` is true. * @apply_probes should apply the data attribute probes to each region and * accordingly update the probe hits counter of the region. It should also * set &damon_region->sampling_addr of each region if ``set_samples`` is t= rue. @@ -679,6 +683,7 @@ struct damon_operations { void (*update)(struct damon_ctx *context); void (*prepare_access_checks)(struct damon_ctx *context); unsigned int (*check_accesses)(struct damon_ctx *context); + void (*prep_probes)(struct damon_ctx *context, bool set_samples); unsigned int (*apply_probes)(struct damon_ctx *context, bool set_samples, bool return_max_wsum); int (*get_scheme_score)(struct damon_ctx *context, diff --git a/mm/damon/core.c b/mm/damon/core.c index 87ac428358ec0..df22621765911 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -157,6 +157,18 @@ static struct damon_prep *damon_nth_prep(int n, struct= damon_probe *p) return NULL; } =20 +static bool damon_has_prep(struct damon_ctx *c) +{ + struct damon_prep *prep; + struct damon_probe *probe; + + damon_for_each_probe(probe, c) { + damon_for_each_prep(prep, probe) + return true; + } + return false; +} + struct damon_filter *damon_new_filter(enum damon_filter_type type, bool matching, bool allow) { @@ -3906,14 +3918,19 @@ static int kdamond_fn(void *data) unsigned long next_ops_update_sis =3D ctx->next_ops_update_sis; unsigned long sample_interval =3D ctx->attrs.sample_interval; bool access_check_disabled =3D damon_has_probe_weights(ctx); + bool do_prep; unsigned int max_merge_score =3D 0, max_wsum; bool get_max_wsum; =20 if (kdamond_wait_activation(ctx)) break; =20 + do_prep =3D ctx->ops.prep_probes && damon_has_prep(ctx); + if (!access_check_disabled && ctx->ops.prepare_access_checks) ctx->ops.prepare_access_checks(ctx); + if (do_prep) + ctx->ops.prep_probes(ctx, access_check_disabled); =20 kdamond_usleep(sample_interval); ctx->passed_sample_intervals++; @@ -3928,7 +3945,8 @@ static int kdamond_fn(void *data) else get_max_wsum =3D false; max_wsum =3D ctx->ops.apply_probes(ctx, - access_check_disabled, get_max_wsum); + access_check_disabled && !do_prep, + get_max_wsum); if (get_max_wsum) max_merge_score =3D max_wsum; } --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 821EC3B71AB; Tue, 1 Sep 2026 04:34:28 +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=1788237269; cv=none; b=S1p/av+tLs9ZkDLJ9Cq1j0QYa+6Ng1rKUTaNXDHCQeKXKHgDmG2jU/hW6FI+FeqeV1uIuNHouGIdQ52mHQQ2itDtSdFQZrV1RSD22inMr4NCptrenbcQ7RzUYJ902vawpOHueMHKSPl7qkxc+B5DUBdcZmGB8CbR6zvmcxiHSTI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237269; c=relaxed/simple; bh=psLetOg121R0QNdJs+CF5/aps8rlnAQgTRRu06h/FW0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cnnLtQQ8LfCFPSLXJzi2I9zlzfDiz26AXAg2xda7HwkL4iqRRyuxsgdGT7P8zYa1aZn3faX9SToKMMa+l+GubIizYVDHqSL4x5hTa3JFURgsQ5OntxYn7nmoLRMFDCizeys4AmbcNevxHnv92+Gspaom6HJYiCFYHQJ/tpV4hkQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mdDh3UTq; 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="mdDh3UTq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 382991F00ACA; Tue, 1 Sep 2026 04:34:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237268; bh=OpyWxBrGaST77vm6YyG0Qbwcf9E6DAqPTZr9W1qgAUU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=mdDh3UTqfrDhR7uBGv/FI05EnOJmHfyawvr+M1N0YN28ZIXhcm6e4UmmUvwN6/sIS RK79G41zR+Gqh0QpHT9MGwojDAmVH6kMk3iOnupR9pMbwVG+HgkOEEQLOtRrZDhO6r aVes3UwJfL8tWIEdfx5Cs02LfPJqS5XjJj34WvuIUOJfFIUfP1U/q7MGpO1NJu+8CB 2ozfeuYy2ZIZj/CGgtz9erURMlYZGsZQWF7B6yXb5avGCnrvjtBW55UjP7N8Z6hPdO vurrv/20EULnHR1IHl5KqzYnWGgcwe1DHyi9t+cXx98zAi3wU4ENrsBS35FebqHjr5 +Q/IOKB2YsiRA== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 08/17] mm/damon/paddr: support damon_prep Date: Mon, 31 Aug 2026 21:34:04 -0700 Message-ID: <20260901043417.2165-9-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Implement damon_operations->prep_probes() callback. Support the only existing prep action, DAMON_PREP_SET_PGIDLE in a way similar to what it was doing for the access check preparation: unset page table accessed bits and set PG_Idle flag. Reuse the function for the access check preparation. Signed-off-by: SJ Park --- mm/damon/paddr.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index 6f756f8493894..c1e7d7a4f40df 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -105,6 +105,40 @@ static unsigned int damon_pa_check_accesses(struct dam= on_ctx *ctx) return max_nr_accesses; } =20 +static void damon_pa_prep_probes_region(struct damon_region *r, + struct damon_probe *probe, struct damon_ctx *ctx) +{ + struct damon_prep *p; + + damon_for_each_prep(p, probe) { + switch (p->action) { + case DAMON_PREP_SET_PGIDLE: + damon_pa_mkold(damon_pa_phys_addr(r->sampling_addr, + ctx->addr_unit)); + break; + default: + break; + } + } +} + +static void damon_pa_prep_probes(struct damon_ctx *ctx, bool set_samples) +{ + struct damon_target *t; + struct damon_region *r; + struct damon_probe *p; + + damon_for_each_target(t, ctx) { + damon_for_each_region(r, t) { + if (set_samples) + r->sampling_addr =3D damon_rand(ctx, r->ar.start, + r->ar.end); + damon_for_each_probe(p, ctx) + damon_pa_prep_probes_region(r, p, ctx); + } + } +} + static bool damon_pa_filter_match(struct damon_filter *filter, struct folio *folio) { @@ -448,6 +482,7 @@ static int __init damon_pa_initcall(void) .update =3D NULL, .prepare_access_checks =3D damon_pa_prepare_access_checks, .check_accesses =3D damon_pa_check_accesses, + .prep_probes =3D damon_pa_prep_probes, .apply_probes =3D damon_pa_apply_probes, .target_valid =3D NULL, .apply_scheme =3D damon_pa_apply_scheme, --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 C42703BB674; Tue, 1 Sep 2026 04:34:28 +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=1788237270; cv=none; b=tCKnp4tH6lEmbK8gvdkB15dqCbJkm8ylX1So4XbxC3Nb8O2U3/OVjyTHC7vnH29rBrC3EcYlBhwcwP7ePxBl9NPz8MTYWBJ/0DpYQl4jP8OT+Lt4jjBEGwpmJGujBLksVQL9xvn4g4wWx2ubFa4qV6ttEX1xNpWr9P79ErCrSM8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237270; c=relaxed/simple; bh=ebZWA2+dSTUkV10/r9grEzALXwTLDvss2s7MOIuEXPI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HQ6c70P60XFusGCkbZ+rRQ2PWf/u5dxCV6sA3Xad9RYugJ6fd9SWJU93oFbPro7C6aKw7GoTv5PbxcWlVXU9iLVWxrq7J0GYQJ2fllmdery3THglCtKU2dKWvpotuEWpuz+X512gVAvlzwPRcEXQYCyvy0kBQW8G2HQBGwmaEsQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RINtRsVd; 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="RINtRsVd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 86AAD1F00ADB; Tue, 1 Sep 2026 04:34:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237268; bh=x4M/9i3il9+uoX/0hvXXuMXtTWxZNwDv4ttKnUbtHPw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=RINtRsVd9/foAQbOaBX56tC049v1kog7NgWy4abZ57p/Cz6znuQU9abXl/832moQa zzi2wkXW8FdmHqtfEIg9QwbEvdRYvT1hikUJ+3klq4/koLO8CymNPi8Fb11scqQIUI ffWBwrEFpGYnlWj59twjW3zAXjtCI2sG0HY8cha/S0wZS3yaiQ5v7d+27PfJOnsp1y LAjK8kPYubg2vVOsgPTgeQx/rM5IZuSsNOc0mAN4oyuN1/k4ymAk945Ic3ZXf45PP8 PYjDmE3CuRHnExPOT0nGSLr9XVIP/OQtizTOoEY6dmrMZhvB72tSRh3kPu/VFgemRJ rP8m9TB3mL63Q== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 09/17] mm/damon/sysfs: implement preps directory Date: Mon, 31 Aug 2026 21:34:05 -0700 Message-ID: <20260901043417.2165-10-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Implement a sysfs directory named 'preps' under the probe directory. It will be evolved to be used for specifying probe preps. Signed-off-by: SJ Park --- mm/damon/sysfs.c | 65 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 6 deletions(-) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 3593bf9c7b7aa..09641257d3a89 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -749,6 +749,35 @@ static const struct kobj_type damon_sysfs_intervals_kt= ype =3D { .default_groups =3D damon_sysfs_intervals_groups, }; =20 +/* + * preps directory + */ + +struct damon_sysfs_preps { + struct kobject kobj; +}; + +static struct damon_sysfs_preps *damon_sysfs_preps_alloc(void) +{ + return kzalloc_obj(struct damon_sysfs_preps); +} + +static void damon_sysfs_preps_release(struct kobject *kobj) +{ + kfree(container_of(kobj, struct damon_sysfs_preps, kobj)); +} + +static struct attribute *damon_sysfs_preps_attrs[] =3D { + NULL, +}; +ATTRIBUTE_GROUPS(damon_sysfs_preps); + +static const struct kobj_type damon_sysfs_preps_ktype =3D { + .release =3D damon_sysfs_preps_release, + .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D damon_sysfs_preps_groups, +}; + /* * filter directory */ @@ -1069,6 +1098,7 @@ static const struct kobj_type damon_sysfs_filters_kty= pe =3D { struct damon_sysfs_probe { struct kobject kobj; unsigned int weight; + struct damon_sysfs_preps *preps; struct damon_sysfs_filters *filters; }; =20 @@ -1079,25 +1109,48 @@ static struct damon_sysfs_probe *damon_sysfs_probe_= alloc(void) =20 static int damon_sysfs_probe_add_dirs(struct damon_sysfs_probe *probe) { + struct damon_sysfs_preps *preps; struct damon_sysfs_filters *filters; int err; =20 - filters =3D damon_sysfs_filters_alloc(); - if (!filters) + preps =3D damon_sysfs_preps_alloc(); + if (!preps) return -ENOMEM; + probe->preps =3D preps; + + err =3D kobject_init_and_add(&preps->kobj, &damon_sysfs_preps_ktype, + &probe->kobj, "preps"); + if (err) + goto put_preps_out; + + filters =3D damon_sysfs_filters_alloc(); + if (!filters) { + err =3D -ENOMEM; + goto del_preps_out; + } probe->filters =3D filters; =20 err =3D kobject_init_and_add(&filters->kobj, &damon_sysfs_filters_ktype, &probe->kobj, "filters"); - if (err) { - kobject_put(&filters->kobj); - probe->filters =3D NULL; - } + if (err) + goto put_filters_out; + return err; + +put_filters_out: + kobject_put(&filters->kobj); + probe->filters =3D NULL; +del_preps_out: + kobject_del(&preps->kobj); +put_preps_out: + kobject_put(&preps->kobj); + probe->preps =3D NULL; return err; } =20 static void damon_sysfs_probe_rm_dirs(struct damon_sysfs_probe *probe) { + if (probe->preps) + kobject_put(&probe->preps->kobj); if (probe->filters) { damon_sysfs_filters_rm_dirs(probe->filters); kobject_put(&probe->filters->kobj); --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 2224A3BE633; Tue, 1 Sep 2026 04:34:29 +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=1788237270; cv=none; b=g7pwKexjRkid+0EqCGpSvPH31IDcpCnpVPWWSa6ndYX0bv6FqsgIcxsdCyXoM6d0HdLuytyM+O9fnWZqG9HGlHBV5UCOVxlIMG4sFrQJ3grvg0Lx0o9ARbvY+ZSJZIkNDfWd3zkLsRIw+nLCr4/N86AxDJXEC0zSsf8ani1znao= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237270; c=relaxed/simple; bh=TjaLRLGl85k1NfsJfJlZ8AUSjsqL+FlUFngH+W3xeuM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ol97JM64wgik5at3m21aZambpYvQnYaTdTwWExH8oXnSyK390Xo5NzKsYgIaRY/LNNFOS+DIHbQxIu8s5dZJVOQ7wxGBC1vtfgY6iveJcykT5cUfTJmwjRa/cJHqBDBz9TadnHWegqyW7hDpUvN54gqRUF8pPUTmQPHPgtQIB30= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dipnz7Cb; 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="dipnz7Cb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D5A671F00ACF; Tue, 1 Sep 2026 04:34:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237269; bh=SGq3BJdNnnCTCYeGqjvgppOd2nVk87x7Bo82sRuFOlA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=dipnz7CbbjBVWIVGEHxCrzsLQn8sqLmZEK0SdDMem24OMUYjYS8f8TucC9wihNIS8 qhIxzQHv3T7ObDkmkiaU/hUvprTG+EbI4Afxi63kTWF01X92Lbl8ghmg0snvR3HP3F sW+fuCQMzceEY8YiJIqVLN5NN0/zTcf/NU1Blle6bNwCDd9irJlCZ7A/+Y66iD9GqR J8wt+JIXczDL11TV8N53AePTLuG8RzoUSStMWcGEc17bsoRFWZ6vXI74X3k7t/Lnmm dXVdtSPAjDfiJqCbHjU2E1TPXw3RJFGDQ5Io9mXn3CcLgkTNJHFz1QRsBVeTZwP4oh WVABe1XxVfv7g== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 10/17] mm/damon/sysfs: implement preps/nr_preps file Date: Mon, 31 Aug 2026 21:34:06 -0700 Message-ID: <20260901043417.2165-11-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Implement nr_preps file under the preps directory. It will be evolved to be used for generating sub directories that will represent each probe preparation action. Signed-off-by: SJ Park --- mm/damon/sysfs.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 09641257d3a89..1d2d9950716e1 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -755,6 +755,7 @@ static const struct kobj_type damon_sysfs_intervals_kty= pe =3D { =20 struct damon_sysfs_preps { struct kobject kobj; + int nr; }; =20 static struct damon_sysfs_preps *damon_sysfs_preps_alloc(void) @@ -762,12 +763,60 @@ static struct damon_sysfs_preps *damon_sysfs_preps_al= loc(void) return kzalloc_obj(struct damon_sysfs_preps); } =20 +static void damon_sysfs_preps_rm_dirs(struct damon_sysfs_preps *preps) +{ + preps->nr =3D 0; +} + +static int damon_sysfs_preps_add_dirs(struct damon_sysfs_preps *preps, + int nr_preps) +{ + preps->nr =3D nr_preps; + return 0; +} + +static ssize_t nr_preps_show(struct kobject *kobj, struct kobj_attribute *= attr, + char *buf) +{ + struct damon_sysfs_preps *preps =3D container_of(kobj, + struct damon_sysfs_preps, kobj); + + return sysfs_emit(buf, "%d\n", preps->nr); +} + +static ssize_t nr_preps_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_preps *preps; + int nr, err =3D kstrtoint(buf, 0, &nr); + + if (err) + return err; + if (nr < 0) + return -EINVAL; + + preps =3D container_of(kobj, struct damon_sysfs_preps, kobj); + + if (!mutex_trylock(&damon_sysfs_lock)) + return -EBUSY; + err =3D damon_sysfs_preps_add_dirs(preps, nr); + mutex_unlock(&damon_sysfs_lock); + if (err) + return err; + + return count; +} + static void damon_sysfs_preps_release(struct kobject *kobj) { kfree(container_of(kobj, struct damon_sysfs_preps, kobj)); } =20 +static struct kobj_attribute damon_sysfs_preps_nr_attr =3D + __ATTR_RW_MODE(nr_preps, 0600); + static struct attribute *damon_sysfs_preps_attrs[] =3D { + &damon_sysfs_preps_nr_attr.attr, NULL, }; ATTRIBUTE_GROUPS(damon_sysfs_preps); @@ -1149,8 +1198,10 @@ static int damon_sysfs_probe_add_dirs(struct damon_s= ysfs_probe *probe) =20 static void damon_sysfs_probe_rm_dirs(struct damon_sysfs_probe *probe) { - if (probe->preps) + if (probe->preps) { + damon_sysfs_preps_rm_dirs(probe->preps); kobject_put(&probe->preps->kobj); + } if (probe->filters) { damon_sysfs_filters_rm_dirs(probe->filters); kobject_put(&probe->filters->kobj); --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 7093C3C0601; Tue, 1 Sep 2026 04:34:29 +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=1788237271; cv=none; b=F5f1UtAwUkJujTg1lqBy0oSFK+Psajw8EbP04Sjmmh4POH0KB6eDSTPw8pq8xei/VZ/F/XX11g6PEzuTZqdNewRWvobpgvKZNFz9DY+0w4ZcnYjTFkHPnftYI1FsNv3EZsnHKji++K1lSNWZyc0J4WzlS+T8J4Qw/jHSBRlezSw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237271; c=relaxed/simple; bh=B3c7zIubCm3aKuosHEoO1WGm54SPfk+JCmQCIKuGbYU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IL5JXW5XUbwanZn0Q6t9/2JM9RlR9duz+GXEisG18EbGsjqu3y4mknOL4t6BffKDuovO8Y2HZg1otAoV5tTCqKFmlVLdJsUlggEEGk+pV4TTg3ILFQSLwyuL8qJZxQV65rijKodYNif0QAYYZjbCHRiMaXHG6NzEocd5tOyN+So= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AhPCvOky; 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="AhPCvOky" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 320C61F00A3F; Tue, 1 Sep 2026 04:34:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237269; bh=qO65UFbEI2bWLHkGPNlwAeuwDLu8u+FPN4dY2StdWwY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=AhPCvOkyGIre7Q+onP76+JRNY756AT4FgWxoIf8w1w0G7umlbdmNPZGlbP10XmFoj q9PQFP7kp/fcpHygxKkHIvDVuNABh2ijdxK0VqU6/RZ7eE+WZTXZlkfB1AuDhH8DTu gsXT2fXJ0j8PASfzixxOz9gh4AE+rR+IM9P0gdNCO6yIhqF1Unm4gE/8u/SPuCW//Q fTYnzXynPDZ2Xgv4i5lpv3flsC4HTpp2rikMGju5W03pYzdmhQR2jtrdLivMJkh7iz T7Yb/2om6psz4w1eirMTrozvAkCQbvNGS9bI2AegK2SA+Mh77C4hnXfii5oOJyQh4m YPZU+paNf1N2g== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 11/17] mm/damon/sysfs: create directories for nr_preps writes Date: Mon, 31 Aug 2026 21:34:07 -0700 Message-ID: <20260901043417.2165-12-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Implement nr_preps write action to actually create subdirectories of the number. Each of the directory will be evolved to represent each probe preparation action. Signed-off-by: SJ Park --- mm/damon/sysfs.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 1d2d9950716e1..3749abb781566 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -749,12 +749,50 @@ static const struct kobj_type damon_sysfs_intervals_k= type =3D { .default_groups =3D damon_sysfs_intervals_groups, }; =20 +/* + * prep directory + */ + +struct damon_sysfs_prep { + struct kobject kobj; +}; + +static struct damon_sysfs_prep *damon_sysfs_prep_alloc(void) +{ + struct damon_sysfs_prep *prep; + + prep =3D kzalloc_obj(struct damon_sysfs_prep); + if (!prep) + return prep; + return prep; +} + +static void damon_sysfs_prep_release(struct kobject *kobj) +{ + struct damon_sysfs_prep *prep =3D container_of(kobj, + struct damon_sysfs_prep, kobj); + + kfree(prep); +} + +static struct attribute *damon_sysfs_prep_attrs[] =3D { + NULL, +}; +ATTRIBUTE_GROUPS(damon_sysfs_prep); + +static const struct kobj_type damon_sysfs_prep_ktype =3D { + .release =3D damon_sysfs_prep_release, + .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D damon_sysfs_prep_groups, +}; + /* * preps directory */ =20 struct damon_sysfs_preps { struct kobject kobj; + struct damon_sysfs_prep **preps_arr; int nr; }; =20 @@ -765,13 +803,53 @@ static struct damon_sysfs_preps *damon_sysfs_preps_al= loc(void) =20 static void damon_sysfs_preps_rm_dirs(struct damon_sysfs_preps *preps) { + struct damon_sysfs_prep **preps_arr =3D preps->preps_arr; + int i; + + for (i =3D 0; i < preps->nr; i++) { + kobject_del(&preps_arr[i]->kobj); + kobject_put(&preps_arr[i]->kobj); + } preps->nr =3D 0; + kfree(preps_arr); + preps->preps_arr =3D NULL; } =20 static int damon_sysfs_preps_add_dirs(struct damon_sysfs_preps *preps, int nr_preps) { - preps->nr =3D nr_preps; + struct damon_sysfs_prep **preps_arr, *prep; + int err, i; + + damon_sysfs_preps_rm_dirs(preps); + if (!nr_preps) + return 0; + + preps_arr =3D kmalloc_objs(*preps_arr, nr_preps, + GFP_KERNEL | __GFP_NOWARN); + if (!preps_arr) + return -ENOMEM; + preps->preps_arr =3D preps_arr; + + for (i =3D 0; i < nr_preps; i++) { + prep =3D damon_sysfs_prep_alloc(); + if (!prep) { + damon_sysfs_preps_rm_dirs(preps); + return -ENOMEM; + } + + err =3D kobject_init_and_add(&prep->kobj, + &damon_sysfs_prep_ktype, &preps->kobj, "%d", + i); + if (err) { + kobject_put(&prep->kobj); + damon_sysfs_preps_rm_dirs(preps); + return err; + } + + preps_arr[i] =3D prep; + preps->nr++; + } return 0; } =20 --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 EBD863D9DAC; Tue, 1 Sep 2026 04:34:29 +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=1788237271; cv=none; b=lWDEbQT+cFK+MBguT4cjhOu7R4jF7kZiGRxN7oVm6fbO3ppGXuI59tIo6kVNv8d9beQN8EijD7WegVBOrlZ8KDvz0a2FGnHYG/2hyNUd/GG8PQYqSCCRvIkblVMcKPsjtEJ3jRNv4+xod4t3OnvLCWyq5ORvT5JHUqCUsE7Mm2g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237271; c=relaxed/simple; bh=FA78w4w9pzU+JImx6UmQnQBs3uKYgYRJIYmgiiq2ePA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AJrdI91MSbCnv1R7h16Lhjw9Gzh3NJi7zEsfcIMPEa6fjM7ppgeigQwIV9NLY82YMOzXbxrhT4QiHyARB8EhwfHuUGy1GpMzgjpLajFNxogl3H8bcs49fiGs6Xdtqm0/ZFxurFkM13CnmPosmYfpE02JQuULHBFxDFolaYkEesI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oM3BnEaq; 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="oM3BnEaq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8159B1F00A3E; Tue, 1 Sep 2026 04:34:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237269; bh=Rl5ADA+9J/l2w2quHKWsOoHjOvreI5jvhgmI+c48UlQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=oM3BnEaqrscKBNF8aZ7Qv4bUFnq1511x+PkpIIIS2REY45nbPMpOv8JEeUgh4zEhC p55twps4xZ2Avb3RNPYl4LpuDOS2MDB54HPkJfmsjNlI3BvGUfs2KkrGa9TEXZUZuZ qSNHp5Pn/0mqEy4Itdm4PnEffr4tg0pa+EyrR/isB/V9XN4YEzyUY4MjgnFPs9j6IN U6dSqTzCDzJH/omWZUKusLgU+laMJp9DTYqQ8N8mkiUiDDwGr2SURXd4ypyUJhdqHb VVVNqZCYxVf8l89sUPc7pXCRDOtNWaB87mxS898ThR5m8oEafUv2I9NERjimMWOcyT RrgqxZIGUbX3A== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 12/17] mm/damon/sysfs: implement prep_action file Date: Mon, 31 Aug 2026 21:34:08 -0700 Message-ID: <20260901043417.2165-13-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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 a file named prep_action under the prep directory. It represents the corresponding probe preparation action. Signed-off-by: SJ Park --- mm/damon/sysfs.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 3749abb781566..1ecf194f71ddb 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -755,6 +755,7 @@ static const struct kobj_type damon_sysfs_intervals_kty= pe =3D { =20 struct damon_sysfs_prep { struct kobject kobj; + enum damon_prep_action action; }; =20 static struct damon_sysfs_prep *damon_sysfs_prep_alloc(void) @@ -764,9 +765,61 @@ static struct damon_sysfs_prep *damon_sysfs_prep_alloc= (void) prep =3D kzalloc_obj(struct damon_sysfs_prep); if (!prep) return prep; + prep->action =3D DAMON_PREP_SET_PGIDLE; return prep; } =20 +struct damon_sysfs_prep_action_name { + const enum damon_prep_action action; + const char *name; +}; + +static const struct damon_sysfs_prep_action_name +damon_sysfs_prep_action_names[] =3D { + { + .action =3D DAMON_PREP_SET_PGIDLE, + .name =3D "set_pgidle", + }, +}; + +static ssize_t prep_action_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_prep *prep =3D container_of(kobj, + struct damon_sysfs_prep, kobj); + int i; + + for (i =3D 0; i < ARRAY_SIZE(damon_sysfs_prep_action_names); i++) { + const struct damon_sysfs_prep_action_name *action_name; + + action_name =3D &damon_sysfs_prep_action_names[i]; + if (action_name->action =3D=3D prep->action) + return sysfs_emit(buf, "%s\n", action_name->name); + } + return -EINVAL; +} + +static ssize_t prep_action_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_prep *prep =3D container_of(kobj, + struct damon_sysfs_prep, kobj); + ssize_t ret =3D -EINVAL; + int i; + + for (i =3D 0; i < ARRAY_SIZE(damon_sysfs_prep_action_names); i++) { + const struct damon_sysfs_prep_action_name *action_name; + + action_name =3D &damon_sysfs_prep_action_names[i]; + if (sysfs_streq(buf, action_name->name)) { + prep->action =3D action_name->action; + ret =3D count; + break; + } + } + return ret; +} + static void damon_sysfs_prep_release(struct kobject *kobj) { struct damon_sysfs_prep *prep =3D container_of(kobj, @@ -775,7 +828,11 @@ static void damon_sysfs_prep_release(struct kobject *k= obj) kfree(prep); } =20 +static struct kobj_attribute damon_sysfs_prep_prep_action_attr =3D + __ATTR_RW_MODE(prep_action, 0600); + static struct attribute *damon_sysfs_prep_attrs[] =3D { + &damon_sysfs_prep_prep_action_attr.attr, NULL, }; ATTRIBUTE_GROUPS(damon_sysfs_prep); --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 198EB3E0C69; Tue, 1 Sep 2026 04:34:30 +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=1788237271; cv=none; b=IVuG08guReCKje5AvUhII4FHS0qGJjTUi+w4m2+Iu+xd3xU1iww5EXqbYAG9F3uD3UdgfHTv3mS++veQghWgt1ID/9coOHDcmsFWYcP8+Mm5r2Fvg7xqxjsqR5SqNVJLUy8lkmas9jFm6MNO9ZQC7ARRqmGVMEmwMQg4W5ujOuo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237271; c=relaxed/simple; bh=r/5mZ0YGA9cKQevwC87ZcBy0+VoOqbLfxq2DPskl60M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=laH/kuif7rvuoPd3r709ZB180smQ28YeeElzLuceVJUmpbnpYG+SXIFM97Ukne04Q0qDSdGUzhwC0uAK8+uaVvcg42BuxOQdzEaqSe3EnE2O5qTXOj/DJtEwqqAHAndbLbg4tGGq9VCYA/Mqq1DEjhCeX/kSujdzAfXwzC7rxS8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cTzo9hnS; 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="cTzo9hnS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CD6351F00A3D; Tue, 1 Sep 2026 04:34:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237270; bh=gvjVwrKDCl81hZl3Hucl+fQ31jeH/l1NQNbBR2m3K00=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cTzo9hnSZ3LgHhEjR/PRg6krOJ0vnAKee+e91eXZjd1+zgBolao1R45AAXvM+Bpin N2a+8cVZ7DwGdJTdWrWbQqpzYQI06ql/o3ciZ7B/A41HolKNlGLhjAWzEyQGlyDr7C EefPQGp8Od9xiLkLdPuLPex3wFS6oB0kZ1ylUWIJAWlePD1vX2mp76YxM1vjuOwNTD wtspAgxa+ExZiOnsd9Fsa0sfX8/6xR/Hoj5ALpVenKEfIi15oWKxgX9dcgQ9s6THYR LgkxI4AVJK0U1KW9fvrM9MX2XTn78bEptvlJ1kqdWsHJCqS6kzXfEpfN0sZt4BcSty MUw/2DeW4gnog== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 13/17] mm/damon/sysfs: pass preps to DAMON core Date: Mon, 31 Aug 2026 21:34:09 -0700 Message-ID: <20260901043417.2165-14-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" DAMON sysfs interface provides the files for setting DAMON probe preps. But the underlying code is not really passing the user-set values to DAMON core. Pass those. Signed-off-by: SJ Park --- mm/damon/sysfs.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 1ecf194f71ddb..494387a9906c0 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -2176,6 +2176,23 @@ static int damon_sysfs_set_attrs(struct damon_ctx *c= tx, return damon_set_attrs(ctx, &attrs); } =20 +static int damon_sysfs_set_preps(struct damon_probe *probe, + struct damon_sysfs_preps *sys_preps) +{ + int i; + + for (i =3D 0; i < sys_preps->nr; i++) { + struct damon_sysfs_prep *sys_prep =3D sys_preps->preps_arr[i]; + struct damon_prep *prep; + + prep =3D damon_new_prep(sys_prep->action); + if (!prep) + return -ENOMEM; + damon_add_prep(probe, prep); + } + return 0; +} + static int damon_sysfs_set_filters(struct damon_probe *probe, struct damon_sysfs_filters *sys_filters) { @@ -2211,7 +2228,15 @@ static int damon_sysfs_set_probe(struct damon_probe = *probe, struct damon_sysfs_probe *sys_probe) { struct damon_sysfs_filters *sys_filters; + struct damon_sysfs_preps *sys_preps; + int err; =20 + sys_preps =3D sys_probe->preps; + if (sys_preps) { + err =3D damon_sysfs_set_preps(probe, sys_preps); + if (err) + return err; + } sys_filters =3D sys_probe->filters; if (!sys_filters) return 0; --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 7B06E30649C; Tue, 1 Sep 2026 04:34:30 +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=1788237272; cv=none; b=UzcW/HYuN+U0DLkG6rmaoAmtNOlADrCa/99dSx7OvPtHU0kQ3z1GgDS1bXl7XROL6cqkasMHj3HCV0LicS4aWG2WeVyt5IBV1hSpKhxoI0pRmlomERd0ACkU4jL/8L+BuLVDo2xR49JA+6zrW7/72NGE3HjE5fnISe9QVoWNFbc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237272; c=relaxed/simple; bh=I7iSQWo3DIeCl4GG9ImX2V39xbLJgFz5OBrIHCf8Mf0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KL7Zh5u9SuevELtTEgxzQqiPmLpkaQxkAk2sbBqXd3Cw+tWQ724rpCsJO8phK/RPmcDq6T4DRKVx/6g3ihcVpe37125svKqNWyPsXWmR8CClMAClRJf276vpTjeQwGcJRBj0TUREKj5aEqjK1b633Ua3/xMbKmKEMy/4dgVkaUg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fLCE2Ixd; 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="fLCE2Ixd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2AA701F000E9; Tue, 1 Sep 2026 04:34:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237270; bh=m+OX/QoubOtPs5CYX5dE9pYfjfAmb4FTinvx7UvjP30=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=fLCE2Ixdi6gF8dbq+fA6A0ezfDrlAohge5ca00te/Onhm3sslbns7GdQg0TbY55av 6g/Sg/aQ9rZgJhwTlOG0kCbibygq8/VuaycDskgeVhb3bKr3bhbJi5pD9OPD3h8v2J 8WzC5IroH2uWwiwNcVQUj9aV2c37FrLJqh2Gii25Gc4oyggSFj5sxOFm7BcMXPjN6N P+apq0UF/ojAbu9lpaleI7SCVUBkvda5hSQcM+59xHCh9u0pbDTn8OfVheyk4es96W dYGH4fSUE2kS5ZA2gQQLt6R6DA6Zq8jTNjIEYk9gAK/hHBa3n1MBoHYenavl53jUtm zhphVB9A9l8Zw== 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 14/17] selftests/damon/sysfs.sh: test probe prep sysfs files Date: Mon, 31 Aug 2026 21:34:10 -0700 Message-ID: <20260901043417.2165-15-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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 basic file operations test for newly introduced DAMON probe prep sysfs directories and files. Signed-off-by: SJ Park --- tools/testing/selftests/damon/sysfs.sh | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tools/testing/selftests/damon/sysfs.sh b/tools/testing/selftes= ts/damon/sysfs.sh index f7fb94b84e716..ddebde6edabe4 100755 --- a/tools/testing/selftests/damon/sysfs.sh +++ b/tools/testing/selftests/damon/sysfs.sh @@ -361,6 +361,32 @@ test_intervals() test_intervals_goal "$intervals_dir/intervals_goal" } =20 +test_damon_prep() +{ + damon_prep_dir=3D$1 + ensure_file "$damon_prep_dir/prep_action" "exist" "600" + ensure_write_succ "$damon_prep_dir/prep_action" "set_pgidle" \ + "valid input" + ensure_write_fail "$damon_prep_dir/prep_action" "foo" "invalid input" +} + +test_damon_preps() +{ + preps_dir=3D$1 + ensure_dir "$preps_dir" "exist" + ensure_file "$preps_dir/nr_preps" "exist" "600" + ensure_write_succ "$preps_dir/nr_preps" "1" "valid input" + test_damon_prep "$preps_dir/0" + + ensure_write_succ "$preps_dir/nr_preps" "2" "valid input" + test_damon_prep "$preps_dir/0" + test_damon_prep "$preps_dir/1" + + ensure_write_succ "$preps_dir/nr_preps" "0" "valid input" + ensure_dir "$preps_dir/0" "not_exist" + ensure_dir "$preps_dir/1" "not_exist" +} + test_damon_filter() { damon_filter_dir=3D$1 @@ -392,6 +418,7 @@ test_probe() { probe_dir=3D$1 ensure_dir "$probe_dir" "exist" + test_damon_preps "$probe_dir/preps" test_damon_filters "$probe_dir/filters" } =20 --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 28E1A39F187; Tue, 1 Sep 2026 04:34:31 +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=1788237272; cv=none; b=NO4eA/B4wg8xGoZAifIq6quqLbf/bvf9hMcu03te0QjtzLTb0pg4oMGjc2NOIN0P59RhcRVNNTLfnw9bavNqtPfpWO7d+UBYXpbWHqDgFEs40E9Coxpkr5OOb9UKILYtvGXC7jC6oKYbBFMb9t1agSiuHMus6tCqFuq+aguAWU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237272; c=relaxed/simple; bh=AsHoCbwMwQPn54Uh42zQM6XfaiQXavuQ492jVm131qQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VHl11nsPFAWumELyxPQOfNLZ9jdfTQfbiWRJNt+L2A7Dig3NPbC3hZiguBlhYILOFRxtMdxS9b56V0UKrtTZEv41dbG8y8REuAQFbr1BYFu6kfsgc3Xk94hNKMq34ot4284EcSUaVcamZVFxpCrKKbaJLwHnC0pZ2rvqcOVUiG8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=d4qUsh8V; 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="d4qUsh8V" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 88F3E1F00ACA; Tue, 1 Sep 2026 04:34:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237271; bh=CpXkgOmW3GSwhrOkMdO/S1mj76NXWWV8m3WM4J70bcE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=d4qUsh8VH6LG0mrJ6UNN3Jmg4osXJJohaxTB0Tj3iJ77xaBCrcot88uzDIWSNkDZi UEeh4znBav5abJT/ZG696xoT7Al9mWLGavrWxSRxE0tFzqDQ3fTGk/u3JZ+Q95ztEP SLBmtPKBwaHdUmeq4fJOW8jQbnfWXbElgjXM/Xwqu8w0/uOpUb/Eay/Bcit2poEAeF F2nC4/Id69cJkDxkrqC4I/zbYbB7lsBC0NvXzca7jfHBC62I5ex3SbseQ979G/hJgs VftSP7PQYTafZz2PyBGVmlL458eRpXYo/vHjdBO1JPqKOUxp5CNsCVK/N/pn77+o53 h1NoDO/LgNPEA== From: SJ Park To: Andrew Morton Cc: SJ Park , "Liam R. Howlett" , David Hildenbrand , Jonathan Corbet , Lorenzo Stoakes , Michal Hocko , Mike Rapoport , Randy Dunlap , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , damon@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 15/17] Docs/mm/damon/design: document probe preps Date: Mon, 31 Aug 2026 21:34:11 -0700 Message-ID: <20260901043417.2165-16-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Update DAMON design document for the newly added DAMON probe preps feature. Signed-off-by: SJ Park --- Documentation/mm/damon/design.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/mm/damon/design.rst b/Documentation/mm/damon/des= ign.rst index 947d91ae24a39..d036340dae8af 100644 --- a/Documentation/mm/damon/design.rst +++ b/Documentation/mm/damon/design.rst @@ -309,6 +309,13 @@ Users can therefore know how much of a given DAMON reg= ion has a specific data attribute by reading the per-region per-probe probe hits counter after each aggregation interval. =20 +Users can optionally register probing preparation actions per probe. If s= uch +actions are registered, DAMON applies the actions to each region's sampling +memory before starting the next sampling interval. Currently only one act= ion, +``set_pgidle`` is supported. The action marks the page for the probing ta= rget +memory as access-idle. This can be useful to be used together with +``pgidle_unset`` probe filter. + This is a sampling based mechanism. Hence, it is lightweight but the outp= ut may include some measurement errors. The output should be used with good understanding of statistics. --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 D881E433BB0; Tue, 1 Sep 2026 04:34:31 +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=1788237273; cv=none; b=UquCh8uJDCCAIAE9qJiehHYm2CyNocoibGpq5T8VSpXCwdfTJA0zaaPyQcKVDp0UwokzriXlcbg/wdczeHXGKEDHDJH5yJOIZNbpOKbejAJ5fm7xiXll4udmcJXWIE+0qL7Nxr1R+6YlUPCHgO9ubZb6AIeAkrH0Xy10zW6Y5oI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237273; c=relaxed/simple; bh=g/tFPfelQzKUfzsRZPs73xHoniRK3oTmoDYddCctcSI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oPtWWTxObuS+5O2aCpiD6SiMB2sGphv3qTgTPFvdExjFvi/k8Q7LKDrRePAQX+4ecHlLzHRcMf6+OOJ/mGLgSAvlhxngtyZStV4sqTYY+TogTcW91BxN+sEmftDY0X0WylxaeY/eZIBAfjfu1cYH6SGdtedwAwSbSjdusKAolKs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=E54dGmV+; 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="E54dGmV+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 370791F00A3F; Tue, 1 Sep 2026 04:34:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237271; bh=PjqVhtQyye+bbFZP93YpIQ5LAq+rT1MA3lQj7bnBnXw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=E54dGmV+ijmLuWB8ca5ofN+kA/w6tVCBO5KUhCKNGelJFI4PmgsMMVB5Dpvcgk/HK uSsQT233Oud8vsXqD1t+tqGWAWy6Hjv5XvpDrEm9ePM8vNgIxCCvRkqkk7xreuWYlO DFKplMDLD4B0WhLknxqMVvShwQGh2wTNfBHa0d/E3/BEBHzOsxfsR2CzWo73FRxi+w ZNTKvaK21djuUvfW8Le/iaBTSBbExTyzVOLIqx0BpPNob44racSlYZywU4RpCDr1US Yeo1Id7ps2LAeg7V1g5K6Tsz8Ww6465Iy4/MmgQ2MsqrmwFO+sDT6D/V2YFuB1TqF6 2aQy3OT6tb10w== From: SJ Park To: Andrew Morton Cc: SJ Park , "Liam R. Howlett" , David Hildenbrand , Jonathan Corbet , Lorenzo Stoakes , Michal Hocko , Mike Rapoport , Randy Dunlap , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , damon@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 16/17] Docs/admin-guide/mm/damon/usage: document probe preps sysfs files Date: Mon, 31 Aug 2026 21:34:12 -0700 Message-ID: <20260901043417.2165-17-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Update DAMON usage document for the newly added DAMON probe preps sysfs files. Signed-off-by: SJ Park --- Documentation/admin-guide/mm/damon/usage.rst | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Documentation/admin-guide/mm/damon/usage.rst b/Documentation/a= dmin-guide/mm/damon/usage.rst index da5f9afd08aef..023c6334024f8 100644 --- a/Documentation/admin-guide/mm/damon/usage.rst +++ b/Documentation/admin-guide/mm/damon/usage.rst @@ -74,6 +74,9 @@ comma (","). =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 nr_regions= /min,max =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 :ref:`prob= es `/nr_probes =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = 0/weight + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 preps/nr_preps + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 0/prep_action + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 ... =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 filters/nr_filters =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 0/type,matching,allow,path =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 ... @@ -283,9 +286,18 @@ In the beginning, this directory has only one file, ``= nr_probes``. Writing a number (``N``) to the file creates the number of child directories named `= `0`` to ``N-1``. Each directory represents each monitoring probe. =20 -In each probe directory, one directory, ``filters`` exists. The directory -contains files for installing filters for the probe, that is used to deter= mine -the data attribute for the probe. +In each probe directory, two directories, ``preps`` and ``filters`` exist.= The +directories contain files for installing probing preparation actions and +filters for the probe, that are used to determine the data attribute for t= he +probe. + +In the beginning, ``preps`` directory has only one file, ``nr_preps``. +Writing a number (``N``) to the file creates the number of child directori= es +named ``0`` to ``N-1``. Each directory represents each preparation action. +Each directory has one file, ``prep_action``. The preparation action can = be +selected by writing the name of the action to the ``prep_action`` file. R= efer +to the :ref:`design doc ` for the list= of +supported actions. =20 Each probe directory also contains ``weight`` file. Reading from and writ= ing to the file gets and sets the :ref:`attributes-only monitoring --=20 2.47.3 From nobody Sat Sep 26 13:46:42 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 6A8D643C7D3; Tue, 1 Sep 2026 04:34:32 +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=1788237273; cv=none; b=AFZN2uEM5hpqRf2sJVbBFTjM++07HbxM6EI1S8DiJSi15MCaAIylK2v5lqDmNGsOU6I3qfs/kzUt4PAOEUdEPjdm4NmjHQOhp+Mc3cU/sXM7v8VmmexVsIVw2oHMV4Nia8WNikwxqaU58vJp4gxU5OFktSaJn3vVJcrlu5cDk+s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788237273; c=relaxed/simple; bh=Pffw0QddcOdszpO6Pf+uRui7oVwqUV9y0L1CM1LEgZM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PDoDL4FCqjVUED0Q7fuuFXaqEY4d9do+Bgp68rYVBZHLR5JYG7zJNtw4Irarnk4E6vgc7jdjS5b24eZyDyKRpUy1ExjrifB+DF+PJe2exgdm4ctnce3Wal8SphgkvJAy6KdBkmGA2GDMqJwrxLLYf1y4cm5nFhtDVGR1/MyEsAU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KYef/bpG; 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="KYef/bpG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E78F81F00A3D; Tue, 1 Sep 2026 04:34:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788237272; bh=Zxj0qXZlLFjv8Oo1ubEI7gb1ZBWWHlkx56zIdj50cXg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=KYef/bpGHdth5P4hpCVs8AlrupN3bO+g/Ct0O+xni8mx5I4W4aahUiVZOSvaeGt5P hFQr4fppHSKmAviFXy3GEKD9F2/WlLSse2r99DeEt3jwhJRPXwqjk71puz7Zm6A1p8 1csdIYo6QqE5ct8u+ONiCVPaio6JQERUgSb1EGHaIOaBApezvGSDrF1CAp41wmxpzL kiku/sCeJaebyCTbU5DDEjxJllIO0lHjfTQwmHe170oOIzdm6RKYlvdyIxrdvC+26+ WiZGwNs1kKYsBOBytH2hvAupF53+GeWUzC3SJm/vGmoS4GGcZqOMTbxLvfo8MAuBbm 0ZFv0izsEPekA== From: SJ Park To: Andrew Morton Cc: SJ Park , "Liam R. Howlett" , David Hildenbrand , Lorenzo Stoakes , Michal Hocko , Mike Rapoport , Suren Baghdasaryan , Vlastimil Babka , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 17/17] Docs/ABI/damon: document probe prep sysfs files Date: Mon, 31 Aug 2026 21:34:13 -0700 Message-ID: <20260901043417.2165-18-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901043417.2165-1-sj@kernel.org> References: <20260901043417.2165-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" Update DAMON ABI document for the newly added DAMON probe prep sysfs files. Signed-off-by: SJ Park --- Documentation/ABI/testing/sysfs-kernel-mm-damon | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-kernel-mm-damon b/Documentatio= n/ABI/testing/sysfs-kernel-mm-damon index e675a57145e36..f8d2601e82904 100644 --- a/Documentation/ABI/testing/sysfs-kernel-mm-damon +++ b/Documentation/ABI/testing/sysfs-kernel-mm-damon @@ -173,6 +173,19 @@ Contact: SJ Park Description: Writing to and reading from this file sets and gets the per-probe attribute weight. =20 +What: /sys/kernel/mm/damon/admin/kdamonds//contexts//monitoring_att= rs/probes/

/preps/nr_preps +Date: Jun 2026 +Contact: SJ Park +Description: Writing a number 'N' to this file creates the number of + directories for each DAMON probing preparation action named '0' + to 'N-1' under the preps/ directory. + +What: /sys/kernel/mm/damon/admin/kdamonds//contexts//monitoring_att= rs/probes/

/preps//prep_action +Date: Jun 2026 +Contact: SJ Park +Description: Writing to and reading from this file sets and gets the probi= ng + preparation action. + What: /sys/kernel/mm/damon/admin/kdamonds//contexts//monitoring_att= rs/probes/

/filters/nr_filters Date: May 2026 Contact: SJ Park --=20 2.47.3