# git rev-parse -q --verify e432fe97f3e5de325b40021e505cce53877586c5^{commit} # git fetch -q -n -f git://gitlab.ozlabs.ibm.com/linuxppc/linux.git next-test warning: The last gc run reported the following. Please correct the root cause and remove .git/gc.log. Automatic cleanup will not be performed until the file is removed. warning: There are too many unreachable loose objects; run 'git prune' to remove them. # git rev-parse -q --verify e432fe97f3e5de325b40021e505cce53877586c5^{commit} e432fe97f3e5de325b40021e505cce53877586c5 # git checkout -q -f -B kisskb e432fe97f3e5de325b40021e505cce53877586c5 # git clean -qxdf # < git log -1 # commit e432fe97f3e5de325b40021e505cce53877586c5 # Author: Michael Ellerman # Date: Fri Aug 27 22:51:06 2021 +1000 # # powerpc/bug: Cast to unsigned long before passing to inline asm # # In commit 1e688dd2a3d6 ("powerpc/bug: Provide better flexibility to # WARN_ON/__WARN_FLAGS() with asm goto") we changed WARN_ON(). Previously # it would take the warning condition, x, and double negate it before # converting the result to int, and passing that int to the underlying # inline asm. ie: # # #define WARN_ON(x) ({ # int __ret_warn_on = !!(x); # if (__builtin_constant_p(__ret_warn_on)) { # ... # } else { # BUG_ENTRY(PPC_TLNEI " %4, 0", # BUGFLAG_WARNING | BUGFLAG_TAINT(TAINT_WARN), # "r" (__ret_warn_on)); # # The asm then does a full register width comparison with zero and traps # if it is non-zero (PPC_TLNEI). # # The new code instead passes the full expression, x, with some arbitrary # type, to the inline asm: # # #define WARN_ON(x) ({ # ... # do { # if (__builtin_constant_p((x))) { # ... # } else { # ... # WARN_ENTRY(PPC_TLNEI " %4, 0", # BUGFLAG_WARNING | BUGFLAG_TAINT(TAINT_WARN), # __label_warn_on, "r" (x)); # # As reported[1] by Nathan, when building with clang this can cause # spurious warnings to fire repeatedly at boot: # # WARNING: CPU: 0 PID: 1 at lib/klist.c:62 .klist_add_tail+0x3c/0x110 # Modules linked in: # CPU: 0 PID: 1 Comm: swapper/0 Tainted: G W 5.14.0-rc7-next-20210825 #1 # NIP: c0000000007ff81c LR: c00000000090a038 CTR: 0000000000000000 # REGS: c0000000073c32a0 TRAP: 0700 Tainted: G W (5.14.0-rc7-next-20210825) # MSR: 8000000002029032 CR: 22000a40 XER: 00000000 # CFAR: c00000000090a034 IRQMASK: 0 # GPR00: c00000000090a038 c0000000073c3540 c000000001be3200 0000000000000001 # GPR04: c0000000072d65c0 0000000000000000 c0000000091ba798 c0000000091bb0a0 # GPR08: 0000000000000001 0000000000000000 c000000008581918 fffffffffffffc00 # GPR12: 0000000044000240 c000000001dd0000 c000000000012300 0000000000000000 # GPR16: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 # GPR20: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 # GPR24: 0000000000000000 c0000000017e3200 0000000000000000 c000000001a0e778 # GPR28: c0000000072d65b0 c0000000072d65a8 c000000007de72c8 c0000000073c35d0 # NIP .klist_add_tail+0x3c/0x110 # LR .bus_add_driver+0x148/0x290 # Call Trace: # 0xc0000000073c35d0 (unreliable) # .bus_add_driver+0x148/0x290 # .driver_register+0xb8/0x190 # .__hid_register_driver+0x70/0xd0 # .redragon_driver_init+0x34/0x58 # .do_one_initcall+0x130/0x3b0 # .do_initcall_level+0xd8/0x188 # .do_initcalls+0x7c/0xdc # .kernel_init_freeable+0x178/0x21c # .kernel_init+0x34/0x220 # .ret_from_kernel_thread+0x58/0x60 # Instruction dump: # fba10078 7c7d1b78 38600001 fb810070 3b9d0008 fbc10080 7c9e2378 389d0018 # fb9d0008 fb9d0010 90640000 fbdd0000 <0b1e0000> e87e0018 28230000 41820024 # # The instruction dump shows that we are trapping because r30 is not zero: # tdnei r30,0 # # Where r30 = c000000007de72c8 # # The WARN_ON() comes from: # # static void knode_set_klist(struct klist_node *knode, struct klist *klist) # { # knode->n_klist = klist; # /* no knode deserves to start its life dead */ # WARN_ON(knode_dead(knode)); # ^^^^^^^^^^^^^^^^^ # # Where: # # #define KNODE_DEAD 1LU # # static bool knode_dead(struct klist_node *knode) # { # return (unsigned long)knode->n_klist & KNODE_DEAD; # } # # The full disassembly shows that clang has not generated any code to # apply the "& KNODE_DEAD" to the n_klist pointer, which is surprising. # # Nathan filed an LLVM bug [2], in which Eli Friedman explained that clang # believes it is only passing a single bit to the asm (ie. a bool) and so # the mask of bit 0 with 1 can be omitted, and suggested that if we want # the full 64-bit value passed to the inline asm we should cast to a # 64-bit type (or 32-bit on 32-bits). # # In fact we already do that for BUG_ENTRY(), which was added to fix a # possibly similar bug in 2005 in commit 32818c2eb6b8 ("[PATCH] ppc64: Fix # issue with gcc 4.0 compiled kernels"). # # So cast the value we pass to the inline asm to long. # # For GCC this appears to have no effect on code generation, other than # causing sign extension in some cases. # # [1]: http://lore.kernel.org/r/YSa1O4fcX1nNKqN/@Ryzen-9-3900X.localdomain # [2]: https://bugs.llvm.org/show_bug.cgi?id=51634 # # Fixes: 1e688dd2a3d6 ("powerpc/bug: Provide better flexibility to WARN_ON/__WARN_FLAGS() with asm goto") # Reported-by: Nathan Chancellor # Reviewed-by: Nathan Chancellor # Tested-by: Nathan Chancellor # Signed-off-by: Michael Ellerman # Link: https://lore.kernel.org/r/20210901112522.1085134-1-mpe@ellerman.id.au # < /opt/cross/kisskb/korg/gcc-4.9.4-nolibc/powerpc64-linux/bin/powerpc64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-4.9.4-nolibc/powerpc64-linux/bin/powerpc64-linux-ld --version # < git log --format=%s --max-count=1 e432fe97f3e5de325b40021e505cce53877586c5 # < make -s -j 32 ARCH=powerpc O=/kisskb/build/powerpc-next-rand_powerpc-randconfig_powerpc-gcc4.9 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-4.9.4-nolibc/powerpc64-linux/bin/powerpc64-linux- randconfig # 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 CONFIG_TRIM_UNUSED_KSYMS=n # Added to kconfig CONFIG_UBSAN=n # < make -s -j 32 ARCH=powerpc O=/kisskb/build/powerpc-next-rand_powerpc-randconfig_powerpc-gcc4.9 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-4.9.4-nolibc/powerpc64-linux/bin/powerpc64-linux- help # make -s -j 32 ARCH=powerpc O=/kisskb/build/powerpc-next-rand_powerpc-randconfig_powerpc-gcc4.9 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-4.9.4-nolibc/powerpc64-linux/bin/powerpc64-linux- olddefconfig .config:5101:warning: override: reassigning to symbol STANDALONE .config:5103:warning: override: reassigning to symbol MODULE_SIG .config:5105:warning: override: reassigning to symbol PPC64 .config:5108:warning: override: reassigning to symbol PREVENT_FIRMWARE_BUILD .config:5112:warning: override: reassigning to symbol TRIM_UNUSED_KSYMS # make -s -j 32 ARCH=powerpc O=/kisskb/build/powerpc-next-rand_powerpc-randconfig_powerpc-gcc4.9 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-4.9.4-nolibc/powerpc64-linux/bin/powerpc64-linux- /kisskb/src/drivers/clk/xilinx/xlnx_vcu.c: In function 'xvcu_register_clock_provider': /kisskb/src/drivers/clk/xilinx/xlnx_vcu.c:524:9: warning: missing braces around initializer [-Wmissing-braces] struct clk_parent_data parent_data[2] = { 0 }; ^ /kisskb/src/drivers/clk/xilinx/xlnx_vcu.c:524:9: warning: (near initialization for 'parent_data[0]') [-Wmissing-braces] /kisskb/src/drivers/cxl/core.c: In function 'cxl_probe_component_regs': /kisskb/src/drivers/cxl/core.c:567:17: warning: missing braces around initializer [-Wmissing-braces] *map = (struct cxl_component_reg_map) { 0 }; ^ /kisskb/src/drivers/cxl/core.c:567:17: warning: (near initialization for '(anonymous).hdm_decoder') [-Wmissing-braces] /kisskb/src/drivers/cxl/core.c: In function 'cxl_probe_device_regs': /kisskb/src/drivers/cxl/core.c:831:17: warning: missing braces around initializer [-Wmissing-braces] *map = (struct cxl_device_reg_map){ 0 }; ^ /kisskb/src/drivers/cxl/core.c:831:17: warning: (near initialization for '(anonymous).status') [-Wmissing-braces] /kisskb/src/drivers/macintosh/via-pmu.c:860:12: warning: 'pmu_info_proc_show' defined but not used [-Wunused-function] static int pmu_info_proc_show(struct seq_file *m, void *v) ^ /kisskb/src/drivers/macintosh/via-pmu.c:871:12: warning: 'pmu_irqstats_proc_show' defined but not used [-Wunused-function] static int pmu_irqstats_proc_show(struct seq_file *m, void *v) ^ /kisskb/src/drivers/macintosh/via-pmu.c:897:12: warning: 'pmu_battery_proc_show' defined but not used [-Wunused-function] static int pmu_battery_proc_show(struct seq_file *m, void *v) ^ /kisskb/src/fs/btrfs/tree-checker.c: In function 'check_root_item': /kisskb/src/fs/btrfs/tree-checker.c:1071:9: warning: missing braces around initializer [-Wmissing-braces] struct btrfs_root_item ri = { 0 }; ^ /kisskb/src/fs/btrfs/tree-checker.c:1071:9: warning: (near initialization for 'ri.inode') [-Wmissing-braces] drivers/macintosh/via-pmu-event.o: In function `.via_pmu_event': via-pmu-event.c:(.text+0x80): undefined reference to `.input_event' via-pmu-event.c:(.text+0xa8): undefined reference to `.input_event' via-pmu-event.c:(.text+0x108): undefined reference to `.input_event' drivers/macintosh/via-pmu-event.o: In function `.via_pmu_event_init': via-pmu-event.c:(.init.text+0x64): undefined reference to `.input_allocate_device' via-pmu-event.c:(.init.text+0x168): undefined reference to `.input_register_device' via-pmu-event.c:(.init.text+0x194): undefined reference to `.input_free_device' make[1]: *** [/kisskb/src/Makefile:1177: vmlinux] Error 1 make: *** [Makefile:220: __sub-make] Error 2 Command 'make -s -j 32 ARCH=powerpc O=/kisskb/build/powerpc-next-rand_powerpc-randconfig_powerpc-gcc4.9 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-4.9.4-nolibc/powerpc64-linux/bin/powerpc64-linux- ' returned non-zero exit status 2 # rm -rf /kisskb/build/powerpc-next-rand_powerpc-randconfig_powerpc-gcc4.9 # Build took: 0:01:46.896722