Hi Steven, On Mon, Jul 22, 2019 at 04:41:53PM +0100, Steven Price wrote: > walk_page_range() is going to be allowed to walk page tables other than > those of user space. For this it needs to know when it has reached a > 'leaf' entry in the page tables. This information is provided by the > p?d_leaf() functions/macros. > > For mips, we only support large pages on 64 bit. That ceases to be true with commit 35476311e529 ("MIPS: Add partial 32-bit huge page support") in mips-next, so I think it may be best to move the definition to asm/pgtable.h so that both 32b & 64b kernels can pick it up. Thanks, Paul > For 64 bit if _PAGE_HUGE is defined we can simply look for it. When not > defined we can be confident that there are no leaf pages in existence > and fall back on the generic implementation (added in a later patch) > which returns 0. > > CC: Ralf Baechle <ralf@xxxxxxxxxxxxxx> > CC: Paul Burton <paul.burton@xxxxxxxx> > CC: James Hogan <jhogan@xxxxxxxxxx> > CC: linux-mips@xxxxxxxxxxxxxxx > Signed-off-by: Steven Price <steven.price@xxxxxxx> > --- > arch/mips/include/asm/pgtable-64.h | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/arch/mips/include/asm/pgtable-64.h b/arch/mips/include/asm/pgtable-64.h > index 93a9dce31f25..2bdbf8652b5f 100644 > --- a/arch/mips/include/asm/pgtable-64.h > +++ b/arch/mips/include/asm/pgtable-64.h > @@ -273,6 +273,10 @@ static inline int pmd_present(pmd_t pmd) > return pmd_val(pmd) != (unsigned long) invalid_pte_table; > } > > +#ifdef _PAGE_HUGE > +#define pmd_leaf(pmd) ((pmd_val(pmd) & _PAGE_HUGE) != 0) > +#endif > + > static inline void pmd_clear(pmd_t *pmdp) > { > pmd_val(*pmdp) = ((unsigned long) invalid_pte_table); > @@ -297,6 +301,10 @@ static inline int pud_present(pud_t pud) > return pud_val(pud) != (unsigned long) invalid_pmd_table; > } > > +#ifdef _PAGE_HUGE > +#define pud_leaf(pud) ((pud_val(pud) & _PAGE_HUGE) != 0) > +#endif > + > static inline void pud_clear(pud_t *pudp) > { > pud_val(*pudp) = ((unsigned long) invalid_pmd_table); > -- > 2.20.1 >