Re: [RFC PATCH v2.2 02/17] mm/damon/paddr: support PGIDLE_UNSET probe filter type

SJ Park <[email protected]> Mon, 27 Jul 2026 21:52:21 -0700
Newsgroups dev.linux.lists.damon
Message-ID <[email protected]>
On Tue, 28 Jul 2026 04:32:59 +0000 [email protected] wrote:

> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [High] DAMON_FILTER_TYPE_PGIDLE_UNSET blindly matches almost all pages when probe weights are used, rendering the filter ineffective.
> - [High] The newly added DAMON_FILTER_TYPE_PGIDLE_UNSET is not exposed in the sysfs interface, making it impossible for users to configure.
> --
> 
> --- Patch [2]: [RFC PATCH v2.2 02/17] mm/damon/paddr: support PGIDLE_UNSET probe filter type ---
> commit 98c0d4f6b2dcc4c706f1af62a258dd827b89bc7e
> Author: SJ Park <[email protected]>
> 
> mm/damon/paddr: support PGIDLE_UNSET probe filter type
>     
> 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.
> 
> > diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c
> > index 5a6a78054784a..199de1463fa06 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 = filter->memcg_id == mem_cgroup_id(memcg);
> >  		rcu_read_unlock();
> >  		break;
> > +	case DAMON_FILTER_TYPE_PGIDLE_UNSET:
> 
> [Severity: High]
> Is this new filter type missing from the sysfs interface mapping?
> 
> Looking at damon_sysfs_filter_type_names[] in mm/damon/sysfs.c, there is
> no entry for DAMON_FILTER_TYPE_PGIDLE_UNSET:
> 
> mm/damon/sysfs.c:damon_sysfs_filter_type_names[] = {
>         {
>                 .type = DAMON_FILTER_TYPE_ANON,
>                 .name = "anon",
>         },
>         {
>                 .type = DAMON_FILTER_TYPE_MEMCG,
>                 .name = "memcg",
>         },
> };
> 
> Without an entry here, will users attempting to configure this new filter via
> sysfs receive -EINVAL, making the filter unconfigurable?

A later patch of this series does that.

> 
> > +		if (!folio)
> > +			matched = false;
> > +		else
> > +			matched = damon_folio_young(folio);
> 
> [Severity: High]
> Will this blindly match almost all folios when probe weights are used?
> 
> In kdamond_fn(), if damon_has_probe_weights(ctx) is true, it skips
> ctx->ops.prepare_access_checks():
> 
> mm/damon/core.c:kdamond_fn() {
>         ...
>         bool access_check_disabled = damon_has_probe_weights(ctx);
>         ...
>         if (!access_check_disabled && ctx->ops.prepare_access_checks)
>                 ctx->ops.prepare_access_checks(ctx);
>         ...
> }
> 
> For physical addresses, this skips damon_pa_mkold() which normally sets the
> PG_idle flag on folios.
> 
> When the filter uses damon_folio_young() here to evaluate access,
> damon_folio_young_one() checks !folio_test_idle(folio).
> 
> Since the idle flag was never set, will this evaluate to true for all
> folios, causing the PGIDLE_UNSET filter to unconditionally match?

Yes, and it is intentional.

Later patches of this series add a way to automatically do such idle flag
setup.

> 
> > +		break;
> >  	default:
> >  		break;
> >  	}
> 
> -- 
> Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=2


Thanks,
SJ