From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Josh Triplett <josh@joshtriplett.org>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu,
laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca,
niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org,
rostedt@goodmis.org, Valdis.Kletnieks@vt.edu,
dhowells@redhat.com, eric.dumazet@gmail.com, darren@dvhart.com,
fweisbec@gmail.com, sbw@mit.edu, patches@linaro.org,
"Paul E. McKenney" <paul.mckenney@linaro.org>
Subject: Re: [PATCH tip/core/rcu 04/15] rcu: Permit RCU_NONIDLE() to be used from interrupt context
Date: Tue, 4 Sep 2012 15:33:50 -0700 [thread overview]
Message-ID: <20120904223350.GQ2593@linux.vnet.ibm.com> (raw)
In-Reply-To: <20120831180052.GB4259@jtriplet-mobl1>
On Fri, Aug 31, 2012 at 11:00:52AM -0700, Josh Triplett wrote:
> On Thu, Aug 30, 2012 at 11:56:17AM -0700, Paul E. McKenney wrote:
> > From: "Paul E. McKenney" <paul.mckenney@linaro.org>
> >
> > There is a need to use RCU from interrupt context, but either before
> > rcu_irq_enter() is called or after rcu_irq_exit() is called. If the
> > interrupt occurs from idle, then lockdep-RCU will complain about such
> > uses, as they appear to be illegal uses of RCU from the idle loop.
> > In other environments, RCU_NONIDLE() could be used to properly protect
> > the use of RCU, but RCU_NONIDLE() currently cannot be invoked except
> > from process context.
> >
> > This commit therefore modifies RCU_NONIDLE() to permit its use more
> > globally.
> >
> > Reported-by: Steven Rostedt <rostedt@goodmis.org>
> > Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
> > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
>
> Something seems wrong about this. The addition of EXPORT_SYMBOL_GPL
> suggests that such interrupt handlers might live in modules. In what
> situation might a module interrupt handler get called from the idle
> loop, before rcu_irq_enter or after rcu_irq_exit, and need to know that
> when using RCU?
Drivers can be in modules, in which case their interrupt handlers will
also be in the corresponding module. I do agree that in most cases,
the irq_enter() and irq_exit() hooks would be invoked by non-module code,
but I do believe that I had to add those exports due to build failures.
Steven will let me know if I am confused on this point.
Thanx, Paul
> - Josh Triplett
>
> > ---
> > include/linux/rcupdate.h | 6 ++----
> > kernel/rcutiny.c | 2 ++
> > kernel/rcutree.c | 2 ++
> > 3 files changed, 6 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
> > index 115ead2..0fbbd52 100644
> > --- a/include/linux/rcupdate.h
> > +++ b/include/linux/rcupdate.h
> > @@ -210,14 +210,12 @@ extern void exit_rcu(void);
> > * to nest RCU_NONIDLE() wrappers, but the nesting level is currently
> > * quite limited. If deeper nesting is required, it will be necessary
> > * to adjust DYNTICK_TASK_NESTING_VALUE accordingly.
> > - *
> > - * This macro may be used from process-level code only.
> > */
> > #define RCU_NONIDLE(a) \
> > do { \
> > - rcu_idle_exit(); \
> > + rcu_irq_enter(); \
> > do { a; } while (0); \
> > - rcu_idle_enter(); \
> > + rcu_irq_exit(); \
> > } while (0)
> >
> > /*
> > diff --git a/kernel/rcutiny.c b/kernel/rcutiny.c
> > index e4163c5..2e073a2 100644
> > --- a/kernel/rcutiny.c
> > +++ b/kernel/rcutiny.c
> > @@ -115,6 +115,7 @@ void rcu_irq_exit(void)
> > rcu_idle_enter_common(newval);
> > local_irq_restore(flags);
> > }
> > +EXPORT_SYMBOL_GPL(rcu_irq_exit);
> >
> > /* Common code for rcu_idle_exit() and rcu_irq_enter(), see kernel/rcutree.c. */
> > static void rcu_idle_exit_common(long long oldval)
> > @@ -172,6 +173,7 @@ void rcu_irq_enter(void)
> > rcu_idle_exit_common(oldval);
> > local_irq_restore(flags);
> > }
> > +EXPORT_SYMBOL_GPL(rcu_irq_enter);
> >
> > #ifdef CONFIG_DEBUG_LOCK_ALLOC
> >
> > diff --git a/kernel/rcutree.c b/kernel/rcutree.c
> > index f280e54..96b8aff 100644
> > --- a/kernel/rcutree.c
> > +++ b/kernel/rcutree.c
> > @@ -447,6 +447,7 @@ void rcu_irq_exit(void)
> > rcu_idle_enter_common(rdtp, oldval);
> > local_irq_restore(flags);
> > }
> > +EXPORT_SYMBOL_GPL(rcu_irq_exit);
> >
> > /*
> > * rcu_idle_exit_common - inform RCU that current CPU is moving away from idle
> > @@ -542,6 +543,7 @@ void rcu_irq_enter(void)
> > rcu_idle_exit_common(rdtp, oldval);
> > local_irq_restore(flags);
> > }
> > +EXPORT_SYMBOL_GPL(rcu_irq_enter);
> >
> > /**
> > * rcu_nmi_enter - inform RCU of entry to NMI context
> > --
> > 1.7.8
> >
>
next prev parent reply other threads:[~2012-09-04 22:34 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-30 18:56 [PATCH tip/core/rcu 0/15] Miscellaneous fixes Paul E. McKenney
2012-08-30 18:56 ` [PATCH tip/core/rcu 01/15] rcu: Add PROVE_RCU_DELAY to provoke difficult races Paul E. McKenney
2012-08-30 18:56 ` [PATCH tip/core/rcu 02/15] rcu: Pull TINY_RCU dyntick-idle tracing into non-idle region Paul E. McKenney
2012-08-31 16:53 ` Josh Triplett
2012-08-30 18:56 ` [PATCH tip/core/rcu 03/15] rcu: Properly initialize ->boost_tasks on CPU offline Paul E. McKenney
2012-08-31 17:56 ` Josh Triplett
2012-09-06 14:40 ` Peter Zijlstra
2012-09-06 20:58 ` Paul E. McKenney
2012-08-30 18:56 ` [PATCH tip/core/rcu 04/15] rcu: Permit RCU_NONIDLE() to be used from interrupt context Paul E. McKenney
2012-08-31 18:00 ` Josh Triplett
2012-09-04 22:33 ` Paul E. McKenney [this message]
2012-09-04 22:48 ` Josh Triplett
2012-09-04 22:51 ` Steven Rostedt
2012-09-04 23:08 ` Josh Triplett
2012-09-04 23:23 ` Steven Rostedt
2012-09-04 23:33 ` Josh Triplett
2012-09-04 23:43 ` Paul E. McKenney
2012-09-06 18:54 ` Josh Triplett
2012-09-06 19:54 ` Steven Rostedt
2012-09-07 6:09 ` Josh Triplett
2012-09-07 14:24 ` Paul E. McKenney
2012-09-07 14:47 ` Josh Triplett
2012-09-07 15:16 ` Steven Rostedt
2012-09-12 1:07 ` Paul E. McKenney
2012-09-12 14:13 ` Steven Rostedt
2012-09-12 15:03 ` Paul E. McKenney
2012-09-12 15:18 ` Steven Rostedt
2012-09-12 16:57 ` Paul E. McKenney
2012-09-04 23:46 ` Steven Rostedt
2012-09-05 0:42 ` Josh Triplett
2012-09-05 6:23 ` [PATCH] trace: Don't declare trace_*_rcuidle functions in modules Josh Triplett
2012-09-05 14:26 ` Mathieu Desnoyers
2012-09-05 16:36 ` Paul E. McKenney
2012-09-06 19:49 ` Steven Rostedt
2012-09-14 6:07 ` [tip:core/rcu] trace: Don' t " tip-bot for Josh Triplett
2012-09-04 23:14 ` [PATCH tip/core/rcu 04/15] rcu: Permit RCU_NONIDLE() to be used from interrupt context Paul E. McKenney
2012-08-30 18:56 ` [PATCH tip/core/rcu 05/15] rcu: Improve boost selection when moving tasks to root rcu_node Paul E. McKenney
2012-08-31 18:09 ` Josh Triplett
2012-08-30 18:56 ` [PATCH tip/core/rcu 06/15] rcu: Make offline-CPU checking allow for indefinite delays Paul E. McKenney
2012-08-31 18:12 ` Josh Triplett
2012-08-30 18:56 ` [PATCH tip/core/rcu 07/15] rcu: Fix obsolete rcu_initiate_boost() header comment Paul E. McKenney
2012-08-31 18:13 ` Josh Triplett
2012-08-30 18:56 ` [PATCH tip/core/rcu 08/15] rcu: Apply for_each_rcu_flavor() to increment_cpu_stall_ticks() Paul E. McKenney
2012-08-31 18:15 ` Josh Triplett
2012-09-04 22:44 ` Paul E. McKenney
2012-08-30 18:56 ` [PATCH tip/core/rcu 09/15] rcu: Avoid rcu_print_detail_task_stall_rnp() segfault Paul E. McKenney
2012-08-31 18:19 ` Josh Triplett
2012-09-04 22:46 ` Paul E. McKenney
2012-09-04 22:55 ` Josh Triplett
2012-08-30 18:56 ` [PATCH tip/core/rcu 10/15] rcu: Protect rcu_node accesses during CPU stall warnings Paul E. McKenney
2012-08-31 18:23 ` Josh Triplett
2012-09-04 22:51 ` Paul E. McKenney
2012-09-06 14:51 ` Peter Zijlstra
2012-09-06 21:01 ` Paul E. McKenney
2012-08-30 18:56 ` [PATCH tip/core/rcu 11/15] rcu: Avoid spurious RCU " Paul E. McKenney
2012-08-31 18:24 ` Josh Triplett
2012-09-06 14:56 ` Peter Zijlstra
2012-09-06 15:07 ` Steven Rostedt
2012-09-06 15:19 ` Peter Zijlstra
2012-09-06 21:03 ` Paul E. McKenney
2012-09-06 21:41 ` Steven Rostedt
2012-09-06 21:58 ` Paul E. McKenney
2012-09-06 22:05 ` Steven Rostedt
2012-09-06 22:22 ` Paul E. McKenney
2012-09-07 7:00 ` Peter Zijlstra
2012-09-07 14:42 ` Steven Rostedt
2012-08-30 18:56 ` [PATCH tip/core/rcu 12/15] rcu: Remove redundant memory barrier from __call_rcu() Paul E. McKenney
2012-08-31 18:30 ` Josh Triplett
2012-08-31 18:40 ` Josh Triplett
2012-08-30 18:56 ` [PATCH tip/core/rcu 13/15] rcu: Move TINY_PREEMPT_RCU away from raw_local_irq_save() Paul E. McKenney
2012-08-31 18:34 ` Josh Triplett
2012-09-04 23:03 ` Paul E. McKenney
2012-08-30 18:56 ` [PATCH tip/core/rcu 14/15] time: RCU permitted to stop idle entry via softirq Paul E. McKenney
2012-08-31 18:51 ` Josh Triplett
2012-09-06 15:12 ` Peter Zijlstra
2012-09-06 21:35 ` Paul E. McKenney
2012-09-06 21:57 ` Steven Rostedt
2012-09-06 22:11 ` Paul E. McKenney
2012-08-30 18:56 ` [PATCH tip/core/rcu 15/15] kmemleak: Replace list_for_each_continue_rcu with new interface Paul E. McKenney
2012-08-31 18:55 ` Josh Triplett
2012-09-04 23:41 ` Paul E. McKenney
2012-08-31 16:49 ` [PATCH tip/core/rcu 01/15] rcu: Add PROVE_RCU_DELAY to provoke difficult races Josh Triplett
2012-09-04 22:36 ` Paul E. McKenney
2012-09-06 14:38 ` Peter Zijlstra
2012-09-06 20:51 ` Paul E. McKenney
2012-09-07 6:54 ` Peter Zijlstra
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=20120904223350.GQ2593@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=Valdis.Kletnieks@vt.edu \
--cc=akpm@linux-foundation.org \
--cc=darren@dvhart.com \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=eric.dumazet@gmail.com \
--cc=fweisbec@gmail.com \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=niv@us.ibm.com \
--cc=patches@linaro.org \
--cc=paul.mckenney@linaro.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sbw@mit.edu \
--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.