sched: access local runqueue directly in single_task_running
Commit2ee507c472
("sched: Add function single_task_running to let a task check if it is the only task running on a cpu") referenced the current runqueue with the smp_processor_id. When CONFIG_DEBUG_PREEMPT is enabled, that is only allowed if preemption is disabled or the currrent task is bound to the local cpu (e.g. kernel worker). With commitf781951299
("kvm: add halt_poll_ns module parameter") KVM calls single_task_running. If CONFIG_DEBUG_PREEMPT is enabled that generates a lot of kernel messages. To avoid adding preemption in that cases, as it would limit the usefulness, we change single_task_running to access directly the cpu local runqueue. Cc: Tim Chen <tim.c.chen@linux.intel.com> Suggested-by: Peter Zijlstra <peterz@infradead.org> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: <stable@vger.kernel.org> Fixes:2ee507c472
Signed-off-by: Dominik Dingel <dingel@linux.vnet.ibm.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
efe4d36a75
commit
00cc163381
|
@ -2666,13 +2666,20 @@ unsigned long nr_running(void)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if only the current task is running on the cpu.
|
* Check if only the current task is running on the cpu.
|
||||||
|
*
|
||||||
|
* Caution: this function does not check that the caller has disabled
|
||||||
|
* preemption, thus the result might have a time-of-check-to-time-of-use
|
||||||
|
* race. The caller is responsible to use it correctly, for example:
|
||||||
|
*
|
||||||
|
* - from a non-preemptable section (of course)
|
||||||
|
*
|
||||||
|
* - from a thread that is bound to a single CPU
|
||||||
|
*
|
||||||
|
* - in a loop with very short iterations (e.g. a polling loop)
|
||||||
*/
|
*/
|
||||||
bool single_task_running(void)
|
bool single_task_running(void)
|
||||||
{
|
{
|
||||||
if (cpu_rq(smp_processor_id())->nr_running == 1)
|
return raw_rq()->nr_running == 1;
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(single_task_running);
|
EXPORT_SYMBOL(single_task_running);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue