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
Unified · Split
| @@ -230,12 +230,11 @@ void __wait_rcu_gp(bool checktiny, int n, call_rcu_func_t *crcu_array, · 229 unmodified lines | ||
| 230 | 230 | struct rcu_synchronize *rs_array); |
| 231 | 231 | |
| 232 | 232 | #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); \ | |
| 239 | 238 | } while (0) |
| 240 | 239 | |
| 241 | 240 | #define wait_rcu_gp(...) _wait_rcu_gp(false, __VA_ARGS__) |
| @@ -3868,6 +3868,7 @@ static void rcu_init_new_rnp(struct rcu_node *rnp_leaf) · 3867 unmodified lines | ||
| 3868 | 3868 | static void __init |
| 3869 | 3869 | rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) |
| 3870 | 3870 | { |
| 3871 | + static struct lock_class_key rcu_exp_sched_rdp_class; | |
| 3871 | 3872 | unsigned long flags; |
| 3872 | 3873 | struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu); |
| 3873 | 3874 | 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 | ||
| 3883 | 3884 | mutex_init(&rdp->exp_funnel_mutex); |
| 3884 | 3885 | rcu_boot_init_nocb_percpu_data(rdp); |
| 3885 | 3886 | 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"); | |
| 3886 | 3891 | } |
| 3887 | 3892 | |
| 3888 | 3893 | /* |