Hi, On Thu, Mar 17, 2022 at 8:48 PM Hyeonggon Yoo <42.hyeyoo@xxxxxxxxx> wrote: > > Hello RCU folks, > > I like to use minimal configuration for kernel development. > when building with tinyconfig + CONFIG_PREEMPT=y on arm64: I invoke cross compiler to reproduce the bug on my X86 machine $make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=aarch64-linux-gnu-gcc-10 tinyconfig let CONFIG_PREEMPT=y in .config $make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CC=aarch64-linux-gnu-gcc-10 -j 16 LD vmlinux aarch64-linux-gnu-ld: kernel/rcu/update.o: in function `call_rcu_tasks': update.c:(.text+0xb30): undefined reference to `irq_work_queue' update.c:(.text+0xb30): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue' > > ld: kernel/rcu/update.o: in function `call_rcu_tasks': > update.c:(.text+0xb2c): undefined reference to `irq_work_queue' > update.c:(.text+0xb2c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `irq_work_queue' > make: *** [Makefile:1155: vmlinux] Error 1 > > It seems RCU calls irq_work_queue() without checking if CONFIG_IRQ_WORK is enabled. > > -- > Thank you, You are awesome! > Hyeonggon :-) Meanwhile, there is no error for doing the same to build X86 kernel. I think the reason is: arch/x86/Kconfig select PERF_EVENT and PERF_EVENT select IRQ_WORK Hope my little research could provide some clues to solve the problem ;-) You are welcome Cheers Zhouyi