[frederic-dynticks:rcu/context-tracking-v4 9/20] kernel/softirq.c:610: undefined reference to `ct_irq_enter'

From: kernel test robot
Date: Sat Jun 04 2022 - 17:50:01 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git rcu/context-tracking-v4
head: 77493b1db618c61dec140cbab830832f77203d69
commit: ede17b80373d0c3e886b3b4d9533f6c12cf1e799 [9/20] context_tracking: Take IRQ eqs entrypoints over RCU
config: x86_64-randconfig-a008 (https://download.01.org/0day-ci/archive/20220605/202206050548.DSjyYju7-lkp@xxxxxxxxx/config)
compiler: gcc-11 (Debian 11.3.0-1) 11.3.0
reproduce (this is a W=1 build):
# https://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git/commit/?id=ede17b80373d0c3e886b3b4d9533f6c12cf1e799
git remote add frederic-dynticks https://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
git fetch --no-tags frederic-dynticks rcu/context-tracking-v4
git checkout ede17b80373d0c3e886b3b4d9533f6c12cf1e799
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

vmlinux.o: warning: objtool: pvh_start_xen()+0x0: unreachable instruction
ld: vmlinux.o: in function `irq_enter':
>> kernel/softirq.c:610: undefined reference to `ct_irq_enter'
ld: vmlinux.o: in function `irq_exit':
>> kernel/softirq.c:662: undefined reference to `ct_irq_exit'
ld: vmlinux.o: in function `trace_console_rcuidle':
>> include/trace/events/printk.h:10: undefined reference to `ct_irq_enter_irqson'
>> ld: include/trace/events/printk.h:10: undefined reference to `ct_irq_exit_irqson'
ld: vmlinux.o: in function `bc_set_next':
>> kernel/time/tick-broadcast-hrtimer.c:64: undefined reference to `ct_irq_enter_irqson'
>> ld: kernel/time/tick-broadcast-hrtimer.c:64: undefined reference to `ct_irq_exit_irqson'
ld: vmlinux.o: in function `trace_irq_disable_rcuidle':
>> include/trace/events/preemptirq.h:36: undefined reference to `ct_irq_enter_irqson'
>> ld: include/trace/events/preemptirq.h:36: undefined reference to `ct_irq_exit_irqson'
ld: vmlinux.o: in function `trace_irq_enable_rcuidle':
include/trace/events/preemptirq.h:40: undefined reference to `ct_irq_enter_irqson'
ld: include/trace/events/preemptirq.h:40: undefined reference to `ct_irq_exit_irqson'
ld: vmlinux.o: in function `trace_clk_disable_rcuidle':
>> include/trace/events/clk.h:46: undefined reference to `ct_irq_enter_irqson'
>> ld: include/trace/events/clk.h:46: undefined reference to `ct_irq_exit_irqson'
ld: vmlinux.o: in function `trace_clk_disable_complete_rcuidle':
include/trace/events/clk.h:53: undefined reference to `ct_irq_enter_irqson'
ld: include/trace/events/clk.h:53: undefined reference to `ct_irq_exit_irqson'
ld: vmlinux.o: in function `trace_clk_enable_rcuidle':
include/trace/events/clk.h:32: undefined reference to `ct_irq_enter_irqson'
ld: include/trace/events/clk.h:32: undefined reference to `ct_irq_exit_irqson'
ld: vmlinux.o: in function `trace_clk_enable_complete_rcuidle':
include/trace/events/clk.h:39: undefined reference to `ct_irq_enter_irqson'
ld: include/trace/events/clk.h:39: undefined reference to `ct_irq_exit_irqson'
ld: vmlinux.o: in function `irqentry_exit':
>> kernel/entry/common.c:421: undefined reference to `ct_irq_exit'
>> ld: kernel/entry/common.c:439: undefined reference to `ct_irq_exit'


vim +610 kernel/softirq.c

604
605 /**
606 * irq_enter - Enter an interrupt context including RCU update
607 */
608 void irq_enter(void)
609 {
> 610 ct_irq_enter();
611 irq_enter_rcu();
612 }
613
614 static inline void tick_irq_exit(void)
615 {
616 #ifdef CONFIG_NO_HZ_COMMON
617 int cpu = smp_processor_id();
618
619 /* Make sure that timer wheel updates are propagated */
620 if ((idle_cpu(cpu) && !need_resched()) || tick_nohz_full_cpu(cpu)) {
621 if (!in_hardirq())
622 tick_nohz_irq_exit();
623 }
624 #endif
625 }
626
627 static inline void __irq_exit_rcu(void)
628 {
629 #ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED
630 local_irq_disable();
631 #else
632 lockdep_assert_irqs_disabled();
633 #endif
634 account_hardirq_exit(current);
635 preempt_count_sub(HARDIRQ_OFFSET);
636 if (!in_interrupt() && local_softirq_pending())
637 invoke_softirq();
638
639 tick_irq_exit();
640 }
641
642 /**
643 * irq_exit_rcu() - Exit an interrupt context without updating RCU
644 *
645 * Also processes softirqs if needed and possible.
646 */
647 void irq_exit_rcu(void)
648 {
649 __irq_exit_rcu();
650 /* must be last! */
651 lockdep_hardirq_exit();
652 }
653
654 /**
655 * irq_exit - Exit an interrupt context, update RCU and lockdep
656 *
657 * Also processes softirqs if needed and possible.
658 */
659 void irq_exit(void)
660 {
661 __irq_exit_rcu();
> 662 ct_irq_exit();
663 /* must be last! */
664 lockdep_hardirq_exit();
665 }
666

--
0-DAY CI Kernel Test Service
https://01.org/lkp