summaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-generic.c
diff options
context:
space:
mode:
authorThomas Tuttle <ttuttle@chromium.org>2011-09-15 01:22:28 +0200
committerLinus Torvalds <torvalds@linux-foundation.org>2011-09-15 03:09:38 +0200
commitfa2563e41c3d6d6e8af437643981ed28ae0cb56d (patch)
tree7d0dbcc4214a3bceb4d1dd9251df88752c1313b5 /drivers/gpio/gpio-generic.c
parentMAINTAINERS: update e-mail address of Benny Halevy (diff)
downloadlinux-fa2563e41c3d6d6e8af437643981ed28ae0cb56d.tar.xz
linux-fa2563e41c3d6d6e8af437643981ed28ae0cb56d.zip
workqueue: lock cwq access in drain_workqueue
Take cwq->gcwq->lock to avoid racing between drain_workqueue checking to make sure the workqueues are empty and cwq_dec_nr_in_flight decrementing and then incrementing nr_active when it activates a delayed work. We discovered this when a corner case in one of our drivers resulted in us trying to destroy a workqueue in which the remaining work would always requeue itself again in the same workqueue. We would hit this race condition and trip the BUG_ON on workqueue.c:3080. Signed-off-by: Thomas Tuttle <ttuttle@chromium.org> Acked-by: Tejun Heo <tj@kernel.org> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/gpio/gpio-generic.c')
0 files changed, 0 insertions, 0 deletions