All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yong Zhang <yong.zhang0@gmail.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org
Subject: Re: [PATCH -rt 4/5] workqueue: hotplug fix
Date: Mon, 24 Oct 2011 10:26:48 +0800	[thread overview]
Message-ID: <20111024022648.GA24581@zhy> (raw)
In-Reply-To: <alpine.LFD.2.02.1110190913320.3240@ionos>

On Wed, Oct 19, 2011 at 09:14:28AM +0200, Thomas Gleixner wrote:
> On Sun, 16 Oct 2011, Yong Zhang wrote:
> > --- a/kernel/workqueue.c
> > +++ b/kernel/workqueue.c
> > @@ -3195,30 +3195,34 @@ static int __devinit workqueue_cpu_up_callback(struct notifier_block *nfb,
> >  	}
> >  
> >  	/* some are called w/ irq disabled, don't disturb irq status */
> > -	spin_lock_irqsave(&gcwq->lock, flags);
> >  
> >  	switch (action) {
> >  	case CPU_UP_PREPARE:
> > +		spin_lock_irqsave(&gcwq->lock, flags);
> >  		BUG_ON(gcwq->first_idle);
> >  		gcwq->first_idle = new_worker;
> > +		spin_unlock_irqrestore(&gcwq->lock, flags);
> >  		break;
> >  
> >  	case CPU_UP_CANCELED:
> > +		spin_lock_irqsave(&gcwq->lock, flags);
> >  		destroy_worker(gcwq->first_idle);
> >  		gcwq->first_idle = NULL;
> > +		spin_unlock_irqrestore(&gcwq->lock, flags);
> >  		break;
> >  
> >  	case CPU_ONLINE:
> > +		spin_lock_irqsave(&gcwq->lock, flags);
> >  		spin_unlock_irq(&gcwq->lock);
> >  		kthread_bind(gcwq->first_idle->task, cpu);
> >  		spin_lock_irq(&gcwq->lock);
> >  		gcwq->flags |= GCWQ_MANAGE_WORKERS;
> >  		start_worker(gcwq->first_idle);
> >  		gcwq->first_idle = NULL;
> > +		spin_unlock_irqrestore(&gcwq->lock, flags);
> >  		break;
> >  	}
> >  
> > -	spin_unlock_irqrestore(&gcwq->lock, flags);
> 
> This part of the patch is pretty pointless.

But CPU_STARTING is called with irq disabled, and it will take
the lock unconditionally. Thus below warning is triggered:
BUG: sleeping function called from invalid context at kernel/rtmutex.c:645
in_atomic(): 1, irqs_disabled(): 1, pid: 0, name: kworker/0:0
Pid: 0, comm: kworker/0:0 Not tainted 3.0.6-rt17-00284-gb76d419 #3
Call Trace:
 [<c06e3b5d>] ? printk+0x1d/0x20
 [<c01390b6>] __might_sleep+0xe6/0x110
 [<c06e633c>] rt_spin_lock+0x1c/0x30
 [<c06cd85b>] workqueue_cpu_up_callback+0x56/0xf3
 [<c06e9d65>] notifier_call_chain+0x45/0x60
 [<c0171cfe>] __raw_notifier_call_chain+0x1e/0x30
 [<c014c9b4>] __cpu_notify+0x24/0x40
 [<c014c9ec>] cpu_notify+0x1c/0x20
 [<c06e1d43>] notify_cpu_starting+0x1e/0x20
 [<c06e0aad>] smp_callin+0xfb/0x10e
 [<c06e0ad9>] start_secondary+0x19/0xd7

Thanks,
Yong


  reply	other threads:[~2011-10-24  2:27 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-16 10:56 [RFC] [PATCH -rt 0/5] patchset focusing on cpu hotplug Yong Zhang
2011-10-16 10:56 ` [PATCH -rt 1/5] hotplug: sync_unplug: No '\n' in task name Yong Zhang
2011-10-16 10:56 ` [PATCH -rt 2/5] hotplug: Call cpu_unplug_begin() a little early Yong Zhang
2011-10-16 10:56 ` [RFC] [PATCH -rt 3/5] printk: don't call printk_tick in printk_needs_cpu() Yong Zhang
2011-10-16 10:56 ` [PATCH -rt 4/5] workqueue: hotplug fix Yong Zhang
2011-10-19  7:14   ` Thomas Gleixner
2011-10-24  2:26     ` Yong Zhang [this message]
2011-10-24  9:25       ` Thomas Gleixner
2011-10-16 10:56 ` [RFC] [PATCH -rt 5/5] cpufreq: get rid of get_online_cpus()/put_online_cpus() Yong Zhang
2011-10-19  9:12   ` Thomas Gleixner
2011-10-24  2:44     ` Yong Zhang
2011-10-24  9:24       ` Thomas Gleixner
2011-10-24 11:30         ` Yong Zhang
2011-10-24 11:45           ` Thomas Gleixner
2011-10-24 11:56             ` Yong Zhang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111024022648.GA24581@zhy \
    --to=yong.zhang0@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.