On Thu, Feb 21, 2019 at 11:34:52AM +0000, Steven Price wrote: > From: James Morse <james.morse@xxxxxxx> > > Exposing the pud/pgd levels of the page tables to walk_page_range() means > we may come across the exotic large mappings that come with large areas > of contiguous memory (such as the kernel's linear map). > > For architectures that don't provide p?d_large() macros, provided a > does nothing default. > > Signed-off-by: James Morse <james.morse@xxxxxxx> > Signed-off-by: Steven Price <steven.price@xxxxxxx> > --- > include/asm-generic/pgtable.h | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h > index 05e61e6c843f..f0de24100ac6 100644 > --- a/include/asm-generic/pgtable.h > +++ b/include/asm-generic/pgtable.h > @@ -1186,4 +1186,23 @@ static inline bool arch_has_pfn_modify_check(void) > #define mm_pmd_folded(mm) __is_defined(__PAGETABLE_PMD_FOLDED) > #endif > > +/* > + * p?d_large() - true if this entry is a final mapping to a physical address. It might make sense to s/final/leaf/, but otherwise that's a great definition! > + * This differs from p?d_huge() by the fact that they are always available (if > + * the architecture supports large pages at the appropriate level) even > + * if CONFIG_HUGETLB_PAGE is not defined. I'm not sure if we need this part, since we don't mention p?d_trans_huge(), etc, but either way: Acked-by: Mark Rutland <mark.rutland@xxxxxxx> Thanks, Mark. > + */ > +#ifndef pgd_large > +#define pgd_large(x) 0 > +#endif > +#ifndef p4d_large > +#define p4d_large(x) 0 > +#endif > +#ifndef pud_large > +#define pud_large(x) 0 > +#endif > +#ifndef pmd_large > +#define pmd_large(x) 0 > +#endif > + > #endif /* _ASM_GENERIC_PGTABLE_H */ > -- > 2.20.1 >