aboutsummaryrefslogtreecommitdiff
path: root/kernel/workqueue.c
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-09-08 13:24:29 +0100
committerMark Brown <broonie@linaro.org>2013-09-08 13:24:29 +0100
commitbf06bec1f8b088965577b14eecaf532fe3ca1f58 (patch)
tree68717606745d17d6dff26c849d3db0cd1490d3b1 /kernel/workqueue.c
parent965abff8d8accdffc4af1b11fcf580e83031330a (diff)
parent85cdabba08d484bdcc4b25f0bbc23ac60c75aa5b (diff)
Merge tag 'v3.10.11' into linux-linaro-lsk
This is the 3.10.11 stable release
Diffstat (limited to 'kernel/workqueue.c')
-rw-r--r--kernel/workqueue.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 2bebf87f143..36108647386 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -2201,6 +2201,15 @@ __acquires(&pool->lock)
dump_stack();
}
+ /*
+ * The following prevents a kworker from hogging CPU on !PREEMPT
+ * kernels, where a requeueing work item waiting for something to
+ * happen could deadlock with stop_machine as such work item could
+ * indefinitely requeue itself while all other CPUs are trapped in
+ * stop_machine.
+ */
+ cond_resched();
+
spin_lock_irq(&pool->lock);
/* clear cpu intensive status */