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
1 changed files with 11 additions and 4 deletions
|
@ -2666,13 +2666,20 @@ unsigned long nr_running(void)
|
|||
|
||||
/*
|
||||
* 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)
|
||||
{
|
||||
if (cpu_rq(smp_processor_id())->nr_running == 1)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
return raw_rq()->nr_running == 1;
|
||||
}
|
||||
EXPORT_SYMBOL(single_task_running);
|
||||
|
||||
|
|
Loading…
Reference in a new issue