* [PATCH tip/core/rcu 0/6] Preview of fifth set of RCU changes for 3.3
@ 2011-12-13 0:41 Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 1/6] rcu: Add rcutorture tests for srcu_read_lock_raw() Paul E. McKenney
0 siblings, 1 reply; 7+ messages in thread
From: Paul E. McKenney @ 2011-12-13 0:41 UTC (permalink / raw)
To: linux-kernel
Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, niv, tglx,
peterz, rostedt, Valdis.Kletnieks, dhowells, eric.dumazet, darren,
patches
Hello!
This patchset adds to the earlier sets:
https://lkml.org/lkml/2011/11/2/363
https://lkml.org/lkml/2011/11/15/302
https://lkml.org/lkml/2011/11/28/588
https://lkml.org/lkml/2011/12/3/77
This fifth set adds rcutorture tests for the recently added
srcu_read_lock_raw(), additional tracing to further evaluate
RCU_FAST_NO_HZ, addition of an export to assist with rcutorture testing,
bug fixes, and documentation. The patches are as follows:
1. Add rcutorture tests for srcu_read_lock_raw().
2. Add tracing to further validate RCU_FAST_NO_HZ by giving more
information on RCU's state at the time it decides to stop
invoking callbacks.
3. Add the 2010 RCU API LWN article to the RCU documentation
(courtesy of Kees Cook).
4. Revert patch that permitted rtmutex acquisition with interrupts
disabled. Per LKML discussions (https://lkml.org/lkml/2011/12/5/63),
it was decided to illegalize IRQ-disable code sections that
partially overlap with RCU read-side critical sections. Code
to enforce this illegalization is in progress.
5. Add ACCESS_ONCE() to rcu_boost() return value.
6. Export cpu_up() so that rcutorture can exercise CPU hotplug
and RCU when rcutorture is built as a module.
For a testing-only version of this patchset from git, please see the
following subject-to-rebase branch, based on 3.2-rc5:
git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git rcu/next
Thanx, Paul
------------------------------------------------------------------------
b/Documentation/RCU/whatisRCU.txt | 1 +
b/include/trace/events/rcu.h | 38 +++++++++++++++++++++++++++++---------
b/kernel/cpu.c | 1 +
b/kernel/rcutiny.c | 10 ++++++++--
b/kernel/rcutiny_plugin.h | 25 +++++++++++++++++++++++++
b/kernel/rcutorture.c | 26 +++++++++++++++++++++++++-
b/kernel/rcutree.c | 8 ++++++--
b/kernel/rcutree_plugin.h | 5 -----
b/kernel/rtmutex.c | 8 --------
kernel/rcutiny_plugin.h | 4 ++--
kernel/rcutree_plugin.h | 3 ++-
11 files changed, 99 insertions(+), 30 deletions(-)
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RFC tip/core/rcu 1/6] rcu: Add rcutorture tests for srcu_read_lock_raw()
2011-12-13 0:41 [PATCH tip/core/rcu 0/6] Preview of fifth set of RCU changes for 3.3 Paul E. McKenney
@ 2011-12-13 0:42 ` Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 2/6] rcu: Augment rcu_batch_end tracing for idle and callback state Paul E. McKenney
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Paul E. McKenney @ 2011-12-13 0:42 UTC (permalink / raw)
To: linux-kernel
Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, niv, tglx,
peterz, rostedt, Valdis.Kletnieks, dhowells, eric.dumazet, darren,
patches, Paul E. McKenney
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
This commit adds simple rcutorture tests for srcu_read_lock_raw() and
srcu_read_unlock_raw(). It does not test doing srcu_read_lock_raw()
in an exception handler and releasing it in the corresponding process
context.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
kernel/rcutorture.c | 26 +++++++++++++++++++++++++-
1 files changed, 25 insertions(+), 1 deletions(-)
diff --git a/kernel/rcutorture.c b/kernel/rcutorture.c
index 186ead9..88f17b8 100644
--- a/kernel/rcutorture.c
+++ b/kernel/rcutorture.c
@@ -632,6 +632,30 @@ static struct rcu_torture_ops srcu_ops = {
.name = "srcu"
};
+static int srcu_torture_read_lock_raw(void) __acquires(&srcu_ctl)
+{
+ return srcu_read_lock_raw(&srcu_ctl);
+}
+
+static void srcu_torture_read_unlock_raw(int idx) __releases(&srcu_ctl)
+{
+ srcu_read_unlock_raw(&srcu_ctl, idx);
+}
+
+static struct rcu_torture_ops srcu_raw_ops = {
+ .init = srcu_torture_init,
+ .cleanup = srcu_torture_cleanup,
+ .readlock = srcu_torture_read_lock_raw,
+ .read_delay = srcu_read_delay,
+ .readunlock = srcu_torture_read_unlock_raw,
+ .completed = srcu_torture_completed,
+ .deferred_free = rcu_sync_torture_deferred_free,
+ .sync = srcu_torture_synchronize,
+ .cb_barrier = NULL,
+ .stats = srcu_torture_stats,
+ .name = "srcu_raw"
+};
+
static void srcu_torture_synchronize_expedited(void)
{
synchronize_srcu_expedited(&srcu_ctl);
@@ -1591,7 +1615,7 @@ rcu_torture_init(void)
static struct rcu_torture_ops *torture_ops[] =
{ &rcu_ops, &rcu_sync_ops, &rcu_expedited_ops,
&rcu_bh_ops, &rcu_bh_sync_ops, &rcu_bh_expedited_ops,
- &srcu_ops, &srcu_expedited_ops,
+ &srcu_ops, &srcu_raw_ops, &srcu_expedited_ops,
&sched_ops, &sched_sync_ops, &sched_expedited_ops, };
mutex_lock(&fullstop_mutex);
--
1.7.8
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH RFC tip/core/rcu 2/6] rcu: Augment rcu_batch_end tracing for idle and callback state
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 1/6] rcu: Add rcutorture tests for srcu_read_lock_raw() Paul E. McKenney
@ 2011-12-13 0:42 ` Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 3/6] docs: Additional LWN links to RCU API Paul E. McKenney
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2011-12-13 0:42 UTC (permalink / raw)
To: linux-kernel
Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, niv, tglx,
peterz, rostedt, Valdis.Kletnieks, dhowells, eric.dumazet, darren,
patches, Paul E. McKenney, Paul E. McKenney
From: "Paul E. McKenney" <paul.mckenney@linaro.org>
The current rcu_batch_end event trace records only the name of the RCU
flavor and the total number of callbacks that remain queued on the
current CPU. This is insufficient for testing and tuning the new
dyntick-idle RCU_FAST_NO_HZ code, so this commit adds idle state along
with whether or not any of the callbacks that were ready to invoke
at the beginning of rcu_do_batch() are still queued.
Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
include/trace/events/rcu.h | 38 +++++++++++++++++++++++++++++---------
kernel/rcutiny.c | 10 ++++++++--
kernel/rcutiny_plugin.h | 25 +++++++++++++++++++++++++
kernel/rcutree.c | 8 ++++++--
4 files changed, 68 insertions(+), 13 deletions(-)
diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h
index c75418c..d2d88be 100644
--- a/include/trace/events/rcu.h
+++ b/include/trace/events/rcu.h
@@ -461,27 +461,46 @@ TRACE_EVENT(rcu_invoke_kfree_callback,
/*
* Tracepoint for exiting rcu_do_batch after RCU callbacks have been
- * invoked. The first argument is the name of the RCU flavor and
- * the second argument is number of callbacks actually invoked.
+ * invoked. The first argument is the name of the RCU flavor,
+ * the second argument is number of callbacks actually invoked,
+ * the third argument (cb) is whether or not any of the callbacks that
+ * were ready to invoke at the beginning of this batch are still
+ * queued, the fourth argument (nr) is the return value of need_resched(),
+ * the fifth argument (iit) is 1 if the current task is the idle task,
+ * and the sixth argument (risk) is the return value from
+ * rcu_is_callbacks_kthread().
*/
TRACE_EVENT(rcu_batch_end,
- TP_PROTO(char *rcuname, int callbacks_invoked),
+ TP_PROTO(char *rcuname, int callbacks_invoked,
+ bool cb, bool nr, bool iit, bool risk),
- TP_ARGS(rcuname, callbacks_invoked),
+ TP_ARGS(rcuname, callbacks_invoked, cb, nr, iit, risk),
TP_STRUCT__entry(
__field(char *, rcuname)
__field(int, callbacks_invoked)
+ __field(bool, cb)
+ __field(bool, nr)
+ __field(bool, iit)
+ __field(bool, risk)
),
TP_fast_assign(
__entry->rcuname = rcuname;
__entry->callbacks_invoked = callbacks_invoked;
- ),
-
- TP_printk("%s CBs-invoked=%d",
- __entry->rcuname, __entry->callbacks_invoked)
+ __entry->cb = cb;
+ __entry->nr = nr;
+ __entry->iit = iit;
+ __entry->risk = risk;
+ ),
+
+ TP_printk("%s CBs-invoked=%d idle=%c%c%c%c",
+ __entry->rcuname, __entry->callbacks_invoked,
+ __entry->cb ? 'C' : '.',
+ __entry->nr ? 'S' : '.',
+ __entry->iit ? 'I' : '.',
+ __entry->risk ? 'R' : '.')
);
/*
@@ -524,7 +543,8 @@ TRACE_EVENT(rcu_torture_read,
#define trace_rcu_batch_start(rcuname, qlen, blimit) do { } while (0)
#define trace_rcu_invoke_callback(rcuname, rhp) do { } while (0)
#define trace_rcu_invoke_kfree_callback(rcuname, rhp, offset) do { } while (0)
-#define trace_rcu_batch_end(rcuname, callbacks_invoked) do { } while (0)
+#define trace_rcu_batch_end(rcuname, callbacks_invoked, cb, nr, iit, risk) \
+ do { } while (0)
#define trace_rcu_torture_read(rcutorturename, rhp) do { } while (0)
#endif /* #else #ifdef CONFIG_RCU_TRACE */
diff --git a/kernel/rcutiny.c b/kernel/rcutiny.c
index e5bd949..977296d 100644
--- a/kernel/rcutiny.c
+++ b/kernel/rcutiny.c
@@ -259,7 +259,11 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
/* If no RCU callbacks ready to invoke, just return. */
if (&rcp->rcucblist == rcp->donetail) {
RCU_TRACE(trace_rcu_batch_start(rcp->name, 0, -1));
- RCU_TRACE(trace_rcu_batch_end(rcp->name, 0));
+ RCU_TRACE(trace_rcu_batch_end(rcp->name, 0,
+ ACCESS_ONCE(rcp->rcucblist),
+ need_resched(),
+ is_idle_task(current),
+ rcu_is_callbacks_kthread()));
return;
}
@@ -288,7 +292,9 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
RCU_TRACE(cb_count++);
}
RCU_TRACE(rcu_trace_sub_qlen(rcp, cb_count));
- RCU_TRACE(trace_rcu_batch_end(rcp->name, cb_count));
+ RCU_TRACE(trace_rcu_batch_end(rcp->name, cb_count, 0, need_resched(),
+ is_idle_task(current),
+ rcu_is_callbacks_kthread()));
}
static void rcu_process_callbacks(struct softirq_action *unused)
diff --git a/kernel/rcutiny_plugin.h b/kernel/rcutiny_plugin.h
index 2b0484a..dfa97cb 100644
--- a/kernel/rcutiny_plugin.h
+++ b/kernel/rcutiny_plugin.h
@@ -885,6 +885,19 @@ static void invoke_rcu_callbacks(void)
wake_up(&rcu_kthread_wq);
}
+#ifdef CONFIG_RCU_TRACE
+
+/*
+ * Is the current CPU running the RCU-callbacks kthread?
+ * Caller must have preemption disabled.
+ */
+static bool rcu_is_callbacks_kthread(void)
+{
+ return rcu_kthread_task == current;
+}
+
+#endif /* #ifdef CONFIG_RCU_TRACE */
+
/*
* This kthread invokes RCU callbacks whose grace periods have
* elapsed. It is awakened as needed, and takes the place of the
@@ -938,6 +951,18 @@ void invoke_rcu_callbacks(void)
raise_softirq(RCU_SOFTIRQ);
}
+#ifdef CONFIG_RCU_TRACE
+
+/*
+ * There is no callback kthread, so this thread is never it.
+ */
+static bool rcu_is_callbacks_kthread(void)
+{
+ return false;
+}
+
+#endif /* #ifdef CONFIG_RCU_TRACE */
+
void rcu_init(void)
{
open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 2b2e1a9..6c4a672 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1373,7 +1373,9 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
/* If no callbacks are ready, just return.*/
if (!cpu_has_callbacks_ready_to_invoke(rdp)) {
trace_rcu_batch_start(rsp->name, 0, 0);
- trace_rcu_batch_end(rsp->name, 0);
+ trace_rcu_batch_end(rsp->name, 0, !!ACCESS_ONCE(rdp->nxtlist),
+ need_resched(), is_idle_task(current),
+ rcu_is_callbacks_kthread());
return;
}
@@ -1409,7 +1411,9 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
}
local_irq_save(flags);
- trace_rcu_batch_end(rsp->name, count);
+ trace_rcu_batch_end(rsp->name, count, !!list, need_resched(),
+ is_idle_task(current),
+ rcu_is_callbacks_kthread());
/* Update count, and requeue any remaining callbacks. */
rdp->qlen -= count;
--
1.7.8
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH RFC tip/core/rcu 3/6] docs: Additional LWN links to RCU API
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 1/6] rcu: Add rcutorture tests for srcu_read_lock_raw() Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 2/6] rcu: Augment rcu_batch_end tracing for idle and callback state Paul E. McKenney
@ 2011-12-13 0:42 ` Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 4/6] Revert "rcu: Permit rt_mutex_unlock() with irqs disabled" Paul E. McKenney
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2011-12-13 0:42 UTC (permalink / raw)
To: linux-kernel
Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, niv, tglx,
peterz, rostedt, Valdis.Kletnieks, dhowells, eric.dumazet, darren,
patches, Kees Cook, Paul E. McKenney
From: Kees Cook <keescook@chromium.org>
Tyler Hicks pointed me at an additional article on RCU and I figured
it should probably be mentioned with the others.
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
Documentation/RCU/whatisRCU.txt | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/Documentation/RCU/whatisRCU.txt b/Documentation/RCU/whatisRCU.txt
index 8e8cdc2..6bbe8dc 100644
--- a/Documentation/RCU/whatisRCU.txt
+++ b/Documentation/RCU/whatisRCU.txt
@@ -4,6 +4,7 @@ to start learning about RCU:
1. What is RCU, Fundamentally? http://lwn.net/Articles/262464/
2. What is RCU? Part 2: Usage http://lwn.net/Articles/263130/
3. RCU part 3: the RCU API http://lwn.net/Articles/264090/
+4. The RCU API, 2010 Edition http://lwn.net/Articles/418853/
What is RCU?
--
1.7.8
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH RFC tip/core/rcu 4/6] Revert "rcu: Permit rt_mutex_unlock() with irqs disabled"
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 1/6] rcu: Add rcutorture tests for srcu_read_lock_raw() Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 2/6] rcu: Augment rcu_batch_end tracing for idle and callback state Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 3/6] docs: Additional LWN links to RCU API Paul E. McKenney
@ 2011-12-13 0:42 ` Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 5/6] rcu: Apply ACCESS_ONCE() to rcu_boost() return value Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 6/6] cpu: Export cpu_up() Paul E. McKenney
4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2011-12-13 0:42 UTC (permalink / raw)
To: linux-kernel
Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, niv, tglx,
peterz, rostedt, Valdis.Kletnieks, dhowells, eric.dumazet, darren,
patches, Paul E. McKenney
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
This reverts commit 5342e269b2b58ee0b0b4168a94087faaa60d0567.
The approach taken in this patch was deemed too abusive to mutexes,
and thus too likely to result in maintenance problems in the future.
Instead, we will disallow RCU read-side critical sections that partially
overlap with interrupt-disbled code segments.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
kernel/rcutree_plugin.h | 5 -----
kernel/rtmutex.c | 8 --------
2 files changed, 0 insertions(+), 13 deletions(-)
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index 8cd9efe..f55f10b 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -1165,8 +1165,6 @@ static void rcu_initiate_boost_trace(struct rcu_node *rnp)
#endif /* #else #ifdef CONFIG_RCU_TRACE */
-static struct lock_class_key rcu_boost_class;
-
/*
* Carry out RCU priority boosting on the task indicated by ->exp_tasks
* or ->boost_tasks, advancing the pointer to the next task in the
@@ -1229,9 +1227,6 @@ static int rcu_boost(struct rcu_node *rnp)
*/
t = container_of(tb, struct task_struct, rcu_node_entry);
rt_mutex_init_proxy_locked(&mtx, t);
- /* Avoid lockdep false positives. This rt_mutex is its own thing. */
- lockdep_set_class_and_name(&mtx.wait_lock, &rcu_boost_class,
- "rcu_boost_mutex");
t->rcu_boost_mutex = &mtx;
raw_spin_unlock_irqrestore(&rnp->lock, flags);
rt_mutex_lock(&mtx); /* Side effect: boosts task t's priority. */
diff --git a/kernel/rtmutex.c b/kernel/rtmutex.c
index f9d8482..a242e69 100644
--- a/kernel/rtmutex.c
+++ b/kernel/rtmutex.c
@@ -579,7 +579,6 @@ __rt_mutex_slowlock(struct rt_mutex *lock, int state,
struct rt_mutex_waiter *waiter)
{
int ret = 0;
- int was_disabled;
for (;;) {
/* Try to acquire the lock: */
@@ -602,17 +601,10 @@ __rt_mutex_slowlock(struct rt_mutex *lock, int state,
raw_spin_unlock(&lock->wait_lock);
- was_disabled = irqs_disabled();
- if (was_disabled)
- local_irq_enable();
-
debug_rt_mutex_print_deadlock(waiter);
schedule_rt_mutex(lock);
- if (was_disabled)
- local_irq_disable();
-
raw_spin_lock(&lock->wait_lock);
set_current_state(state);
}
--
1.7.8
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH RFC tip/core/rcu 5/6] rcu: Apply ACCESS_ONCE() to rcu_boost() return value
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 1/6] rcu: Add rcutorture tests for srcu_read_lock_raw() Paul E. McKenney
` (2 preceding siblings ...)
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 4/6] Revert "rcu: Permit rt_mutex_unlock() with irqs disabled" Paul E. McKenney
@ 2011-12-13 0:42 ` Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 6/6] cpu: Export cpu_up() Paul E. McKenney
4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2011-12-13 0:42 UTC (permalink / raw)
To: linux-kernel
Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, niv, tglx,
peterz, rostedt, Valdis.Kletnieks, dhowells, eric.dumazet, darren,
patches, Paul E. McKenney, Paul E. McKenney
From: "Paul E. McKenney" <paul.mckenney@linaro.org>
Both TINY_RCU's and TREE_RCU's implementations of rcu_boost() access
the ->boost_tasks and ->exp_tasks fields without preventing concurrent
changes to these fields. This commit therefore applies ACCESS_ONCE in
order to prevent compiler mischief.
Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
kernel/rcutiny_plugin.h | 4 ++--
kernel/rcutree_plugin.h | 3 ++-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/kernel/rcutiny_plugin.h b/kernel/rcutiny_plugin.h
index dfa97cb..9cb1ae4 100644
--- a/kernel/rcutiny_plugin.h
+++ b/kernel/rcutiny_plugin.h
@@ -312,8 +312,8 @@ static int rcu_boost(void)
rt_mutex_lock(&mtx);
rt_mutex_unlock(&mtx); /* Keep lockdep happy. */
- return rcu_preempt_ctrlblk.boost_tasks != NULL ||
- rcu_preempt_ctrlblk.exp_tasks != NULL;
+ return ACCESS_ONCE(rcu_preempt_ctrlblk.boost_tasks) != NULL ||
+ ACCESS_ONCE(rcu_preempt_ctrlblk.exp_tasks) != NULL;
}
/*
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h
index f55f10b..8bb35d7 100644
--- a/kernel/rcutree_plugin.h
+++ b/kernel/rcutree_plugin.h
@@ -1232,7 +1232,8 @@ static int rcu_boost(struct rcu_node *rnp)
rt_mutex_lock(&mtx); /* Side effect: boosts task t's priority. */
rt_mutex_unlock(&mtx); /* Keep lockdep happy. */
- return rnp->exp_tasks != NULL || rnp->boost_tasks != NULL;
+ return ACCESS_ONCE(rnp->exp_tasks) != NULL ||
+ ACCESS_ONCE(rnp->boost_tasks) != NULL;
}
/*
--
1.7.8
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH RFC tip/core/rcu 6/6] cpu: Export cpu_up()
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 1/6] rcu: Add rcutorture tests for srcu_read_lock_raw() Paul E. McKenney
` (3 preceding siblings ...)
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 5/6] rcu: Apply ACCESS_ONCE() to rcu_boost() return value Paul E. McKenney
@ 2011-12-13 0:42 ` Paul E. McKenney
4 siblings, 0 replies; 7+ messages in thread
From: Paul E. McKenney @ 2011-12-13 0:42 UTC (permalink / raw)
To: linux-kernel
Cc: mingo, laijs, dipankar, akpm, mathieu.desnoyers, josh, niv, tglx,
peterz, rostedt, Valdis.Kletnieks, dhowells, eric.dumazet, darren,
patches, Paul E. McKenney, Paul E. McKenney
From: "Paul E. McKenney" <paul.mckenney@linaro.org>
Building rcutorture as a module requires cpu_up() as well as cpu_down()
exported, so apply EXPORT_SYMBOL_GPL().
Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
kernel/cpu.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 563f136..9d448dd 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -380,6 +380,7 @@ out:
cpu_maps_update_done();
return err;
}
+EXPORT_SYMBOL_GPL(cpu_up);
#ifdef CONFIG_PM_SLEEP_SMP
static cpumask_var_t frozen_cpus;
--
1.7.8
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-12-13 0:43 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-13 0:41 [PATCH tip/core/rcu 0/6] Preview of fifth set of RCU changes for 3.3 Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 1/6] rcu: Add rcutorture tests for srcu_read_lock_raw() Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 2/6] rcu: Augment rcu_batch_end tracing for idle and callback state Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 3/6] docs: Additional LWN links to RCU API Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 4/6] Revert "rcu: Permit rt_mutex_unlock() with irqs disabled" Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 5/6] rcu: Apply ACCESS_ONCE() to rcu_boost() return value Paul E. McKenney
2011-12-13 0:42 ` [PATCH RFC tip/core/rcu 6/6] cpu: Export cpu_up() Paul E. McKenney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox