DAMON development mailing list
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: dayou5941@163.com
Cc: damon@lists.linux.dev
Subject: Re: [PATCH] mm/damon/ops-common: putback folios on invalid migrate nid
Date: Thu, 23 Jul 2026 06:24:27 +0000	[thread overview]
Message-ID: <20260723062427.D719C1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260723061246.1878435-1-dayou5941@163.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

Pre-existing issues:
- [High] Incorrect Loop Advancement / Bounds Oversight (PFN advancement bug)
- [High] Missing yield in unbounded list putback loop
--

--- Patch [1]: [PATCH] mm/damon/ops-common: putback folios on invalid migrate nid ---
commit b4aa488aeb8640931363ab9a919f2ae6536d57ba
Author: liyouhong <liyouhong@kylinos.cn>
mm/damon/ops-common: putback folios on invalid migrate nid

This commit extracts the LRU putback logic into a helper function and
uses it to return folios to the LRU when damon_migrate_pages() is called
with an invalid target_nid. This prevents folios from remaining isolated
from the LRU permanently.

> diff --git a/mm/damon/ops-common.c b/mm/damon/ops-common.c
> index e59f77eca83b2..1286fe54b0d9d 100644
> --- a/mm/damon/ops-common.c
> +++ b/mm/damon/ops-common.c
> @@ -330,12 +330,22 @@ static unsigned int __damon_migrate_folio_list(
>  	return nr_succeeded;
>  }
>  
> +static void damon_putback_folio_list(struct list_head *folio_list)
> +{
> +	struct folio *folio;
> +
> +	while (!list_empty(folio_list)) {
> +		folio = lru_to_folio(folio_list);
> +		list_del(&folio->lru);
> +		folio_putback_lru(folio);
> +	}
> +}

[Severity: High]
This is a pre-existing issue, but can this tight loop cause CPU soft lockups?

If a DAMON scheme isolates a massive region that fails to migrate, or is
given an invalid migration NID, the isolated folio list could scale to
millions of folios. Because this loop takes the LRU lock for each folio
without a yield point, could it monopolize the CPU and cause severe latency
spikes? Should there be a cond_resched() in this loop?

[ ... ]

[Severity: High]
This is a pre-existing issue, but do these unconditionally sized advancements
elsewhere in the DAMON codebase risk skipping uninspected memory regions?

In mm/damon/paddr.c:damon_pa_pageout():

    addr += folio_size(folio);

And similarly in mm/damon/vaddr.c:damos_va_migrate_pmd_entry() and
damos_va_stat_pmd_entry():

    nr = folio_nr_pages(folio);

When a DAMON region starts in the middle of a large folio (a tail page), or
a PTE walk encounters a partially mapped large folio, advancing the pointer
by the total folio size or total number of pages overshoots the bounds. Does
this silently skip adjacent, unrelated PTEs and physical addresses?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260723061246.1878435-1-dayou5941@163.com?part=1

  reply	other threads:[~2026-07-23  6:24 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-23  6:12 [PATCH] mm/damon/ops-common: putback folios on invalid migrate nid dayou5941
2026-07-23  6:24 ` sashiko-bot [this message]
2026-07-23 13:50   ` SJ Park
2026-07-23 13:46 ` SJ Park
2026-07-24  6:00   ` 李佑鸿 

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260723062427.D719C1F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=damon@lists.linux.dev \
    --cc=dayou5941@163.com \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox