diff options
author | Ingo Molnar <mingo@kernel.org> | 2015-09-23 09:52:03 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2015-09-23 09:52:03 +0200 |
commit | 4bbffe718fe1bfae6176a6fb783c1576b69338e5 (patch) | |
tree | e4d25102f0d2fa2a3480e03ba7bde45c9958511e /kernel/sched/core.c | |
parent | ac742d37180bee83bc433be087b66a17af2883b9 (diff) | |
parent | 21199f27b430576552b26210b3194a363d7f05cd (diff) | |
download | talos-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.c | 15 |
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); |