Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

lkdtm/bugs: Do not confuse the clang/objtool with busy wait loop

Since commit eb972eab0794 ("lkdtm/bugs: Add cases for BUG and PANIC
occurring in hardirq context"), building with clang for x86_64 results
in the following warnings:

vmlinux.o: warning: objtool: lkdtm_PANIC_IN_HARDIRQ(): unexpected end of section .text.lkdtm_PANIC_IN_HARDIRQ
vmlinux.o: warning: objtool: lkdtm_BUG_IN_HARDIRQ(): unexpected end of section .text.lkdtm_BUG_IN_HARDIRQ

caused by busy "while (wait_for_...);" loops. Add READ_ONCE() and
cpu_relax() to better indicate the intention and avoid any unwanted
compiler optimisations.

Fixes: eb972eab0794 ("lkdtm/bugs: Add cases for BUG and PANIC occurring in hardirq context")
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202512190111.jxFSqxUH-lkp@intel.com/
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>

+4 -4
+4 -4
drivers/misc/lkdtm/bugs.c
··· 120 120 CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); 121 121 hrtimer_start(&timer, us_to_ktime(100), HRTIMER_MODE_REL_HARD); 122 122 123 - while (wait_for_panic) 124 - ; 123 + while (READ_ONCE(wait_for_panic)) 124 + cpu_relax(); 125 125 126 126 hrtimer_cancel(&timer); 127 127 } ··· 150 150 CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); 151 151 hrtimer_start(&timer, us_to_ktime(100), HRTIMER_MODE_REL_HARD); 152 152 153 - while (wait_for_bug) 154 - ; 153 + while (READ_ONCE(wait_for_bug)) 154 + cpu_relax(); 155 155 156 156 hrtimer_cancel(&timer); 157 157 }