[PATCH 07/12] mm: Remove redundant pXd_devmap calls
David Hildenbrand
david at redhat.com
Thu Jun 5 05:21:50 PDT 2025
On 05.06.25 14:09, Jason Gunthorpe wrote:
> On Wed, Jun 04, 2025 at 07:35:24PM -0700, Dan Williams wrote:
>
>> If all dax pages are special, then vm_normal_page() should never find
>> them and gup should fail.
>>
>> ...oh, but vm_normal_page_p[mu]d() is not used in the gup path, and
>> 'special' is not set in the pte path.
>
> That seems really suboptimal?? Why would pmd and pte be different?
>
>> I think for any p[mu]d where p[mu]d_page() is ok to use should never set
>> 'special', right?
>
> There should be dedicated functions for installing pages and PFNs,
> only the PFN one would set the special bit.
>
> And certainly your tests *should* be failing as special entries should
> never ever be converted to struct page.
Worth reviewing [1] where I clean that up and describe the current
impact. ;)
What's even worse about this pte_devmap()/pmd_devmap()/... shit (sorry!
but it's absolute shit) is that some pte_mkdev() set the pte special,
while others ... don't.
E.g., loongarch
static inline pte_t pte_mkdevmap(pte_t pte) { pte_val(pte) |=
_PAGE_DEVMAP; return pte; }
I don't even know how it can (could) survive vm_normal_page().
Of course, a wild (and different) mixture on pmd_mkdevmap() as well.
So happy to see that go away.
[1] https://lkml.kernel.org/r/20250603211634.2925015-1-david@redhat.com
--
Cheers,
David / dhildenb
More information about the linux-riscv
mailing list