From nobody Sat Sep 26 12:26:28 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 588CC3C37A2; Tue, 1 Sep 2026 13:25:15 +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=1788269116; cv=none; b=DiXMYL+ubQYknMgUtSoBG0dZuCrE5gV4sfZD6dQ603Klvi5OPJFZf3IjQBef5XM3qK+ks7jMUDm9FDcHfBz4BnBKfCXQdMQjqTeCgXtQN6y7dC5dM1SkFDEvyX8yD81+0nJAuAvMjjADARtIRKILDCTTPfmQFvXKVoRXkzePpmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269116; c=relaxed/simple; bh=5eiAy3QIbJG0jFQflcMO3WVJL5e78NjuZ+mSKp0XpBg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oYEhpqz3+BM0SjEg+ZmFLyRTPDX7Nib+tM/gb+SKdUzUxdD96p9pXCeqkpapmGD0IJ7poeextRMT79Sn3a7KdkhxDCqurhbAx4aRYNoUW1ueHKVBM4eOI5giLOOUJqTdEH68upt2tVpku/B1Q4SvxspWWXisEIXEBx/1Q1ftHCo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nJilu1v+; 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="nJilu1v+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F05341F00ADB; Tue, 1 Sep 2026 13:25:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269115; bh=U+5n2m69nUp/8eBxRsZKrpQRqRxmZwpAKuJfK8YQaNw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=nJilu1v+6XF9e5ByO9wGT3nwIWFxcZVNHpZo3jUMIZlqF50JJ5s83Jg/3dyBF7gpJ jU19FtBk/WvY55inPoMgcixr1Erag2zLQ+QMA/ZpMX+WvA7QRQPH5J3TliUHbenyvn RpDI1p7qfXSRnXMvV1nOgnN/Nb06J7O4EDB6w3pEx3MCC6s6fFzLsiXKMCEeI3ZSlg PPEBOTmAtiNxD/+X455t3pW7X5okDfWPLrBwuQtj2tblIp2y910S+nlEGiPWF2q7CG Tp6Rjnmn7KWTyk++9JJcKZ88CAGf9uijUnGL3rBI2agr9OAoYv1FW9n1VgBtNIzuNk 2sDD2cFb1rAPg== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 01/17] mm/damon/core: introduce DAMON_FILTER_TYPE_PGIDLE_UNSET Date: Tue, 1 Sep 2026 06:24:48 -0700 Message-ID: <20260901132506.99243-2-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 94D21474266; Tue, 1 Sep 2026 13:25:15 +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=1788269116; cv=none; b=tsDPug99lRGF1QvW68OfyPEPhLlbOuOvylysPCLXVD++6znGA22L9J5ch5l+G+nQJTMW7tnnFtniJB1M2e3M6UYaOx34BVmFGn+wiciRLDmQ63XWlR2H5XOkdlMJTmUveWSA152yXOOgZuGLsi1GkENvV9I3nxPQnQmEyb2MLI8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269116; c=relaxed/simple; bh=ieT/ne0vOY5EYTrH52WVPjFrGyxfjporIuBqWV3GlGo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oTSHX7qu4zh+otqJwMVdOeVkYiEuv56VOyTqXxGcfMpNQhABvtfyfrf67luXurOXHv/og1n+axAwCxBjv86UEXW+kgu0CgPGFGFcPYnAcqCQty2qZ9MtZ6OjdXhjhxteDTLRhcQeXqHbgzq7n1CnIc3YliHV6ZT+aQ24K+tTXSs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X3rU3NCL; 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="X3rU3NCL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 475D61F01558; Tue, 1 Sep 2026 13:25:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269115; bh=atWhsqWAE5VXdJdWplOPI8OSXhIZpjioTpYT4VKG/08=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=X3rU3NCLujv+rUY/N1F1HlANXOcMs774/erA6prJGwJ1zfysPI1f0g9nbt3IPyMjc J/uqB/DMeZ8pZPNJjwj6fEsu53i4GhFBuEV7iVvYqaVlVWCFeHNnx0BbaazdgF9JfE h88ogDbPp90id2S4klQpHGA8QUdhy/aA5cOOl1zPP5HyRQcbUBs/SowAgNo4dvPClR z67tmt5xdgeRi3SYMsf/8H7bi+wLLDKIfbjBfrWo2qPwMqcnGzEi2rZObTJfs4H0M4 ozqFRyZzYLWl2EaI4iV3NSfVmOYP326pIMpWrOdtGr6oaZ6/ThTXV++u7d3zfO227b C1XIK48dXmpsg== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 02/17] mm/damon/paddr: support PGIDLE_UNSET probe filter type Date: Tue, 1 Sep 2026 06:24:49 -0700 Message-ID: <20260901132506.99243-3-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 D794B474267; Tue, 1 Sep 2026 13:25:15 +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=1788269117; cv=none; b=EElUkbD9srp6e5hKlBiqsKXtg3RZOi1vwO+l9E4R51K5d6lkwWz8cLIkUi3BZH5yzn2/9WnsPM8QSxmHNilHXogWoKs8xotpLnKo1Gi3A2s4cveu39l9tcHkosGv+zA0e3IcEqeqCivQaDct9zV3uyDjTg56Dc/idUJzUzwwAio= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269117; c=relaxed/simple; bh=ur9aM9M3M3StIkcfs2dlkFt4MZLQoyzztUq2x+Y/rss=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YHL6JdYM71ifr8nhQyIqmpepgHfGPfl/sRlRXJ0yir0oQtkCuJqUVX1xwjvntTeDppk/GLkqsRpUQIoZj00cbr1QggZUqHb61kARgxdnCf8d5+fXSg6tepy6NUvDgUgcuGWEB5c6tEe9+pQk72o3dFISZ/dvkHs4cekESqnLSMo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dsoMRHtJ; 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="dsoMRHtJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 955561F00A3F; Tue, 1 Sep 2026 13:25:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269115; bh=fRLux0o/6DOEf/DKOzdhtuDNwLGjkWNCPtBCJqp5Lu8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=dsoMRHtJ6t9A5IK7X8n7y8bRicYtUpaAfju2k5dDHWny+UuVVanreQ0++btTvla6C cqu2gjNNZBYacDd9K6P1LbQ3k1skJ1EOgwcEW80L4xfpe1rJ9TjH0opCWY1n45eXiR or6vXKSD3i4E7FTOs3nj0etWCPE6gzvC2rqhB+PhiSDdjTEw1laiThI4onSByspKku 95iapPoIQWsGxy2BlmnhO/MVBAhjyoUhYQznvtEnRjDbHqVXpTRCYXU+qprvO8UWUm Kwb172VudYGgGcuLHHkdgLoufMhTgtvjO/SsK0HRew3a/RHVcJRLGKa11DrKOXztUm G8zqtJ664NqZQ== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 03/17] mm/damon/sysfs: support pgidle_unset probe filter type Date: Tue, 1 Sep 2026 06:24:50 -0700 Message-ID: <20260901132506.99243-4-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 9E7E947DD7F; Tue, 1 Sep 2026 13:25:16 +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=1788269118; cv=none; b=qaJN7WG8epW7KblsJgZEFkhns6AoiUHtj6ZNEhUzXTRjNLmfXjD/X1B2QSaXPgyyLueVkHDdsL8iX6Sylqz4/7c0jk4cKLY/UIQsPofZCKcp4qHnyZlAvdpOG4p4FYMkFFcSBii+8oofkH4/J/CI4/4UkrVSUnOi/D2EnTRwkJs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269118; c=relaxed/simple; bh=9zsAoynOHHRc7GbHj8uhKfcJe1SrIdX7FjQmo/V/mBI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i15RemIsPn0oMGcOXIZJuYYZ1LFzIwkqwqXvOKHt1N4rsmJB57uBzonAilOQrjje0MDk7P8ZfNf3vALtyyavPYMX8VxceYMUBOZg7hMBlaTFSQjuPbW+F3e+ABjdvPmF3/LLrweRzBq9rXbNZIvgqCQAYwFlmRMDx810CFawDuE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=l4Tz3IpM; 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="l4Tz3IpM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E38581F00ADF; Tue, 1 Sep 2026 13:25:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269116; bh=vf/K9c9fWpOSUYmz+e9QIT0AziWQ1IhtxaGnZ535xtg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=l4Tz3IpMlXR7MLDLlIDUWNNwlBsLxAczPgma1Zv+VzN3rl0T0kRNRX2Sjj5bIA8E7 I6SjkLXtgMnfsQgTC4+gwZdI6R5xZyMmPANuw+14YT9t9+fy0PK1g8APz41IzKzI+W e1EFi3w3wRZmVXlkch3yBAqwjur6yu84iixvMbtnuAhkdtilt/odBX2x23TQXlGTA+ UmWtkwOETAJcOB79YOAtvLjrvp0zc6Z+V7dnU5+jc7Uc+p6WiNApQDb9BYtaZykYLr Fi6pbfVzNmvsCwuiCB6u3vnS6BA04GQcpxOvSnaOG9zXIV4QW4NWlka6VH853OBNPN x6TMaGB6xWViw== 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 v1.1 04/17] Docs/mm/damon/design: document pgidle_unset probe filter type Date: Tue, 1 Sep 2026 06:24:51 -0700 Message-ID: <20260901132506.99243-5-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 D876547DFA0; Tue, 1 Sep 2026 13:25:16 +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=1788269118; cv=none; b=LttJXFCEnff3NdrUBOBOJIAW2HtgNgybr5W8dkM/ltwWa9S7/t9AGqJSlA+35vrXMcbIl7P6h1h5gHIOGFvrHwPEiqVeuIl0dKb/AfdTNFyviWTbaGGbmtUbIceDm2QPjdfBNn9SyrmHbsQyspt9eaNOY47lJkZDC3fHnHxEpro= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269118; c=relaxed/simple; bh=//uK5VLSyeG2PpmSTHj372R5hdfNw2eAp/n+fs5INA0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eIfaqnrMF8p2TML6ItenxkzMbqmnEZyBzi4/wPH9Psxtq44wR0CWALJE32DnBtujtYchItNHP0D19E55ajhx86YnOuRiFxZj7MSNTHdC94eVlev5/YNzX5lYkPO1mnUjiCkZQO8hi+VU1F7BJ8bnTBF1tIBM3aQPOiTInFMDJGM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iwbcseoD; 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="iwbcseoD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9778E1F00A3D; Tue, 1 Sep 2026 13:25:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269116; bh=xDsh4DffQRbrA3+l3qVbLOikgSrH6WeYk4b6TXVz7Rk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=iwbcseoDJE9H3uSY+YRyMW7BS4wilTfsicxoDqMtvzgbNs1WrnDjPeb/uNQ9QIAbI rBVT/tHBYRJsbW9ZaoKO7sq9pZ+mr6w/iVc0iKd/XzqUPvB8L+EcYNFb2N4Ajt7QdA bWxqXngUIahnfDqddNcsiExDU3ovU1FXhiBKKHL/8gIpCsgri3NMdTjd7aJDy79fzQ +NhX3fC6BcqePDgv10CXiTIz+sZxywXoQk79xhQpDRPoGGw/tX2kWhbWLcfTonCL7+ OX4K3Y3oj2u3DJWzbCki7n3s9CpcWc0OwNK7AVod54fzWLI2ZgA9w0il1fxbC4GYbw vkFxHdU4y8vTQ== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 05/17] mm/damon/core: introduce damon_prep struct Date: Tue, 1 Sep 2026 06:24:52 -0700 Message-ID: <20260901132506.99243-6-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 685BE480961; Tue, 1 Sep 2026 13:25:17 +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=1788269118; cv=none; b=cYCStFHSu/HdJGHepe3N+WQAWgm7P2D1Td76TibpjTsP2fOh6gBgQapkWeahEHrD9dRWXrAzJCGdDHcidp7BWTf6bbMJkC4YAb+nEyQn0byH//UIOEcdkTJmqAOFF0RAJ7OVCn4cMSEN9hS7OljksxY9AkkCZSmOc4QKIDurjQo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269118; c=relaxed/simple; bh=bYnhZzmEUV5gZA6RShFmEAIvutDPD7sX7y/nXrffjVw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=T9lx+dQELvbHqhgZB+HB3CWKBqhSRkSX4gOhASVIchJ/lzFNNYd/qciVsvb3NJK59xjmoHSKUZgQKO7kGxAEvd3WIrZPmE0OZd9RjEkJQy3HXM1dbaHYtiU7S6qrRX0N5ERGBq/sjilNPyd5qjrB7EswyA8EcxXV3xDJvhY9vE8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cjHZ25Oz; 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="cjHZ25Oz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E43551F00A3E; Tue, 1 Sep 2026 13:25:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269117; bh=IMsa03+GswfqkWjEdLMDvVsbH1S2RLUAm5b70sXm7PU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cjHZ25Oz9d82f4iu/ntoDLNgS2VHC5AmV6rh5E+Cdfgc3to7+yhLlvPEX2uChGZMo R216F4gJzmaXRU/IB7ICEXe/Ksp5KLkNhyYIjR9PS1bWyF3EfkAN2Hc5Cqyfe3JkNa orR7HlexcFuv7sl1bPktoBgTSYCyILVo1o8TPSQvfMqkXQIi/6oeEqtb9jY7YZiRIp WhFjaHmYv1dYJfBY3Nec64S0vQ/zkfPTumWbhy4IDWr+AW4CUq7ljK0x80qyYrGnmV JVqhyGLeIwJRWwDyfT931jmnYop3PfAVz267XUQMS2TKFZGcXa80Pnpo1xj/C3b7V+ SUrGZXhWZKFbw== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 06/17] mm/damon/core: commit preps Date: Tue, 1 Sep 2026 06:24:53 -0700 Message-ID: <20260901132506.99243-7-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 8BCBC480972; Tue, 1 Sep 2026 13:25:17 +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=1788269119; cv=none; b=RN/b4yQoTR9dXU3HTlALclL6BcyFIl1s+aRzZ2Kr3d6p6DIu959JLk69uFtbF2y4z1S/XUkZhh3+Jw7hfM0PLvdKTEsUB7Zobhk+woNUXgCt341Fu0bNpF6zjqxtuQU6YP2zdXpAt+vwBrH7T6ZpRW9vBHuXU2RXmSFB9aCnndU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269119; c=relaxed/simple; bh=SZeQ5JCi8iR4wDXzcllj59HrIjfGWjZKEdSDpPM3xSs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eMjXvWt1atGFsUzdjbepq6ZmepzmwynElo+hX18nvZ/zVJn+TqA5tqqyEEKycP5wsfXqTxuWb/g6xyqdEfykIZF2K2flWc1UO+NEiR9AlgnvsQHokcWgWzsS+H+SPAgkbIK+b3S7twNQiHN/ehiJ+k6HGDoRNGAOlM01xFItK/w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HPmxm92b; 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="HPmxm92b" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3B0D41F000E9; Tue, 1 Sep 2026 13:25:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269117; bh=SiFpyzeeZ8dXbIxeNUm9NHfmBqlBoJ0Y+FG8UIsF09c=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=HPmxm92bXxmEWPYKR2yygRYwRMYLP1oZneWz4EyJVxtKpYyuvsNwMtL9Ak37oquKl tL9PkkCNZKBIIdVpm5OoRP2/4igWlZDouWx5PchABxKMETnJN7+eLEJ+GozAIh4sL6 wvInedonXzZoMEG0A7arJfiL1+wRPPHJqaaEuZkvF8f495aVULlzWxh/Tm6yPjjJYh HN1LREfZumaHW/Z/vp3oYpHo9WYeuCO3J6tO/F3kreODG3gljIteMATs5p9lvCJocq Ofww8eLJWsMorZbpzu3s0PfwpIQpuuAFkxAmXnZiEHky6GqkH5Yil20ybR4uQ/gbxO Rk9u/oPzhiR+Q== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 07/17] mm/damon/core: introduce damon_operations->prep_probes() Date: Tue, 1 Sep 2026 06:24:54 -0700 Message-ID: <20260901132506.99243-8-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 CCF8B480DC0; Tue, 1 Sep 2026 13:25:17 +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=1788269119; cv=none; b=T07gGP4mUQAZLPNZggIDA2ZKLbTQ8Oqu92uMC8uW3JuksJi/FiWhs99n/dOKERelydRRux2B26JflmtPmsxh5SRaHnC2UmBFvDHDr5dctk390m9zqmZyQen6j3AS/+Zt4eQ6Ez2yQgLlz4IKjHnTG2GNSCAD5EPluYPLUHPOBFs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269119; c=relaxed/simple; bh=psLetOg121R0QNdJs+CF5/aps8rlnAQgTRRu06h/FW0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jlD8sjex7NneBlPfMoknJvIgYGk0iih68/PiLMzqFLEtVhopbfHMCEOqGABqATmIWdjZiWdUnDpu6ewdI86CX6tohalWyx5kABAdaWTQQLS9/0ri2z5XaNNwxajjbqp47C83Br47CgomIXtZML+8RtI9FE+D7vLKb4DrA/PDOJ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=amygPIRt; 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="amygPIRt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 89CE11F00ACA; Tue, 1 Sep 2026 13:25:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269117; bh=OpyWxBrGaST77vm6YyG0Qbwcf9E6DAqPTZr9W1qgAUU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=amygPIRtCamOEChxFe6EU72WlaHv1AGk8cE4BcJs/D2pvz4gG8DnhfNrZGQ79M9hf EPeISk5p3+OwZvXTqEFE9jS9dPAebeYlaXnIOiyoHJT9/3DLiOZTHgYYOroAg8cn7G zs1/7WCgJ5KltZFn2wgvgvLE1jjmexlDohrEAAcme7h3v3XOGGAzt86m6bpA5iBzpn KRqt+F+AYR7GbCSzzsag3rWWV6c1TO289VU7RqcLKUZrH9dZ/hb7jGCBkbWz5rHnTo CzOg7xc13ImIL22vADZuFPfif8AUhihNp2z/gT3AyLV5vWlMnRYoR8EgbUXmABRjrx yWEW+C6tpRZmA== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 08/17] mm/damon/paddr: support damon_prep Date: Tue, 1 Sep 2026 06:24:55 -0700 Message-ID: <20260901132506.99243-9-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 234C7480DD2; Tue, 1 Sep 2026 13:25:18 +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=1788269120; cv=none; b=trtVOBpLJUdpOCy5ZZ1beVdjPhOmsONYMPcZ+YenTUG2zbI5/dncCwp/DJa0aOXdNRAQ8D6lWcemOAmpZ4LFkkpf0OtQZveHl53bpmQ/1/YkpbMFlJEkgg31Nay1gc8cVmx4u0qawCzwSh7sxX3Eso0h9q5MpJ/HnJKzu25wdds= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269120; c=relaxed/simple; bh=ebZWA2+dSTUkV10/r9grEzALXwTLDvss2s7MOIuEXPI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TbNZPee0Sr5LjZEdc3IabaCgzadksPFcPDqNJ2k4LQpz6MbQ75jQ4vCuIDOhdi++4z7eaQRezaBgagYwjt1Fu/nGPbBLj7GdREeNsl6tOy6UKgMT8A1zs3JBfJY++4WlkgBezGp5G/s0hRP68HpJMRo3Z9zsN1iLZdJ28RP5l20= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=n2/FGnLg; 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="n2/FGnLg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D58A61F00ACF; Tue, 1 Sep 2026 13:25:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269118; bh=x4M/9i3il9+uoX/0hvXXuMXtTWxZNwDv4ttKnUbtHPw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=n2/FGnLgDgXTvCYFjErpYKblPGIZZk4Ju9X7ymZOtgi264KCJLbw4odBjGDwwMOf5 0sGBvLV7uzFzTsVyj3aWTWT46keqxGfdpioiETdT//Iw48QHsCyITNoCLZd4Id9Dbv usywHVX69XXYJXpcRrPVoRgX1dat7OIhbORjsuwPJz/D6qi4yrEVJ6zqoA7jNolN9T YCcQcIiilwLSN5xXzc/dfKbrfNtH5E2EBExh5XJzXNYgkSTYyo3Z7CovAxYB3ynWzr aOKZhvAx0g0xOrOYdrCgPrknX3DXw0Qh8XN46JqcJ7aO6qDCYqiLlRbS3pGvNsysLr cRiI6E3yjzTOQ== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 09/17] mm/damon/sysfs: implement preps directory Date: Tue, 1 Sep 2026 06:24:56 -0700 Message-ID: <20260901132506.99243-10-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 68309480DEF; Tue, 1 Sep 2026 13:25:18 +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=1788269119; cv=none; b=JNl1mtimHO1RPgZt7TCEMsQ+3wZwRIVrL75yDUqu+oPYPRCTsjoOWHTDuDiHjh0SSoCoFdkSmO98lkIPrFwpaL4lwdT8QvNxrE6aoNQSVG0nSYfcavtIgSMzhfcWhQT3UN75BGEu3yjELYVdPrqGP148yNY+LOjlhSQn3tYQszs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269119; c=relaxed/simple; bh=TjaLRLGl85k1NfsJfJlZ8AUSjsqL+FlUFngH+W3xeuM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Y0dgSI1cCk9+nMnLYNLHYfX0s8fRRpE+G8Z0A4B36YeuxJk0ltj0wejjRlr5DNVrLEKXMNSDXhsvmd1MKjr0cBy5jOvIIDlIBewYn0hBV1QHzSS9gOAOSdYJupX3wpqMT+8TEVBSE4dYyrxbi0Y99/wJr1TBcfqI/iVCjjviNY0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ADcy2puK; 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="ADcy2puK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2BD831F00A3F; Tue, 1 Sep 2026 13:25:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269118; bh=SGq3BJdNnnCTCYeGqjvgppOd2nVk87x7Bo82sRuFOlA=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=ADcy2puKfNE+YefSZfb7hqHyzErBhrUz3VAuvNmNrIirudLMcD2NYz+iKmJXkxHIZ BUgXl/ggB/p1Pw6NgDY34XZDTXlgMN76BjQMxuY8k+JCon69wEg6Pw3ihVO0y6sRB7 UDkVZpBCuth5JOst5k48TYrQMfkDl/pft7z/sZHqoblCDixZa7jg1kfiC6VfOrBoue LGtDbpl7HaBrqZu+2bykoaOVGDYr2eHJ1CB+/Teo25TyPqTZXFWeeDfvpxigeVoFt1 gNVbQWVPMTawaN2cM4LilikB5hs8CzJlT2iTU//TsPD+8o+a124hTaJ1QlDGv1fD9X pgJm9Q3yqEnBQ== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 10/17] mm/damon/sysfs: implement preps/nr_preps file Date: Tue, 1 Sep 2026 06:24:57 -0700 Message-ID: <20260901132506.99243-11-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 ECEB948124E; Tue, 1 Sep 2026 13:25:18 +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=1788269120; cv=none; b=JtT2nk9o60n5Ain9ewpor0hLImz7niR9pGErum8/lvGh+VHL3ISp3Sn9RldDS9eq+hphb73aqSDQGQV8ER/mQisC4wfhaJAkETZ0R9jPHpF0w5l0XOV1QaXEVU0pd1U+xv0IC5QeF4+x04h3JpcMLgQ634/znIiIzmzImi9jpnw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269120; c=relaxed/simple; bh=B3c7zIubCm3aKuosHEoO1WGm54SPfk+JCmQCIKuGbYU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SsbJJEFzpiD2VobWvb/WYmWMC10efwfguAIy6yAhP6Qc1NDGBX/BDS0SuIYWVFI/pVFG8+E5iminCgE2BpzmO2nDcKcdaALq4GisrHPnFyk1upqER+yeJx8qhgCguI6l8bOpXbUnUvw/GMf+HC2xtAtZaGsXJglKXywky5oNdq8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Y544UEmq; 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="Y544UEmq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 756FD1F00ADB; Tue, 1 Sep 2026 13:25:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269118; bh=qO65UFbEI2bWLHkGPNlwAeuwDLu8u+FPN4dY2StdWwY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Y544UEmq06y/QuPkg4cwMuzTkvT0xLjiH7VHdCY41q6jOU7ysLzVAILlNrAV7l6vB UXCVYm93Z06PvFaEvKHOLM0mi2nhEzxXmfg7koG8s/9awE/NowsvFFN6v2wqToyxFL sy8gfetg4+mT1drXFg36fLanBWDahKCZRZ+ujuufDWyQItllffscpI8xb8tA32opVJ bOABpNPLTRO/mGN1AkJOXItHmAD/CYQUWyGK7bFFOsj/7lbTK/9iDfXFvszvSErfGG UGcdpk0YbcXF32RntmwUntJelDBrP/U6NDEwISl7eIexUYtVDeuCfZhoXODscaWIjG TjMioLPgQTPHA== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 11/17] mm/damon/sysfs: create directories for nr_preps writes Date: Tue, 1 Sep 2026 06:24:58 -0700 Message-ID: <20260901132506.99243-12-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 186CC3B0ACC; Tue, 1 Sep 2026 13:25:19 +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=1788269120; cv=none; b=MnRl0zqZM271SSpmaS5nnVFpA6R/fCwLmqUUWQXyfS553d8qSBfNruxiKKdvqlI2Gl/O7GTCyMW90VSZGBbyPvcQoBykE2lY4oPjlknRwE+tNNxpfNhV1u28NUhVXnqKX5C2IZVNHGwjxDX8z1ggYv3U7rKn6Q/Oi6MDLyQOtDg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269120; c=relaxed/simple; bh=FA78w4w9pzU+JImx6UmQnQBs3uKYgYRJIYmgiiq2ePA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TaHaqwiFtIFQdMRGj8wFuDrCX9i52Nwa8q2LpMlfXmQXmDj2C1eSSx4vzxUN4Mc8lC5mxKc/CcmEv5SWrAfuHr86dhdHwLyLvGsY62oguWEqKPc9Fdd8PgOs+ZDZXTNIUHvwItIzJr1V/zPhvoPtI+rrh7mWsZyK1bj0Ydc2BJs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Zn/Ucqy7; 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="Zn/Ucqy7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C10081F00A3D; Tue, 1 Sep 2026 13:25:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269118; bh=Rl5ADA+9J/l2w2quHKWsOoHjOvreI5jvhgmI+c48UlQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Zn/Ucqy7kh/RrUKBA3Rnb708DRV8FvFU/uV6HVXV+JNeufRgIotpUS0FGPWf9hkH/ Nst7rRFBdIfd4aUL/BoFWMaOVI4bJzeIjlunTVfnBtjmoecShXHKCUlI1e3KMPO7yj f1k3iXAVjRted5Ig9wcmOJJVRjfApUJM0X68inisJJ62V7c+cQycx71YJFvLP9iTwY sFpb92M8/fGwEy0tbQFlGS/xmGReRSOrO/+f7rAlfUz5XOqm8+UHKY8YwiUQWGLAhK Y1nR4dsBemfJTe8IojAv9U7C2Yfsqp26qBgWgLvCDFgKpE9R6BYCsXJ9EVUMnsD4Xk Cgi6BXop3ZTKA== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 12/17] mm/damon/sysfs: implement prep_action file Date: Tue, 1 Sep 2026 06:24:59 -0700 Message-ID: <20260901132506.99243-13-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 54B4F481672; Tue, 1 Sep 2026 13:25:19 +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=1788269121; cv=none; b=diE3SUUSnNhrTk6qh8qz2MJ+es1mSqfg4v9kQgYYsQy0+RvcimNQxg2fooX2ncpJoOfxQaRgJB7P7ozol0YMwUhNp9hMSJgxEYYQ5COdZAnu0THJjgdNaJBtd7DfEwvBKvG4Sg14NzjLC/3yyMUTuthtnMI5CJm1yTO2/X4yU9A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269121; c=relaxed/simple; bh=06waheRfHqNc7mcKh7ywEIPTWg9mPbPV97QZH8Bf2HY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PEH6sntUyLkeadIuU6c0GsMG3dntX23HealPIKbHUQXqIZX9ZG0nrW+SxlUBpalT9Vvzk9JVJ+V9Q6nzU3rC4EGPwzptL8n+TF3cJSYZVB2pfcMpY9tbqE6zGacMIDLmJw2kQCo/Qz2eSg2W7023LUNFHMqXI4NV+y5g8MRTuZk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JOrgW759; 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="JOrgW759" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1947A1F00ADF; Tue, 1 Sep 2026 13:25:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269119; bh=RE/sPFQsqSQVWahZ4M/8PaRhoZGY65XXC3Wknf+xORI=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JOrgW759azzFRbCRSQfSWrETMw2/DvnImVwwQq6h7O2cc9TC3SYnMItZw7jLXx3zl XhE0YDqOhCDH6OsKpjyqfV3Ei+aqYRM/ZvDzwSyAYysHUd/BNXqb9rPm4tOYIGkmf9 md+h1oGZhkmpWViTgdDnFpts8QjPpZ9oW0ieyAS/T9D+wyH584q9Ij8WQ2TD5nUeem YN+UH7zUFecWC3749zaTVmhNPycX2Gx0vjAsZurrWOFzCIEcVKoDq7wSaSyDInXLs1 75vuKYEHX9HYdhuX2oL30p4o02G9Nvw6TnhO47cmvTT6uBsKMeMHXheoVzxzEj+dnN SOi1RVwA/VdbQ== From: SJ Park To: Andrew Morton Cc: SJ Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v1.1 13/17] mm/damon/sysfs: pass preps to DAMON core Date: Tue, 1 Sep 2026 06:25:00 -0700 Message-ID: <20260901132506.99243-14-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 1ecf194f71ddb..7ec14f48d157a 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -812,7 +812,10 @@ static ssize_t prep_action_store(struct kobject *kobj, =20 action_name =3D &damon_sysfs_prep_action_names[i]; if (sysfs_streq(buf, action_name->name)) { + if (!mutex_trylock(&damon_sysfs_lock)) + return -EBUSY; prep->action =3D action_name->action; + mutex_unlock(&damon_sysfs_lock); ret =3D count; break; } @@ -2176,6 +2179,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 +2231,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 12:26:28 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 050F5480949; Tue, 1 Sep 2026 13:25:19 +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=1788269121; cv=none; b=CZs1PggMm2mUqhwRHyjeLUGo2CRu531v9M2DQEKSOZZ6xrhO+iuNa2SPcJlT1DEUgWwmpHjDmLKKX14bbW6CendJQQoSM0AWpqYA8gQu6M6gJIGlfJl3KJT6fQ+6ElCzgymRN9nH+43Uf0T6YyTuGfSBkq4jPkJRKKH7ttq39nQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269121; c=relaxed/simple; bh=I7iSQWo3DIeCl4GG9ImX2V39xbLJgFz5OBrIHCf8Mf0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DaECpG0QNmAVhZU1N+yZDYAwHfAlVoTRaqTVBZNKtRK6wTkzEM9dSf7Aa9JbHLebIcUNMXWFAsVWK5y5UxOebylK6xoWOvo1iUc61q2qF1O8/ejEYrL6gorX4MxkUfLaLm18KsAFFhxvRGd+LM/CjrF0fCl6SdH+ao3iqjIcAec= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bGFNrxpm; 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="bGFNrxpm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6395A1F000E9; Tue, 1 Sep 2026 13:25:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269119; bh=m+OX/QoubOtPs5CYX5dE9pYfjfAmb4FTinvx7UvjP30=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=bGFNrxpmY2vl87nkgJ+iyG/FQAuLseRmz4SqqzqS3r6ZEXj5vsMmRWjaWHZIvTsQG Yd/YVWDr6Uxiz7+F3/KFqpn0ut2agNQJUEj5BygiPsuqEpkJVXzY+Egt2tcqWKAFc3 lZVUUGxqYPDlHxv7B7F+rVn7aSASQoLG9nd1CsQUeTsRguHPWWimE1IPtJwpqyujnI LsGynk8HiVPHLeZnIS1iWe+ku2ZoZURBcZXJ7g2NmzCBeA/tTuJJOQSqIgCYY3013N /hfDeOGkYcxoYM5/Qd+BBidhnSE2SxLMRdOaSjsIi5frS3/xKjnytPApPU8tJPt/9G PcZdytCk8W4pQ== 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 v1.1 14/17] selftests/damon/sysfs.sh: test probe prep sysfs files Date: Tue, 1 Sep 2026 06:25:01 -0700 Message-ID: <20260901132506.99243-15-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 5E63A483811; Tue, 1 Sep 2026 13:25:20 +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=1788269122; cv=none; b=uX517c9uwpfx2s1ZCiwkl4akgLhFUR+fyk49PtOTdTbJMAqsA/GZdL6yyZi55rwhkkbk501ggAnO/KliJHpA2LJXFzjGLvyjfQd5bW/47ST9HZdaCNTiP6l3pQRooympd1TEY6mq1w6QY4Ux/8t7c7taHk51Re2IliRC6OYeFsY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269122; c=relaxed/simple; bh=AsHoCbwMwQPn54Uh42zQM6XfaiQXavuQ492jVm131qQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SyJ4+21UO/6iDnpbvnoCAGwB2cIQiN9Sbgr1n37BvpMfnf86WSB6Wn4HOcLunWxbs8HmRWyqF5FhOkGoBEx5yUqEKHXZY2RwQNAz/yU3uTHph429PgAWtqG/vqsewrF354gBuEnoeURzh+iM7sOk9vISomSKUnJ56M4NmbgwZeA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GMSipk8U; 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="GMSipk8U" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BF59F1F01559; Tue, 1 Sep 2026 13:25:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269120; bh=CpXkgOmW3GSwhrOkMdO/S1mj76NXWWV8m3WM4J70bcE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=GMSipk8UkfFIcDDvF7JZOpQ51OlDWE7AOEaYd09MsYdaYHkkpPXXCCoqVV7aN89la 57z2pqMr+WWOj6RieHPXnhPpP6e04h3p0BuAdUHBkTQt7rnyI3B3uLs0qzYe9Sgzxx zOelOFLUtOdrdche2+1I3cLfGOzGwOO6diu735898YqgOqb5jUBldpRlsZw/wu4r7y 72e7X1zV/j5GM2ETzVC7IdrY4AuRDHaqJ0BsOldg5PiGnB3afG7XvPwGGSDmdVNSHJ f5i/sRhT0sNVX3RnwKRTeDiwMoFPe+WIrbN8VWpLYy/VLrrtAqcyPpvVcMxhsx/nF/ CcC7v1hGjZCfQ== 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 v1.1 15/17] Docs/mm/damon/design: document probe preps Date: Tue, 1 Sep 2026 06:25:02 -0700 Message-ID: <20260901132506.99243-16-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 10502485CEE; Tue, 1 Sep 2026 13:25:21 +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=1788269122; cv=none; b=FFYhMlC78nVKkju+id1ymVgg2f4v44z9KhwIo/U6Zg/6jwoDdbez9FmorRjFfB+jHEOIiVWQNStZ0Zrwx2OcizuAkTLClErSCIdsLBGe0H+0vBrbSRSYx75MBrnWDFdjZDUWmBGTbIW04oxMVmrqedr2tr+frVK6f3kqHG8gNtA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269122; c=relaxed/simple; bh=g/tFPfelQzKUfzsRZPs73xHoniRK3oTmoDYddCctcSI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ShX+zB9aMqc/CnQlpURavUmJGHZZB3eswK6wCq5JIJm93IjDEYJ9DQ2ClLzc1K+U2ccuQ2t0HbXx1nS8Z1SdjTLJzkbK82enX+ClRYdpMEtoZfFFMAaHMzVzFAYDWxQxwxTUdtwwdZmZojv7JRmoaoNbqXq/O2XF7NfauQJ9UDw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=G5I0h9Yk; 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="G5I0h9Yk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6D1A01F0155E; Tue, 1 Sep 2026 13:25:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269120; bh=PjqVhtQyye+bbFZP93YpIQ5LAq+rT1MA3lQj7bnBnXw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=G5I0h9YkcWnZ8KUsJyOrS3HjlUoaoJ2Yk4S9XxqPzPpXyZALfhmgP/WIwzm+GAZVa eoB9euU1S3qUWKM8ZUvxY7a2IOg1Jw6y3+cvftZbfNYckT7fXQPrHsYvyW34sfq+dd APfnCv9D1WbEHHik0KR7DzEHr2ttw43xhczb6uuNUa2ZWuX/iiKKRcglmxpGB39eL1 2xxV8wWWbtu5bWSUno0jNGfTnOp43Oj1HHsKQA9+i4lEkfwcmPIhJUGyL9/PLlF5wP rYozQAUGOh0hDVgE+5MUbWINY4hUVA2NMaMnLcoxDtYYhN5QpoUBwAJma8sX2LpiQk 9jNRhfcjue3zw== 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 v1.1 16/17] Docs/admin-guide/mm/damon/usage: document probe preps sysfs files Date: Tue, 1 Sep 2026 06:25:03 -0700 Message-ID: <20260901132506.99243-17-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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 12:26:28 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 A146B486BA2; Tue, 1 Sep 2026 13:25:21 +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=1788269123; cv=none; b=ShAyo75WrbNIoe8OOnjOwpBxg0sL+GUqUEK4YefuLrMEPrmnaEwRdGeLrLYurKw8tyyfI2o0tlW40snRC4SdIBubTPIymBoUMB5RW7LGjsr3WQYIuAc6opuiUmXEtQu8IeX4CZmxUtKoV1HPOM0CNJ7zXia5FC1P0mF3yr1yhtQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788269123; c=relaxed/simple; bh=Pffw0QddcOdszpO6Pf+uRui7oVwqUV9y0L1CM1LEgZM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UEEGqRlKec0zjLzAWO8gVtqnNu88DPLyK4eQ5VDOzqY5ZcnVXf4EyIGV9gGxyEseCtBjZZ7ZmpBtYWw7GrW1vC2iJ7Vaa/hP+H4fzJDi9BEk5yLOXm68uIJ80yCmt5h0DkqIMe2f/AjNb/KTKuXv/zEZ96AqRrL2Y0+y93Yy9lY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cWAHzePq; 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="cWAHzePq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1A0851F00A3F; Tue, 1 Sep 2026 13:25:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788269121; bh=Zxj0qXZlLFjv8Oo1ubEI7gb1ZBWWHlkx56zIdj50cXg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=cWAHzePqxkYp0mQOl5mchlLIrWkjoVoUA56rKm/nitPJvcwqwOS/ikOO0f9dnYC7W 1FhMnWdS2tNxJFv5PK/FxkMOaxuZjA5xg3a4M9Wc1dlnMp7BIv9ji354EXVVfXqIXZ omT/3TmcnE1B+x+rkFApZiKtd2URQhnb35VvEScPmWKnXlbtFYH+XNe31nQlIbHltv fbDjO9EUzpJv6nhzRCsDz2dt3vHwMpXGD2J/HFyiM0KmAEe22duc8CNT9XuOjVYxeA rDZaKaVdevlUdNP03jSyA4Aern5jgvlBDPX92E+fvmn2RHvDRXzoKDkgq0j6/FeM1N kZyvKgZvrwqPQ== 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 v1.1 17/17] Docs/ABI/damon: document probe prep sysfs files Date: Tue, 1 Sep 2026 06:25:04 -0700 Message-ID: <20260901132506.99243-18-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260901132506.99243-1-sj@kernel.org> References: <20260901132506.99243-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