.. | .. |
---|
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 | |
---|