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);
|
vtime_task_switch(prev);
|
||||||
perf_event_task_sched_in(prev, current);
|
perf_event_task_sched_in(prev, current);
|
||||||
finish_task(prev);
|
finish_task(prev);
|
||||||
|
tick_nohz_task_switch();
|
||||||
finish_lock_switch(rq);
|
finish_lock_switch(rq);
|
||||||
finish_arch_post_lock_switch();
|
finish_arch_post_lock_switch();
|
||||||
kcov_finish_switch(current);
|
kcov_finish_switch(current);
|
||||||
|
@ -4257,7 +4258,6 @@ static struct rq *finish_task_switch(struct task_struct *prev)
|
||||||
put_task_struct_rcu_user(prev);
|
put_task_struct_rcu_user(prev);
|
||||||
}
|
}
|
||||||
|
|
||||||
tick_nohz_task_switch();
|
|
||||||
return rq;
|
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)
|
void __tick_nohz_task_switch(void)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
struct tick_sched *ts;
|
struct tick_sched *ts;
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
|
|
||||||
if (!tick_nohz_full_cpu(smp_processor_id()))
|
if (!tick_nohz_full_cpu(smp_processor_id()))
|
||||||
goto out;
|
return;
|
||||||
|
|
||||||
ts = this_cpu_ptr(&tick_cpu_sched);
|
ts = this_cpu_ptr(&tick_cpu_sched);
|
||||||
|
|
||||||
|
@ -502,8 +499,6 @@ void __tick_nohz_task_switch(void)
|
||||||
atomic_read(¤t->signal->tick_dep_mask))
|
atomic_read(¤t->signal->tick_dep_mask))
|
||||||
tick_nohz_full_kick();
|
tick_nohz_full_kick();
|
||||||
}
|
}
|
||||||
out:
|
|
||||||
local_irq_restore(flags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the boot-time nohz CPU list from the kernel parameters. */
|
/* Get the boot-time nohz CPU list from the kernel parameters. */
|
||||||
|
|
Loading…
Reference in New Issue