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
This commit is contained in:
commit
70c8a00a09
2 changed files with 10 additions and 6 deletions
|
@ -230,12 +230,11 @@ void __wait_rcu_gp(bool checktiny, int n, call_rcu_func_t *crcu_array,
|
||||||
struct rcu_synchronize *rs_array);
|
struct rcu_synchronize *rs_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)
|
||||||
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)
|
||||||
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");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue