diff options
Diffstat (limited to 'kernel/rcutree.c')
| -rw-r--r-- | kernel/rcutree.c | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/kernel/rcutree.c b/kernel/rcutree.c index d47e03e5792a..53ae9598f798 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
| @@ -948,7 +948,7 @@ static void __rcu_offline_cpu(int cpu, struct rcu_state *rsp) | |||
| 948 | { | 948 | { | 
| 949 | unsigned long flags; | 949 | unsigned long flags; | 
| 950 | unsigned long mask; | 950 | unsigned long mask; | 
| 951 | int need_quiet = 0; | 951 | int need_report = 0; | 
| 952 | struct rcu_data *rdp = rsp->rda[cpu]; | 952 | struct rcu_data *rdp = rsp->rda[cpu]; | 
| 953 | struct rcu_node *rnp; | 953 | struct rcu_node *rnp; | 
| 954 | 954 | ||
| @@ -967,7 +967,7 @@ static void __rcu_offline_cpu(int cpu, struct rcu_state *rsp) | |||
| 967 | break; | 967 | break; | 
| 968 | } | 968 | } | 
| 969 | if (rnp == rdp->mynode) | 969 | if (rnp == rdp->mynode) | 
| 970 | need_quiet = rcu_preempt_offline_tasks(rsp, rnp, rdp); | 970 | need_report = rcu_preempt_offline_tasks(rsp, rnp, rdp); | 
| 971 | else | 971 | else | 
| 972 | spin_unlock(&rnp->lock); /* irqs remain disabled. */ | 972 | spin_unlock(&rnp->lock); /* irqs remain disabled. */ | 
| 973 | mask = rnp->grpmask; | 973 | mask = rnp->grpmask; | 
| @@ -982,10 +982,12 @@ static void __rcu_offline_cpu(int cpu, struct rcu_state *rsp) | |||
| 982 | */ | 982 | */ | 
| 983 | spin_unlock(&rsp->onofflock); /* irqs remain disabled. */ | 983 | spin_unlock(&rsp->onofflock); /* irqs remain disabled. */ | 
| 984 | rnp = rdp->mynode; | 984 | rnp = rdp->mynode; | 
| 985 | if (need_quiet) | 985 | if (need_report & RCU_OFL_TASKS_NORM_GP) | 
| 986 | rcu_report_unblock_qs_rnp(rnp, flags); | 986 | rcu_report_unblock_qs_rnp(rnp, flags); | 
| 987 | else | 987 | else | 
| 988 | spin_unlock_irqrestore(&rnp->lock, flags); | 988 | spin_unlock_irqrestore(&rnp->lock, flags); | 
| 989 | if (need_report & RCU_OFL_TASKS_EXP_GP) | ||
| 990 | rcu_report_exp_rnp(rsp, rnp); | ||
| 989 | 991 | ||
| 990 | rcu_adopt_orphan_cbs(rsp); | 992 | rcu_adopt_orphan_cbs(rsp); | 
| 991 | } | 993 | } | 
| @@ -1843,6 +1845,8 @@ static void __init rcu_init_one(struct rcu_state *rsp) | |||
| 1843 | rnp->level = i; | 1845 | rnp->level = i; | 
| 1844 | INIT_LIST_HEAD(&rnp->blocked_tasks[0]); | 1846 | INIT_LIST_HEAD(&rnp->blocked_tasks[0]); | 
| 1845 | INIT_LIST_HEAD(&rnp->blocked_tasks[1]); | 1847 | INIT_LIST_HEAD(&rnp->blocked_tasks[1]); | 
| 1848 | INIT_LIST_HEAD(&rnp->blocked_tasks[2]); | ||
| 1849 | INIT_LIST_HEAD(&rnp->blocked_tasks[3]); | ||
| 1846 | } | 1850 | } | 
| 1847 | } | 1851 | } | 
| 1848 | } | 1852 | } | 
