Re: [PATCH RFC 2/2] mm/x86/pat: Do proper PAT bit shift for large mappings

From: Peter Xu
Date: Thu May 23 2024 - 19:07:20 EST


On Thu, May 23, 2024 at 03:48:22PM -0700, Dave Hansen wrote:
> On 5/23/24 15:37, Peter Xu wrote:
> > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > index 317de2afd371..c4a2356b1a54 100644
> > --- a/mm/huge_memory.c
> > +++ b/mm/huge_memory.c
> > @@ -1135,7 +1135,7 @@ static void insert_pfn_pmd(struct vm_area_struct *vma, unsigned long addr,
> > goto out_unlock;
> > }
> >
> > - entry = pmd_mkhuge(pfn_t_pmd(pfn, prot));
> > + entry = pmd_mkhuge(pfn_t_pmd(pfn, pgprot_4k_2_large(prot)));
> > if (pfn_t_devmap(pfn))
> > entry = pmd_mkdevmap(entry);
> > if (write) {
>
> Does this even compile on non-x86 architectures?

Probably not.. I think I can define a pgprot_to_large() globally, pointing
that to pgprot_4k_2_large() on x86 and make the fallback to be noop. And
if there's a new version I'll guarantee to run over my cross compilers.

Any comments on the idea itself? Do we have a problem, or maybe I
overlooked something?

Thanks,

--
Peter Xu