From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Jiri Pirko <jiri@resnulli.us>
Cc: Joe Lawrence <joe.lawrence@stratus.com>,
Tejun Heo <tj@kernel.org>,
linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH v2 1/2] workqueue: add quiescent state between work items
Date: Wed, 8 Oct 2014 05:19:38 -0700 [thread overview]
Message-ID: <20141008121938.GJ4880@linux.vnet.ibm.com> (raw)
In-Reply-To: <20141008115428.GA1858@nanopsycho.orion>
On Wed, Oct 08, 2014 at 01:54:28PM +0200, Jiri Pirko wrote:
> Wed, Oct 08, 2014 at 05:24:11AM CEST, paulmck@linux.vnet.ibm.com wrote:
> >On Tue, Oct 07, 2014 at 01:45:28PM -0400, Joe Lawrence wrote:
> >> On Tue, 7 Oct 2014 06:43:29 -0700
> >> "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> wrote:
> >>
> >> > On Tue, Oct 07, 2014 at 09:29:42AM +0200, Jiri Pirko wrote:
> >> [ ... snip ... ]
> >> > >
> >> > > Paul, Tehun, how do you propose to fix this on older kernels which do
> >> > > not have rcu_note_voluntary_context_switch? I'm particullary interested
> >> > > in 3.10.
> >> >
> >> > Hello, Jiri,
> >> >
> >> > Older kernels can instead use rcu_note_context_switch().
> >>
> >> Hi Paul,
> >>
> >> Does 4a81e8328d37 ("rcu: Reduce overhead of cond_resched() checks for
> >> RCU") affect a backport to 3.10?
> >>
> >> I noticed that rcu_note_context_switch added a call to
> >> rcu_momentary_dyntick_idle in that change, which is only present in
> >> v3.16+.
> >>
> >> Would rcu_note_context_switch be effective by itself on a 3.10 kernel?
> >
> >Should be fine. There is more overhead than current mainline, but that
> >should not be in the noise compared to executing a work-queue item.
> >
> > Thanx, Paul
> >
>
> I cooked up following patch. Please tell me if it is fine or not. I can
> also send it oficially so it can be included into stable trees:
Looks good!
Thanx, Paul
> Subject: workqueue: Add quiescent state between work items
>
> Similar to the stop_machine deadlock scenario on !PREEMPT kernels
> addressed in b22ce2785d97 "workqueue: cond_resched() after processing
> each work item", kworker threads requeueing back-to-back with zero jiffy
> delay can stall RCU. The cond_resched call introduced in that fix will
> yield only iff there are other higher priority tasks to run, so force a
> quiescent RCU state between work items.
>
> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
> ---
> kernel/workqueue.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/workqueue.c b/kernel/workqueue.c
> index e9719c7..14a7163 100644
> --- a/kernel/workqueue.c
> +++ b/kernel/workqueue.c
> @@ -2196,8 +2196,10 @@ __acquires(&pool->lock)
> * kernels, where a requeueing work item waiting for something to
> * happen could deadlock with stop_machine as such work item could
> * indefinitely requeue itself while all other CPUs are trapped in
> - * stop_machine.
> + * stop_machine. At the same time, report a quiescent RCU state so
> + * the same condition doesn't freeze RCU.
> */
> + rcu_note_context_switch(raw_smp_processor_id());
> cond_resched();
>
> spin_lock_irq(&pool->lock);
> --
> 1.9.3
>
>
next prev parent reply other threads:[~2014-10-08 12:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-05 17:24 [PATCH v2 0/2] workqueue: add RCU quiescent state between items Joe Lawrence
2014-10-05 17:24 ` [PATCH v2 1/2] workqueue: add quiescent state between work items Joe Lawrence
2014-10-05 19:21 ` Tejun Heo
2014-10-05 19:47 ` Tejun Heo
2014-10-06 4:21 ` Paul E. McKenney
2014-10-07 7:29 ` Jiri Pirko
2014-10-07 13:43 ` Paul E. McKenney
2014-10-07 17:45 ` Joe Lawrence
2014-10-08 3:24 ` Paul E. McKenney
2014-10-08 11:54 ` Jiri Pirko
2014-10-08 12:19 ` Paul E. McKenney [this message]
2014-10-05 17:24 ` [PATCH v2 2/2] workqueue: use cond_resched_rcu_qs macro Joe Lawrence
2014-10-05 18:47 ` Paul E. McKenney
2014-10-05 19:48 ` 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=20141008121938.GJ4880@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=jiri@resnulli.us \
--cc=joe.lawrence@stratus.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=tj@kernel.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.