Bug 13136
Summary: | possible circular locking dependency detected while suspending laptop to S3 | ||
---|---|---|---|
Product: | Other | Reporter: | Christian Casteyde (casteyde.christian) |
Component: | Other | Assignee: | other_other |
Status: | CLOSED CODE_FIX | ||
Severity: | normal | CC: | rjw |
Priority: | P1 | ||
Hardware: | All | ||
OS: | Linux | ||
Kernel Version: | 2.6.30-rc2 | Subsystem: | |
Regression: | Yes | Bisected commit-id: | |
Bug Depends on: | |||
Bug Blocks: | 13070 |
Description
Christian Casteyde
2009-04-18 11:17:46 UTC
Your patch seems to work Oliver. I didn't reproduced the behaviour after several suspend/resume cycle. The patch was (applied manually, was rejected on vanilla -rc2, but it's OK otherwise): commit 4bdc818cca662000cf195b1e83e8a0f8a3f0b9c6 Author: Oliver Neukum <oneukum@linux-d698.(none)> Date: Tue Apr 21 15:33:41 2009 +0200 avoid deadlock in usbhid_close by cancelling workqueues diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 4306cb1..900ce18 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -662,8 +662,8 @@ void usbhid_close(struct hid_device *hid) spin_lock_irq(&usbhid->lock); if (!--hid->open) { spin_unlock_irq(&usbhid->lock); + hid_cancel_delayed_stuff(usbhid); usb_kill_urb(usbhid->urbin); - flush_scheduled_work(); usbhid->intf->needs_remote_wakeup = 0; } else { spin_unlock_irq(&usbhid->lock); Handled-By : Oliver Neukum <oliver@neukum.org> Patch : http://bugzilla.kernel.org/show_bug.cgi?id=13136#c1 Fixed by commit 89092ddd7aca598e3b8874f7a49216e7917d8f3f . |