Re: [PATCH v2] mm/migrate_device: document folio_get requirement before frozen PMD split
From: David Hildenbrand (Arm)
Date: Mon Mar 09 2026 - 18:01:28 EST
On 3/9/26 22:25, Usama Arif wrote:
> split_huge_pmd_address() with freeze=true splits a PMD migration entry
> into PTE migration entries, consuming one folio reference in the
> process. The folio_get() before it provides this reference.
>
> Add a comment explaining this relationship. The expected folio refcount
> at the start of migrate_vma_split_unmapped_folio() is 1.
>
> Suggested-by: Zi Yan <ziy@xxxxxxxxxx>
> Reviewed-by: Zi Yan <ziy@xxxxxxxxxx>
> Reviewed-by: Nico Pache <npache@xxxxxxxxxx>
> Signed-off-by: Usama Arif <usama.arif@xxxxxxxxx>
> ---
> v1 -> v2:
> - Remove warning if folio refcount !=1 at the start of
> migrate_vma_split_unmapped_folio() (David)
> ---
> mm/migrate_device.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/mm/migrate_device.c b/mm/migrate_device.c
> index 78c7acf02461..fbfe5715f635 100644
> --- a/mm/migrate_device.c
> +++ b/mm/migrate_device.c
> @@ -908,6 +908,10 @@ static int migrate_vma_split_unmapped_folio(struct migrate_vma *migrate,
> unsigned long flags;
> int ret = 0;
>
> + /*
> + * take a reference, since split_huge_pmd_address() with freeze = true
> + * drops a reference at the end.
> + */
> folio_get(folio);
> split_huge_pmd_address(migrate->vma, addr, true);
> ret = folio_split_unmapped(folio, 0);
Acked-by: David Hildenbrand (Arm) <david@xxxxxxxxxx>
--
Cheers,
David