Messages in this thread | | | Date | Tue, 3 Jul 2018 14:44:18 -0700 | From | "Paul E. McKenney" <> | Subject | Re: WARN_ON_ONCE() in process_one_work()? |
| |
On Tue, Jul 03, 2018 at 01:12:05PM -0700, Tejun Heo wrote: > Hello, Paul. > > On Tue, Jul 03, 2018 at 09:40:44AM -0700, Paul E. McKenney wrote: > > > I will apply this, but be advised that I have not seen that WARN_ON_ONCE() > > > trigger since. :-/ > > > > But I get a build error: > > > > kernel/workqueue.o: In function `worker_attach_to_pool': > > workqueue.c:(.text+0x63c): undefined reference to `cpuhp_target_state' > > workqueue.c:(.text+0x647): undefined reference to `cpuhp_current_state' > > /home/paulmck/public_git/linux-rcu/Makefile:1015: recipe for target 'vmlinux' failed > > > > My guess is that the worker_attach_to_pool() code needs to change so > > as to invoke cpuhp_current_state() and cpuhp_target_state() only in > > CONFIG_HOTPLUG_CPU=y kernels, but I figured I should defer to you. > > Just to clarify, the bug happened on a kernel with cpuhp enabled, > right?
It seems to be a bit more complicated than that, despite my initial confidence that I knew what was going on. The build failed for these rcutorture scenarios:
SRCU-N: (No idea!)
CONFIG_RCU_TRACE=n CONFIG_SMP=y CONFIG_NR_CPUS=4 CONFIG_HOTPLUG_CPU=y CONFIG_PREEMPT_NONE=y CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=n
SRCU-t: (Expected, CONFIG_SMP=n) SRCU-u: (Expected, CONFIG_SMP=n) TASKS02: (Expected, CONFIG_SMP=n) TASKS03: (Expected, CONFIG_HOTPLUG_CPU=n) TINY01: (Expected, CONFIG_SMP=n) TINY02: (Expected, CONFIG_SMP=n) TREE01: (No idea!)
CONFIG_SMP=y CONFIG_PREEMPT_NONE=n CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=y CONFIG_HZ_PERIODIC=n CONFIG_NO_HZ_IDLE=y CONFIG_NO_HZ_FULL=n CONFIG_RCU_FAST_NO_HZ=y CONFIG_RCU_TRACE=y CONFIG_HOTPLUG_CPU=y CONFIG_MAXSMP=y CONFIG_CPUMASK_OFFSTACK=y CONFIG_RCU_NOCB_CPU=y CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_RCU_BOOST=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=y
TREE02 didn't fail despite having CONFIG_HOTPLUG_CPU=n! TREE03: (Expected, CONFIG_HOTPLUG_CPU=n) TREE04: (Expected, CONFIG_HOTPLUG_CPU=n)
TREE07: (No idea!)
CONFIG_NR_CPUS=16 CONFIG_PREEMPT_NONE=y CONFIG_PREEMPT_VOLUNTARY=n CONFIG_PREEMPT=n CONFIG_HZ_PERIODIC=n CONFIG_NO_HZ_IDLE=n CONFIG_NO_HZ_FULL=y CONFIG_RCU_FAST_NO_HZ=n CONFIG_RCU_TRACE=y CONFIG_HOTPLUG_CPU=y CONFIG_RCU_FANOUT=2 CONFIG_RCU_FANOUT_LEAF=2 CONFIG_DEBUG_LOCK_ALLOC=n CONFIG_DEBUG_OBJECTS_RCU_HEAD=n CONFIG_RCU_EXPERT=y
TREE08: (Expected, CONFIG_HOTPLUG_CPU=n) TREE09: (Expected, CONFIG_SMP=n)
Thoughts?
Thanx, Paul
| |