| .. | .. |
|---|
| 472 | 472 | static void sync_rcu_exp_select_cpus(struct rcu_state *rsp, |
|---|
| 473 | 473 | smp_call_func_t func) |
|---|
| 474 | 474 | { |
|---|
| 475 | | - int cpu; |
|---|
| 476 | 475 | struct rcu_node *rnp; |
|---|
| 477 | 476 | |
|---|
| 478 | 477 | trace_rcu_exp_grace_period(rsp->name, rcu_exp_gp_seq_endval(rsp), TPS("reset")); |
|---|
| .. | .. |
|---|
| 494 | 493 | continue; |
|---|
| 495 | 494 | } |
|---|
| 496 | 495 | INIT_WORK(&rnp->rew.rew_work, sync_rcu_exp_select_node_cpus); |
|---|
| 497 | | - preempt_disable(); |
|---|
| 498 | | - cpu = cpumask_next(rnp->grplo - 1, cpu_online_mask); |
|---|
| 499 | | - /* If all offline, queue the work on an unbound CPU. */ |
|---|
| 500 | | - if (unlikely(cpu > rnp->grphi)) |
|---|
| 501 | | - cpu = WORK_CPU_UNBOUND; |
|---|
| 502 | | - queue_work_on(cpu, rcu_par_gp_wq, &rnp->rew.rew_work); |
|---|
| 503 | | - preempt_enable(); |
|---|
| 496 | + queue_work_on(rnp->grplo, rcu_par_gp_wq, &rnp->rew.rew_work); |
|---|
| 504 | 497 | rnp->exp_need_flush = true; |
|---|
| 505 | 498 | } |
|---|
| 506 | 499 | |
|---|