# git rev-parse -q --verify 2d4f9bdc22740d10984b850bdd74a86ad8ed3d23^{commit} 2d4f9bdc22740d10984b850bdd74a86ad8ed3d23 already have revision, skipping fetch # git checkout -q -f -B kisskb 2d4f9bdc22740d10984b850bdd74a86ad8ed3d23 # git clean -qxdf # < git log -1 # commit 2d4f9bdc22740d10984b850bdd74a86ad8ed3d23 # Author: Michael Ellerman # Date: Tue May 14 23:00:58 2019 +1000 # # powerpc/mm: Fix crashes with hugepages & 4K pages # # The recent commit to cleanup ifdefs in the hugepage initialisation led # to crashes when using 4K pages as reported by Sachin: # # BUG: Kernel NULL pointer dereference at 0x0000001c # Faulting instruction address: 0xc000000001d1e58c # Oops: Kernel access of bad area, sig: 11 [#1] # LE PAGE_SIZE=4K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries # ... # CPU: 3 PID: 4635 Comm: futex_wake04 Tainted: G W O 5.1.0-next-20190507-autotest #1 # NIP: c000000001d1e58c LR: c000000001d1e54c CTR: 0000000000000000 # REGS: c000000004937890 TRAP: 0300 # MSR: 8000000000009033 CR: 22424822 XER: 00000000 # CFAR: c00000000183e9e0 DAR: 000000000000001c DSISR: 40000000 IRQMASK: 0 # ... # NIP kmem_cache_alloc+0xbc/0x5a0 # LR kmem_cache_alloc+0x7c/0x5a0 # Call Trace: # huge_pte_alloc+0x580/0x950 # hugetlb_fault+0x9a0/0x1250 # handle_mm_fault+0x490/0x4a0 # __do_page_fault+0x77c/0x1f00 # do_page_fault+0x28/0x50 # handle_page_fault+0x18/0x38 # # This is caused by us trying to allocate from a NULL kmem cache in # __hugepte_alloc(). The kmem cache is NULL because it was never # allocated in hugetlbpage_init(), because add_huge_page_size() returned # an error. # # The reason add_huge_page_size() returned an error is a simple typo, we # are calling check_and_get_huge_psize(size) when we should be passing # shift instead. # # The fact that we're able to trigger this path when the kmem caches are # NULL is a separate bug, ie. we should not advertise any hugepage sizes # if we haven't setup the required caches for them. # # This was only seen with 4K pages, with 64K pages we don't need to # allocate any extra kmem caches because the 16M hugepage just occupies # a single entry at the PMD level. # # Fixes: 723f268f19da ("powerpc/mm: cleanup ifdef mess in add_huge_page_size()") # Reported-by: Sachin Sant # Tested-by: Sachin Sant # Signed-off-by: Michael Ellerman # < /opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux-ld --version # < git log --format=%s --max-count=1 2d4f9bdc22740d10984b850bdd74a86ad8ed3d23 # < make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-fixes_powerpc-randconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- randconfig KCONFIG_SEED=0x580396C0 # Added to kconfig CONFIG_STANDALONE=y # Added to kconfig CONFIG_BUILD_DOCSRC=n # Added to kconfig CONFIG_MODULE_SIG=n # Added to kconfig CONFIG_CPU_BIG_ENDIAN=y # Added to kconfig CONFIG_PPC64=y # Added to kconfig CONFIG_PPC_DISABLE_WERROR=y # Added to kconfig CONFIG_SECTION_MISMATCH_WARN_ONLY=y # Added to kconfig CONFIG_PREVENT_FIRMWARE_BUILD=y # Added to kconfig CONFIG_CC_STACKPROTECTOR_STRONG=n # Added to kconfig CONFIG_GCC_PLUGINS=n # Added to kconfig CONFIG_LD_HEAD_STUB_CATCH=y # Added to kconfig # yes \n | make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-fixes_powerpc-randconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- oldconfig yes: standard output: Broken pipe # make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-fixes_powerpc-randconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- :1388:2: warning: #warning syscall open_tree not implemented [-Wcpp] :1391:2: warning: #warning syscall move_mount not implemented [-Wcpp] :1394:2: warning: #warning syscall fsopen not implemented [-Wcpp] :1397:2: warning: #warning syscall fsconfig not implemented [-Wcpp] :1400:2: warning: #warning syscall fsmount not implemented [-Wcpp] :1403:2: warning: #warning syscall fspick not implemented [-Wcpp] /kisskb/src/arch/powerpc/mm/book3s64/radix_tlb.c:670:0: warning: "radix__flush_all_mm" redefined #define radix__flush_all_mm radix__local_flush_all_mm ^ In file included from /kisskb/src/arch/powerpc/include/asm/book3s/64/radix.h:18:0, from /kisskb/src/arch/powerpc/include/asm/book3s/64/pgtable.h:291, from /kisskb/src/arch/powerpc/include/asm/book3s/64/mmu-hash.h:24, from /kisskb/src/arch/powerpc/include/asm/book3s/64/mmu.h:46, from /kisskb/src/arch/powerpc/include/asm/mmu.h:356, from /kisskb/src/arch/powerpc/include/asm/lppaca.h:36, from /kisskb/src/arch/powerpc/include/asm/paca.h:21, from /kisskb/src/arch/powerpc/include/asm/current.h:16, from /kisskb/src/include/linux/thread_info.h:21, from /kisskb/src/include/asm-generic/preempt.h:5, from ./arch/powerpc/include/generated/asm/preempt.h:1, from /kisskb/src/include/linux/preempt.h:78, from /kisskb/src/include/linux/spinlock.h:51, from /kisskb/src/include/linux/mmzone.h:8, from /kisskb/src/include/linux/gfp.h:6, from /kisskb/src/include/linux/mm.h:10, from /kisskb/src/arch/powerpc/mm/book3s64/radix_tlb.c:12: /kisskb/src/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h:68:0: note: this is the location of the previous definition #define radix__flush_all_mm(mm) radix__local_flush_all_mm(mm) ^ /kisskb/src/arch/powerpc/mm/book3s64/radix_tlb.c: In function '__radix__flush_tlb_range': /kisskb/src/arch/powerpc/mm/book3s64/radix_tlb.c:713:5: error: implicit declaration of function 'exit_flush_lazy_tlbs' [-Werror=implicit-function-declaration] exit_flush_lazy_tlbs(mm); ^ /kisskb/src/arch/powerpc/mm/book3s64/radix_tlb.c: In function 'radix__tlb_flush': /kisskb/src/arch/powerpc/mm/book3s64/radix_tlb.c:883:3: error: implicit declaration of function '__flush_all_mm' [-Werror=implicit-function-declaration] __flush_all_mm(mm, true); ^ cc1: some warnings being treated as errors make[4]: *** [/kisskb/src/scripts/Makefile.build:278: arch/powerpc/mm/book3s64/radix_tlb.o] Error 1 make[3]: *** [/kisskb/src/scripts/Makefile.build:489: arch/powerpc/mm/book3s64] Error 2 make[3]: *** Waiting for unfinished jobs.... make[2]: *** [/kisskb/src/scripts/Makefile.build:489: arch/powerpc/mm] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [/kisskb/src/Makefile:1073: arch/powerpc] Error 2 make[1]: *** Waiting for unfinished jobs.... /kisskb/src/drivers/hwtracing/intel_th/msu.c: In function 'msc_buffer_win_alloc': /kisskb/src/drivers/hwtracing/intel_th/msu.c:783:21: warning: unused variable 'i' [-Wunused-variable] int ret = -ENOMEM, i; ^ /kisskb/src/drivers/hwtracing/intel_th/msu.c: In function 'msc_buffer_win_free': /kisskb/src/drivers/hwtracing/intel_th/msu.c:863:6: warning: unused variable 'i' [-Wunused-variable] int i; ^ make: *** [Makefile:179: sub-make] Error 2 Command 'make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-fixes_powerpc-randconfig_powerpc-gcc5 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-5.5.0-nolibc/powerpc64-linux/bin/powerpc64-linux- ' returned non-zero exit status 2 # rm -rf /kisskb/build/powerpc-fixes_powerpc-randconfig_powerpc-gcc5 # Build took: 0:02:49.277764