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

[email protected] Tue, 28 Jul 2026 04:32:59 +0000
Newsgroups dev.linux.lists.damon
Message-ID <[email protected]>
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?

> +		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?

> +		break;
>  	default:
>  		break;
>  	}

-- 
Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=2