tick/nohz: Call tick_nohz_task_switch() with interrupts disabled
Call tick_nohz_task_switch() slightly earlier after the context switch to benefit from disabled IRQs. This way the function doesn't need to disable them once more. Signed-off-by: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Frederic Weisbecker <frederic@kernel.org> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20210512232924.150322-10-frederic@kernel.org
This commit is contained in:
parent
a1dfb6311c
commit
0fdcccfafc
|
@ -4212,6 +4212,7 @@ static struct rq *finish_task_switch(struct task_struct *prev)
|
|||
vtime_task_switch(prev);
|
||||
perf_event_task_sched_in(prev, current);
|
||||
finish_task(prev);
|
||||
tick_nohz_task_switch();
|
||||
finish_lock_switch(rq);
|
||||
finish_arch_post_lock_switch();
|
||||
kcov_finish_switch(current);
|
||||
|
@ -4257,7 +4258,6 @@ static struct rq *finish_task_switch(struct task_struct *prev)
|
|||
put_task_struct_rcu_user(prev);
|
||||
}
|
||||
|
||||
tick_nohz_task_switch();
|
||||
return rq;
|
||||
}
|
||||
|
||||
|
|
|
@ -487,13 +487,10 @@ void tick_nohz_dep_clear_signal(struct signal_struct *sig, enum tick_dep_bits bi
|
|||
*/
|
||||
void __tick_nohz_task_switch(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct tick_sched *ts;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
if (!tick_nohz_full_cpu(smp_processor_id()))
|
||||
goto out;
|
||||
return;
|
||||
|
||||
ts = this_cpu_ptr(&tick_cpu_sched);
|
||||
|
||||
|
@ -502,8 +499,6 @@ void __tick_nohz_task_switch(void)
|
|||
atomic_read(¤t->signal->tick_dep_mask))
|
||||
tick_nohz_full_kick();
|
||||
}
|
||||
out:
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
/* Get the boot-time nohz CPU list from the kernel parameters. */
|
||||
|
|
Loading…
Reference in New Issue