summaryrefslogtreecommitdiffstats
path: root/kernel/sched/core.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2015-09-23 09:52:03 +0200
committerIngo Molnar <mingo@kernel.org>2015-09-23 09:52:03 +0200
commit4bbffe718fe1bfae6176a6fb783c1576b69338e5 (patch)
treee4d25102f0d2fa2a3480e03ba7bde45c9958511e /kernel/sched/core.c
parentac742d37180bee83bc433be087b66a17af2883b9 (diff)
parent21199f27b430576552b26210b3194a363d7f05cd (diff)
downloadtalos-op-linux-4bbffe718fe1bfae6176a6fb783c1576b69338e5.tar.gz
talos-op-linux-4bbffe718fe1bfae6176a6fb783c1576b69338e5.zip
Merge branch 'locking/urgent' into locking/core, to pick up fixes before applying new changes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r--kernel/sched/core.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 97d276ff1edb..2f9c92884817 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2669,13 +2669,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);
OpenPOWER on IntegriCloud