On 08/12/2020 12:03 PM, Aneesh Kumar K.V wrote: > The tests do expect _PAGE_PTE bit set by different page table accessors. > This is not true for the kernel. Within the kernel, _PAGE_PTE bits are > usually set by set_pte_at(). To make the below tests work correctly add test > specific pfn_pte/pmd helpers that set _PAGE_PTE bit. > > pte_t pte = pfn_pte(pfn, prot); > WARN_ON(!pte_devmap(pte_mkdevmap(pte))); > WARN_ON(!pte_savedwrite(pte_mk_savedwrite(pte_clear_savedwrite(pte)))); > > Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxx> > --- > mm/debug_vm_pgtable.c | 65 +++++++++++++++++++++++++++---------------- > 1 file changed, 41 insertions(+), 24 deletions(-) > > diff --git a/mm/debug_vm_pgtable.c b/mm/debug_vm_pgtable.c > index eea62d5e503b..153c925b5273 100644 > --- a/mm/debug_vm_pgtable.c > +++ b/mm/debug_vm_pgtable.c > @@ -31,6 +31,23 @@ > #include <asm/pgalloc.h> > #include <asm/tlbflush.h> > > +#ifdef CONFIG_PPC_BOOK3S_64 > +static inline pte_t debug_vm_pfn_pte(unsigned long pfn, pgprot_t pgprot) > +{ > + pte_t pte = pfn_pte(pfn, pgprot); > + return __pte(pte_val(pte) | _PAGE_PTE); > + > +} > +static inline pmd_t debug_vm_pfn_pmd(unsigned long pfn, pgprot_t pgprot) > +{ > + pmd_t pmd = pfn_pmd(pfn, pgprot); > + return __pmd(pmd_val(pmd) | _PAGE_PTE); > +} > +#else > +#define debug_vm_pfn_pte(pfn, pgprot) pfn_pte(pfn, pgprot) > +#define debug_vm_pfn_pmd(pfn, pgprot) pfn_pmd(pfn, pgprot) > +#endif Again, no platform specific constructs please. This defeats the whole purpose of this test. If __PAGE_PTE is required for the helpers, then pfn_pmd/pte() could be modified to accommodate that. We dont see similar issues on other platforms, hence could you please explain why ppc64 is different here.