Commit 70c8a00a authored by Linus Torvalds's avatar Linus Torvalds

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
parents b9a53227 7c4f1c69
...@@ -232,10 +232,9 @@ void __wait_rcu_gp(bool checktiny, int n, call_rcu_func_t *crcu_array, ...@@ -232,10 +232,9 @@ void __wait_rcu_gp(bool checktiny, int n, call_rcu_func_t *crcu_array,
#define _wait_rcu_gp(checktiny, ...) \ #define _wait_rcu_gp(checktiny, ...) \
do { \ do { \
call_rcu_func_t __crcu_array[] = { __VA_ARGS__ }; \ call_rcu_func_t __crcu_array[] = { __VA_ARGS__ }; \
const int __n = ARRAY_SIZE(__crcu_array); \ struct rcu_synchronize __rs_array[ARRAY_SIZE(__crcu_array)]; \
struct rcu_synchronize __rs_array[__n]; \ __wait_rcu_gp(checktiny, ARRAY_SIZE(__crcu_array), \
\ __crcu_array, __rs_array); \
__wait_rcu_gp(checktiny, __n, __crcu_array, __rs_array); \
} while (0) } while (0)
#define wait_rcu_gp(...) _wait_rcu_gp(false, __VA_ARGS__) #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) ...@@ -3868,6 +3868,7 @@ static void rcu_init_new_rnp(struct rcu_node *rnp_leaf)
static void __init static void __init
rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
{ {
static struct lock_class_key rcu_exp_sched_rdp_class;
unsigned long flags; unsigned long flags;
struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu); struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu);
struct rcu_node *rnp = rcu_get_root(rsp); struct rcu_node *rnp = rcu_get_root(rsp);
...@@ -3883,6 +3884,10 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) ...@@ -3883,6 +3884,10 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
mutex_init(&rdp->exp_funnel_mutex); mutex_init(&rdp->exp_funnel_mutex);
rcu_boot_init_nocb_percpu_data(rdp); rcu_boot_init_nocb_percpu_data(rdp);
raw_spin_unlock_irqrestore(&rnp->lock, flags); raw_spin_unlock_irqrestore(&rnp->lock, flags);
if (rsp == &rcu_sched_state)
lockdep_set_class_and_name(&rdp->exp_funnel_mutex,
&rcu_exp_sched_rdp_class,
"rcu_data_exp_sched");
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment