# git rev-parse -q --verify daebe06ec4af252eba275f602a08086bc2bca5dc^{commit} daebe06ec4af252eba275f602a08086bc2bca5dc already have revision, skipping fetch # git checkout -q -f -B kisskb daebe06ec4af252eba275f602a08086bc2bca5dc # git clean -qxdf # < git log -1 # commit daebe06ec4af252eba275f602a08086bc2bca5dc # Author: Shilpasri G Bhat # Date: Wed Apr 25 16:29:31 2018 +0530 # # cpufreq: powernv: Fix the hardlockup by synchronus smp_call in timer interrupt # # gpstate_timer_handler() uses synchronous smp_call to set the pstate # on the requested core. This causes the below hard lockup: # # smp_call_function_single+0x110/0x180 (unreliable) # smp_call_function_any+0x180/0x250 # gpstate_timer_handler+0x1e8/0x580 # call_timer_fn+0x50/0x1c0 # expire_timers+0x138/0x1f0 # run_timer_softirq+0x1e8/0x270 # __do_softirq+0x158/0x3e4 # irq_exit+0xe8/0x120 # timer_interrupt+0x9c/0xe0 # decrementer_common+0x114/0x120 # -- interrupt: 901 at doorbell_global_ipi+0x34/0x50 # LR = arch_send_call_function_ipi_mask+0x120/0x130 # arch_send_call_function_ipi_mask+0x4c/0x130 # smp_call_function_many+0x340/0x450 # pmdp_invalidate+0x98/0xe0 # change_huge_pmd+0xe0/0x270 # change_protection_range+0xb88/0xe40 # mprotect_fixup+0x140/0x340 # SyS_mprotect+0x1b4/0x350 # system_call+0x58/0x6c # # One way to avoid this is removing the smp-call. We can ensure that the # timer always runs on one of the policy-cpus. If the timer gets # migrated to a cpu outside the policy then re-queue it back on the # policy->cpus. This way we can get rid of the smp-call which was being # used to set the pstate on the policy->cpus. # # Fixes: 7bc54b652f13 ("timers, cpufreq/powernv: Initialize the gpstate timer as pinned") # Cc: stable@vger.kernel.org # v4.8+ # Reported-by: Nicholas Piggin # Reported-by: Pridhiviraj Paidipeddi # Signed-off-by: Shilpasri G Bhat # Acked-by: Nicholas Piggin # Acked-by: Viresh Kumar # Acked-by: Vaidyanathan Srinivasan # Signed-off-by: Michael Ellerman # < /opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc --version # < git log --format=%s --max-count=1 daebe06ec4af252eba275f602a08086bc2bca5dc # < make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-fixes_powerpc-allmodconfig_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- allmodconfig # Added to kconfig CONFIG_BUILD_DOCSRC=n # Added to kconfig CONFIG_MODULE_SIG=n # Added to kconfig CONFIG_SAMPLES=n # yes \n | make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-fixes_powerpc-allmodconfig_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- oldconfig yes: standard output: Broken pipe yes: write error # make -s -j 48 ARCH=powerpc O=/kisskb/build/powerpc-fixes_powerpc-allmodconfig_powerpc-5.3 CROSS_COMPILE=/opt/cross/kisskb/gcc-5.3.0-nolibc/powerpc64-linux/bin/powerpc64-linux- /kisskb/src/sound/aoa/codecs/onyx.c: In function 'onyx_snd_single_bit_get': /kisskb/src/sound/aoa/codecs/onyx.c:380:37: warning: 'c' may be used uninitialized in this function [-Wmaybe-uninitialized] ucontrol->value.integer.value[0] = !!(c & mask) ^ polarity; ^ In file included from /kisskb/src/include/linux/io.h:25:0, from /kisskb/src/include/linux/of_address.h:7, from /kisskb/src/drivers/ata/ahci_qoriq.c:18: /kisskb/src/drivers/ata/ahci_qoriq.c: In function 'ahci_qoriq_hardreset': /kisskb/src/arch/powerpc/include/asm/io.h:623:3: warning: 'px_is' may be used uninitialized in this function [-Wmaybe-uninitialized] ppc_pci_io.name al; \ ^ /kisskb/src/drivers/ata/ahci_qoriq.c:86:14: note: 'px_is' was declared here u32 px_cmd, px_is, px_val; ^ In file included from /kisskb/src/include/linux/io.h:25:0, from /kisskb/src/include/linux/of_address.h:7, from /kisskb/src/drivers/ata/ahci_qoriq.c:18: /kisskb/src/arch/powerpc/include/asm/io.h:142:2: warning: 'px_cmd' may be used uninitialized in this function [-Wmaybe-uninitialized] __asm__ __volatile__("sync;"#insn" %1,%y0" \ ^ /kisskb/src/drivers/ata/ahci_qoriq.c:86:6: note: 'px_cmd' was declared here u32 px_cmd, px_is, px_val; ^ WARNING: vmlinux.o(.text+0x37830c): Section mismatch in reference from the function .devm_memremap_pages() to the function .meminit.text:.arch_add_memory() The function .devm_memremap_pages() references the function __meminit .arch_add_memory(). This is often because .devm_memremap_pages lacks a __meminit annotation or the annotation of .arch_add_memory is wrong. WARNING: vmlinux.o(.text+0x378bf8): Section mismatch in reference from the function .devm_memremap_pages_release() to the function .meminit.text:.arch_remove_memory() The function .devm_memremap_pages_release() references the function __meminit .arch_remove_memory(). This is often because .devm_memremap_pages_release lacks a __meminit annotation or the annotation of .arch_remove_memory is wrong. WARNING: vmlinux.o(.text+0x4acefc): Section mismatch in reference from the function .hmm_devmem_release() to the function .meminit.text:.arch_remove_memory() The function .hmm_devmem_release() references the function __meminit .arch_remove_memory(). This is often because .hmm_devmem_release lacks a __meminit annotation or the annotation of .arch_remove_memory is wrong. WARNING: vmlinux.o(.text+0x4ad260): Section mismatch in reference from the function .hmm_devmem_pages_create() to the function .meminit.text:.arch_add_memory() The function .hmm_devmem_pages_create() references the function __meminit .arch_add_memory(). This is often because .hmm_devmem_pages_create lacks a __meminit annotation or the annotation of .arch_add_memory is wrong. Completed OK # rm -rf /kisskb/build/powerpc-fixes_powerpc-allmodconfig_powerpc-5.3 # Build took: 0:13:19.249280