On Mon 06-03-17 23:45:13, Kirill A. Shutemov wrote: > Convert all non-architecture-specific code to 5-level paging. > > It's mostly mechanical adding handling one more page table level in > places where we deal with pud_t. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> OK, I haven't spotted anything major. I am just scratching my head about the __ARCH_HAS_5LEVEL_HACK leak into kasan_init.c (see below). Why do we need it? It looks more than ugly but I am not familiar with kasan so maybe this is really necessary. Other than that free to to add Acked-by: Michal Hocko <mhocko@xxxxxxxx> The rest of the series look good (as good as all the pte hackery can get ;)) as well. [...] > diff --git a/mm/kasan/kasan_init.c b/mm/kasan/kasan_init.c > index 31238dad85fb..7870ad44ee20 100644 > --- a/mm/kasan/kasan_init.c > +++ b/mm/kasan/kasan_init.c > @@ -30,6 +30,9 @@ > */ > unsigned char kasan_zero_page[PAGE_SIZE] __page_aligned_bss; > > +#if CONFIG_PGTABLE_LEVELS > 4 > +p4d_t kasan_zero_p4d[PTRS_PER_P4D] __page_aligned_bss; > +#endif > #if CONFIG_PGTABLE_LEVELS > 3 > pud_t kasan_zero_pud[PTRS_PER_PUD] __page_aligned_bss; > #endif [...] > @@ -136,8 +157,12 @@ void __init kasan_populate_zero_shadow(const void *shadow_start, > * puds,pmds, so pgd_populate(), pud_populate() > * is noops. > */ > - pgd_populate(&init_mm, pgd, lm_alias(kasan_zero_pud)); > - pud = pud_offset(pgd, addr); > +#ifndef __ARCH_HAS_5LEVEL_HACK > + pgd_populate(&init_mm, pgd, lm_alias(kasan_zero_p4d)); > +#endif > + p4d = p4d_offset(pgd, addr); > + p4d_populate(&init_mm, p4d, lm_alias(kasan_zero_pud)); > + pud = pud_offset(p4d, addr); > pud_populate(&init_mm, pud, lm_alias(kasan_zero_pmd)); > pmd = pmd_offset(pud, addr); > pmd_populate_kernel(&init_mm, pmd, lm_alias(kasan_zero_pte)); -- Michal Hocko SUSE Labs