On Wed, Aug 01, 2018 at 08:13:26PM +0900, Yoshinori Sato wrote: > I have not tested enough to impose mm on my part, so it may be > by chance this too. > Restore the constructor and modify it so that __ GFP_ZERO is not specified. > Because then I think that it is safer because it is exactly the same as > before the fix. I wish you had cc'd me on patch v2. I think the answer is actually this (which restoers the pre-2009 behaviour): diff --git a/arch/sh/mm/pgtable.c b/arch/sh/mm/pgtable.c index 5c8f9247c3c2..7c63aa359c7d 100644 --- a/arch/sh/mm/pgtable.c +++ b/arch/sh/mm/pgtable.c @@ -2,7 +2,7 @@ #include <linux/mm.h> #include <linux/slab.h> -#define PGALLOC_GFP GFP_KERNEL | __GFP_ZERO +#define PGALLOC_GFP GFP_KERNEL static struct kmem_cache *pgd_cachep; #if PAGETABLE_LEVELS > 2 @@ -13,6 +13,7 @@ void pgd_ctor(void *x) { pgd_t *pgd = x; + memset(pgd, 0, USER_PTRS_PER_PGD * sizeof(pgd_t)); memcpy(pgd + USER_PTRS_PER_PGD, swapper_pg_dir + USER_PTRS_PER_PGD, (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); but I haven't even compiled it.