History

Merge branch 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull RCU fixes from Ingo Molnar: "Two RCU fixes: - work around bug with recent GCC versions. - fix false positive lockdep splat" * 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: rcu: Suppress lockdep false positive for rcp->exp_funnel_mutex rcu: Change _wait_rcu_gp() to work around GCC bug 67055

Linus Torvalds committed 11 years ago

Commit 70c8a002 parents b9a5322 7c4f1c62 files · +10 −6Browse files

Unified · Split

2 files
  1. include/linux/rcupdate.h +5 −6
  2. kernel/rcu/tree.c +5 −0
include/linux/rcupdate.h+5−6
@@ -230,12 +230,11 @@ void __wait_rcu_gp(bool checktiny, int n, call_rcu_func_t *crcu_array, · 229 unmodified lines
230230 struct rcu_synchronize *rs_array);
231231
232232 #define _wait_rcu_gp(checktiny, ...) \
233−do { \
234− call_rcu_func_t __crcu_array[] = { __VA_ARGS__ }; \
235− const int __n = ARRAY_SIZE(__crcu_array); \
236− struct rcu_synchronize __rs_array[__n]; \
237− \
238− __wait_rcu_gp(checktiny, __n, __crcu_array, __rs_array); \
233+do { \
234+ call_rcu_func_t __crcu_array[] = { __VA_ARGS__ }; \
235+ struct rcu_synchronize __rs_array[ARRAY_SIZE(__crcu_array)]; \
236+ __wait_rcu_gp(checktiny, ARRAY_SIZE(__crcu_array), \
237+ __crcu_array, __rs_array); \
239238 } while (0)
240239
241240 #define wait_rcu_gp(...) _wait_rcu_gp(false, __VA_ARGS__)
kernel/rcu/tree.c+5−0
@@ -3868,6 +3868,7 @@ static void rcu_init_new_rnp(struct rcu_node *rnp_leaf) · 3867 unmodified lines
38683868 static void __init
38693869 rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
38703870 {
3871+ static struct lock_class_key rcu_exp_sched_rdp_class;
38713872 unsigned long flags;
38723873 struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu);
38733874 struct rcu_node *rnp = rcu_get_root(rsp);
@@ -3883,6 +3884,10 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) · 9 unmodified lines
38833884 mutex_init(&rdp->exp_funnel_mutex);
38843885 rcu_boot_init_nocb_percpu_data(rdp);
38853886 raw_spin_unlock_irqrestore(&rnp->lock, flags);
3887+ if (rsp == &rcu_sched_state)
3888+ lockdep_set_class_and_name(&rdp->exp_funnel_mutex,
3889+ &rcu_exp_sched_rdp_class,
3890+ "rcu_data_exp_sched");
38863891 }
38873892
38883893 /*