From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Tejun Heo <tj@kernel.org>
Cc: linux-kernel@vger.kernel.org, torvalds@linux-foundation.org,
peterz@infradead.org, tglx@linutronix.de,
linux-pm@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH] workqueue: fix spurious CPU locality WARN from process_one_work()
Date: Sun, 22 Jul 2012 14:23:58 -0700 [thread overview]
Message-ID: <20120722212358.GT2435@linux.vnet.ibm.com> (raw)
In-Reply-To: <20120722164327.GA5144@dhcp-172-17-108-109.mtv.corp.google.com>
On Sun, Jul 22, 2012 at 09:43:27AM -0700, Tejun Heo wrote:
> 25511a4776 "workqueue: reimplement CPU online rebinding to handle idle
> workers" added CPU locality sanity check in process_one_work(). It
> triggers if a worker is executing on a different CPU without UNBOUND
> or REBIND set.
>
> This works for all normal workers but rescuers can trigger this
> spuriously when they're serving the unbound or a disassociated
> global_cwq - rescuers don't have either flag set and thus its
> gcwq->cpu can be a different value including %WORK_CPU_UNBOUND.
>
> Fix it by additionally testing %GCWQ_DISASSOCIATED.
>
> Signed-off-by: Tejun Heo <tj@kernel.org>
> Reported-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> LKML-Refence: <20120721213656.GA7783@linux.vnet.ibm.com>
> ---
> This should fix it. Will queue it on wq/for-3.6.
I am running my tests on it, will let you know how it goes.
Thanx, Paul
> Thanks!
>
> kernel/workqueue.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> --- a/kernel/workqueue.c
> +++ b/kernel/workqueue.c
> @@ -1949,7 +1949,13 @@ __acquires(&gcwq->lock)
>
> lockdep_copy_map(&lockdep_map, &work->lockdep_map);
> #endif
> + /*
> + * Ensure we're on the correct CPU. DISASSOCIATED test is
> + * necessary to avoid spurious warnings from rescuers servicing the
> + * unbound or a disassociated gcwq.
> + */
> WARN_ON_ONCE(!(worker->flags & (WORKER_UNBOUND | WORKER_REBIND)) &&
> + !(gcwq->flags & GCWQ_DISASSOCIATED) &&
> raw_smp_processor_id() != gcwq->cpu);
>
> /*
>
next prev parent reply other threads:[~2012-07-22 21:24 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-17 17:12 [PATCHSET] workqueue: reimplement CPU hotplug to keep idle workers Tejun Heo
2012-07-17 17:12 ` [PATCH 1/9] workqueue: perform cpu down operations from low priority cpu_notifier() Tejun Heo
2012-07-20 21:52 ` Paul E. McKenney
2012-07-20 21:58 ` Tejun Heo
2012-07-21 21:36 ` Paul E. McKenney
2012-07-22 16:43 ` [PATCH] workqueue: fix spurious CPU locality WARN from process_one_work() Tejun Heo
2012-07-22 21:23 ` Paul E. McKenney [this message]
2012-07-17 17:12 ` [PATCH 2/9] workqueue: drop CPU_DYING notifier operation Tejun Heo
2012-07-17 17:12 ` [PATCH 3/9] workqueue: ROGUE workers are UNBOUND workers Tejun Heo
2012-07-17 17:12 ` [PATCH 4/9] workqueue: use mutex for global_cwq manager exclusion Tejun Heo
2012-07-17 17:12 ` [PATCH 5/9] workqueue: drop @bind from create_worker() Tejun Heo
2012-07-17 17:12 ` [PATCH 6/9] workqueue: reimplement CPU online rebinding to handle idle workers Tejun Heo
2012-07-17 17:12 ` [PATCH 7/9] workqueue: don't butcher idle workers on an offline CPU Tejun Heo
2012-07-17 17:12 ` [PATCH 8/9] workqueue: remove CPU offline trustee Tejun Heo
2012-07-17 17:12 ` [PATCH 9/9] workqueue: simplify CPU hotplug code Tejun Heo
2012-07-17 18:43 ` [PATCHSET] workqueue: reimplement CPU hotplug to keep idle workers Rafael J. Wysocki
2012-07-17 19:40 ` Tejun Heo
2012-07-20 15:48 ` Peter Zijlstra
2012-07-20 17:02 ` Tejun Heo
2012-07-20 17:21 ` Peter Zijlstra
2012-07-20 17:50 ` Tejun Heo
2012-07-20 18:22 ` Peter Zijlstra
2012-07-20 18:34 ` Tejun Heo
2012-07-20 19:44 ` Rafael J. Wysocki
2012-07-20 19:41 ` Tejun Heo
2012-07-21 6:42 ` Shilimkar, Santosh
2012-07-23 8:38 ` Peter De Schrijver
2012-07-20 16:39 ` Peter Zijlstra
2012-07-20 16:52 ` Tejun Heo
2012-07-20 17:01 ` Peter Zijlstra
2012-07-20 17:08 ` Tejun Heo
2012-07-20 17:19 ` Peter Zijlstra
2012-07-20 17:43 ` Tejun Heo
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=20120722212358.GT2435@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=stable@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.org \
/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.