aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorNicolas Pitre <nicolas.pitre@linaro.org>2011-05-16 13:24:27 -0400
committerNicolas Pitre <nicolas.pitre@linaro.org>2011-05-16 13:24:27 -0400
commit0a1f094ea7bfb405b96f53e5a6c55759e29e0987 (patch)
tree0d1beed2b746cddce8ae295a4117003437b30533 /kernel
parent0f106b4f7fe6ad697cff5c02f0edd80bb066fabe (diff)
parent678562e527fd9979f1765ffa1eb34738fc174425 (diff)
Merge commit 'v2.6.38.6' into linaro-2.6.38
Diffstat (limited to 'kernel')
-rw-r--r--kernel/workqueue.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index ee6578b578a..7b65ae747c6 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -1283,8 +1283,14 @@ __acquires(&gcwq->lock)
return true;
spin_unlock_irq(&gcwq->lock);
- /* CPU has come up inbetween, retry migration */
+ /*
+ * We've raced with CPU hot[un]plug. Give it a breather
+ * and retry migration. cond_resched() is required here;
+ * otherwise, we might deadlock against cpu_stop trying to
+ * bring down the CPU on non-preemptive kernel.
+ */
cpu_relax();
+ cond_resched();
}
}