diff options
Diffstat (limited to 'kernel/workqueue.c')
| -rw-r--r-- | kernel/workqueue.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 7f5d4be22034..e93f7b9067d8 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c | |||
| @@ -2201,6 +2201,15 @@ __acquires(&pool->lock) | |||
| 2201 | dump_stack(); | 2201 | dump_stack(); |
| 2202 | } | 2202 | } |
| 2203 | 2203 | ||
| 2204 | /* | ||
| 2205 | * The following prevents a kworker from hogging CPU on !PREEMPT | ||
| 2206 | * kernels, where a requeueing work item waiting for something to | ||
| 2207 | * happen could deadlock with stop_machine as such work item could | ||
| 2208 | * indefinitely requeue itself while all other CPUs are trapped in | ||
| 2209 | * stop_machine. | ||
| 2210 | */ | ||
| 2211 | cond_resched(); | ||
| 2212 | |||
| 2204 | spin_lock_irq(&pool->lock); | 2213 | spin_lock_irq(&pool->lock); |
| 2205 | 2214 | ||
| 2206 | /* clear cpu intensive status */ | 2215 | /* clear cpu intensive status */ |
