From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Alistair Popple <apopple@nvidia.com>
Cc: Jordan Niethe <jniethe@nvidia.com>,
linux-mm@kvack.org, balbirs@nvidia.com, matthew.brost@intel.com,
akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
dri-devel@lists.freedesktop.org, ziy@nvidia.com,
lorenzo.stoakes@oracle.com, lyude@redhat.com, dakr@kernel.org,
airlied@gmail.com, simona@ffwll.ch, rcampbell@nvidia.com,
mpenttil@redhat.com, jgg@nvidia.com, willy@infradead.org,
linuxppc-dev@lists.ozlabs.org, intel-xe@lists.freedesktop.org,
jgg@ziepe.ca, Felix.Kuehling@amd.com, jhubbard@nvidia.com,
maddy@linux.ibm.com, mpe@ellerman.id.au,
ying.huang@linux.alibaba.com
Subject: Re: [PATCH v6 05/13] mm/page_vma_mapped: Add flag to page_vma_mapped_walk::flags to track device private pages
Date: Mon, 23 Mar 2026 21:03:09 +0100 [thread overview]
Message-ID: <ad64f739-4cbd-42df-8dfb-2e5f89a96f2a@kernel.org> (raw)
In-Reply-To: <abzSSHQUnDs_AFoz@nvdebian.thelocal>
>>> #define DEFINE_FOLIO_VMA_WALK(name, _folio, _vma, _address, _flags) \
>>> struct page_vma_mapped_walk name = { \
>>> - .pfn = folio_pfn(_folio), \
>>> + .pfn = folio_page_vma_walk_pfn(_folio), \
>>> .nr_pages = folio_nr_pages(_folio), \
>>> .pgoff = folio_pgoff(_folio), \
>>> .vma = _vma, \
>>> .address = _address, \
>>> - .flags = _flags, \
>>> + .flags = page_vma_walk_flags(_folio, _flags), \
>>> }
>>
>> That's all rather horrible ...
>>
>>
>> I was asking myself recently, why something that is called
>> "page_vma_mapped_walk" consume a pfn. It's just a horrible interface.
>
> I don't disagree, and in fact it used to consume a page until 2aff7a4755be ("mm:
> Convert page_vma_mapped_walk to work on PFNs"). If this was a page it would
> basically resolve all the hackiness of this patch because we would no longer
> have to pass PFN context around. So I wonder if there would be any opposition to
> changing this back to taking a page?
Are there cases where we pass a struct-page-less PFN?
The offenders are pfn_mkclean_range() and mapping_wrprotect_range().
pfn_mkclean_range() is only used by fs/dax.c
At least the caller immediately does a
dax_flush(dax_dev, page_address(pfn_to_page(pfn)), count * PAGE_SIZE);
Afterwards where, apparently, a page for the PFN exists? :)
mapping_wrprotect_range() is only used by drivers/video/fbdev/core/fb_defio.c
fb_deferred_io_work() just calls page_to_pfn(page). Huh?
Best to explore the history what's going on there.
My best guess is that they don't want to modify page state. But that can
be expressed by the helper functions and doesn't require us to have such
a weird implementation.
>
>>
>>
>> * DEFINE_FOLIO_VMA_WALK() users obviously receive a folio.
>> * mm/migrate_device.c just abuses page_vma_mapped_walk() to make
>> set_pmd_migration_entry() work. But we have a folio.
>> * page_mapped_in_vma() has a page/folio.
>>
>> mapping_wrprotect_range_one() and pfn_mkclean_range() are the real
>> issues. They all end up calling page_vma_mkclean_one(), which does not
>> operate on pages/folios.
>>
>> Ideally, the odd pfn case would use it's own simplified infrastructure.
>>
>>
>> So, could we simply add a folio+page pointer in case we have one, and
>> use that one if set, leaving leaving the pfn unset?
>>
>> Then, the pfn would only be set for the
>> mapping_wrprotect_range_one/pfn_mkclean_range case. I don't think
>> device-private folios would ever have to mess with that.
>>
>>
>> Then, you just always have a folio+page and don't even have to worry
>> about the pfn?
>
> That sounds reasonable to me. We were hesitant to add a page back to the
> interface given it had been removed previously but lets try implementing this to
> see what it looks like.
Thanks!
--
Cheers,
David
next prev parent reply other threads:[~2026-03-23 20:03 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-02 11:36 [PATCH v6 00/13] Remove device private pages from physical address space Jordan Niethe
2026-02-02 11:36 ` [PATCH v6 01/13] mm/migrate_device: Introduce migrate_pfn_from_page() helper Jordan Niethe
2026-02-27 21:11 ` David Hildenbrand (Arm)
2026-03-01 23:38 ` Jordan Niethe
2026-03-02 9:22 ` David Hildenbrand (Arm)
2026-03-03 5:52 ` Jordan Niethe
2026-03-03 16:32 ` David Hildenbrand (Arm)
2026-02-02 11:36 ` [PATCH v6 02/13] drm/amdkfd: Use migrate pfns internally Jordan Niethe
2026-03-03 16:40 ` David Hildenbrand (Arm)
2026-02-02 11:36 ` [PATCH v6 03/13] mm/migrate_device: Make migrate_device_{pfns,range}() take mpfns Jordan Niethe
2026-03-03 16:52 ` David Hildenbrand (Arm)
2026-02-02 11:36 ` [PATCH v6 04/13] mm/migrate_device: Add migrate PFN flag to track device private pages Jordan Niethe
2026-03-03 16:58 ` David Hildenbrand (Arm)
2026-02-02 11:36 ` [PATCH v6 05/13] mm/page_vma_mapped: Add flag to page_vma_mapped_walk::flags " Jordan Niethe
2026-03-06 15:44 ` David Hildenbrand (Arm)
2026-03-20 4:57 ` Alistair Popple
2026-03-23 20:03 ` David Hildenbrand (Arm) [this message]
2026-02-02 11:36 ` [PATCH v6 06/13] mm: Add helpers to create migration entries from struct pages Jordan Niethe
2026-03-06 15:59 ` David Hildenbrand (Arm)
2026-02-02 11:36 ` [PATCH v6 07/13] mm: Add a new swap type for migration entries of device private pages Jordan Niethe
2026-02-02 11:36 ` [PATCH v6 08/13] mm: Add softleaf support for device private migration entries Jordan Niethe
2026-02-02 11:36 ` [PATCH v6 09/13] mm: Begin creating " Jordan Niethe
2026-02-02 11:36 ` [PATCH v6 10/13] mm: Add helpers to create device private entries from struct pages Jordan Niethe
2026-02-02 11:36 ` [PATCH v6 11/13] mm/util: Add flag to track device private pages in page snapshots Jordan Niethe
2026-03-06 16:02 ` David Hildenbrand (Arm)
2026-03-06 16:03 ` David Hildenbrand (Arm)
2026-02-02 11:36 ` [PATCH v6 12/13] mm/hmm: Add flag to track device private pages Jordan Niethe
2026-03-06 16:05 ` David Hildenbrand (Arm)
2026-02-02 11:36 ` [PATCH v6 13/13] mm: Remove device private pages from the physical address space Jordan Niethe
2026-03-06 16:11 ` David Hildenbrand (Arm)
2026-02-06 13:08 ` [PATCH v6 00/13] Remove device private pages from " David Hildenbrand (Arm)
2026-03-06 16:16 ` David Hildenbrand (Arm)
2026-03-17 1:47 ` Alistair Popple
2026-03-18 8:44 ` David Hildenbrand (Arm)
2026-03-20 5:52 ` Alistair Popple
2026-03-23 20:10 ` David Hildenbrand (Arm)
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=ad64f739-4cbd-42df-8dfb-2e5f89a96f2a@kernel.org \
--to=david@kernel.org \
--cc=Felix.Kuehling@amd.com \
--cc=airlied@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=apopple@nvidia.com \
--cc=balbirs@nvidia.com \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jgg@nvidia.com \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=jniethe@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=lyude@redhat.com \
--cc=maddy@linux.ibm.com \
--cc=matthew.brost@intel.com \
--cc=mpe@ellerman.id.au \
--cc=mpenttil@redhat.com \
--cc=rcampbell@nvidia.com \
--cc=simona@ffwll.ch \
--cc=willy@infradead.org \
--cc=ying.huang@linux.alibaba.com \
--cc=ziy@nvidia.com \
/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