|
@@ -344,7 +344,6 @@ static void sync_rcu_exp_select_cpus(struct rcu_state *rsp,
|
|
|
{
|
|
|
int cpu;
|
|
|
unsigned long flags;
|
|
|
- unsigned long mask;
|
|
|
unsigned long mask_ofl_test;
|
|
|
unsigned long mask_ofl_ipi;
|
|
|
int ret;
|
|
@@ -356,7 +355,7 @@ static void sync_rcu_exp_select_cpus(struct rcu_state *rsp,
|
|
|
|
|
|
/* Each pass checks a CPU for identity, offline, and idle. */
|
|
|
mask_ofl_test = 0;
|
|
|
- for (cpu = rnp->grplo; cpu <= rnp->grphi; cpu++) {
|
|
|
+ for_each_leaf_node_possible_cpu(rnp, cpu) {
|
|
|
struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu);
|
|
|
struct rcu_dynticks *rdtp = &per_cpu(rcu_dynticks, cpu);
|
|
|
|
|
@@ -376,8 +375,8 @@ static void sync_rcu_exp_select_cpus(struct rcu_state *rsp,
|
|
|
raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
|
|
|
|
|
|
/* IPI the remaining CPUs for expedited quiescent state. */
|
|
|
- mask = 1;
|
|
|
- for (cpu = rnp->grplo; cpu <= rnp->grphi; cpu++, mask <<= 1) {
|
|
|
+ for_each_leaf_node_possible_cpu(rnp, cpu) {
|
|
|
+ unsigned long mask = leaf_node_cpu_bit(rnp, cpu);
|
|
|
if (!(mask_ofl_ipi & mask))
|
|
|
continue;
|
|
|
retry_ipi:
|
|
@@ -440,10 +439,10 @@ static void synchronize_sched_expedited_wait(struct rcu_state *rsp)
|
|
|
ndetected = 0;
|
|
|
rcu_for_each_leaf_node(rsp, rnp) {
|
|
|
ndetected += rcu_print_task_exp_stall(rnp);
|
|
|
- mask = 1;
|
|
|
- for (cpu = rnp->grplo; cpu <= rnp->grphi; cpu++, mask <<= 1) {
|
|
|
+ for_each_leaf_node_possible_cpu(rnp, cpu) {
|
|
|
struct rcu_data *rdp;
|
|
|
|
|
|
+ mask = leaf_node_cpu_bit(rnp, cpu);
|
|
|
if (!(rnp->expmask & mask))
|
|
|
continue;
|
|
|
ndetected++;
|
|
@@ -453,7 +452,6 @@ static void synchronize_sched_expedited_wait(struct rcu_state *rsp)
|
|
|
"o."[!!(rdp->grpmask & rnp->expmaskinit)],
|
|
|
"N."[!!(rdp->grpmask & rnp->expmaskinitnext)]);
|
|
|
}
|
|
|
- mask <<= 1;
|
|
|
}
|
|
|
pr_cont(" } %lu jiffies s: %lu root: %#lx/%c\n",
|
|
|
jiffies - jiffies_start, rsp->expedited_sequence,
|
|
@@ -473,8 +471,8 @@ static void synchronize_sched_expedited_wait(struct rcu_state *rsp)
|
|
|
pr_cont("\n");
|
|
|
}
|
|
|
rcu_for_each_leaf_node(rsp, rnp) {
|
|
|
- mask = 1;
|
|
|
- for (cpu = rnp->grplo; cpu <= rnp->grphi; cpu++, mask <<= 1) {
|
|
|
+ for_each_leaf_node_possible_cpu(rnp, cpu) {
|
|
|
+ mask = leaf_node_cpu_bit(rnp, cpu);
|
|
|
if (!(rnp->expmask & mask))
|
|
|
continue;
|
|
|
dump_cpu_task(cpu);
|