Re: WARN_ON_ONCE() in process_one_work()?

From: Paul E. McKenney
Date: Tue Jul 03 2018 - 12:38:41 EST


On Mon, Jul 02, 2018 at 09:05:18PM -0700, Paul E. McKenney wrote:
> On Mon, Jul 02, 2018 at 02:05:40PM -0700, Tejun Heo wrote:
> > Hello, Paul.
> >
> > Sorry about the late reply.
> >
> > On Wed, Jun 20, 2018 at 12:29:01PM -0700, Paul E. McKenney wrote:
> > > I have hit this WARN_ON_ONCE() in process_one_work:
> > >
> > > WARN_ON_ONCE(!(pool->flags & POOL_DISASSOCIATED) &&
> > > raw_smp_processor_id() != pool->cpu);
> > >
> > > This looks like it is my rcu_gp workqueue (see splat below), and it
> > > appears to be intermittent. This happens on rcutorture scenario SRCU-N,
> > > which does random CPU-hotplug operations (in case that helps).
> > >
> > > Is this related to the recent addition of WQ_MEM_RECLAIM? Either way,
> > > what should I do to further debug this?
> >
> > Hmm... I checked the code paths but couldn't spot anything suspicious.
> > Can you please apply the following patch and see whether it triggers
> > before hitting the warn and if so report what it says?
>
> 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.

Thanx, Paul