linux/drivers/input
Dmitry Torokhov f6cd378372 Input: wacom - fix runtime PM related deadlock
When runtime PM is enabled by default for input devices, X hangs in
wacom open:
[<ffffffff814a00ea>] mutex_lock+0x1a/0x40
[<ffffffffa02bc94b>] wacom_resume+0x3b/0x90 [wacom]
[<ffffffff81327a32>] usb_resume_interface+0xd2/0x190
[<ffffffff81327b5d>] usb_resume_both+0x6d/0x110
[<ffffffff81327c24>] usb_runtime_resume+0x24/0x40
[<ffffffff8130a2cf>] __pm_runtime_resume+0x26f/0x450
[<ffffffff8130a23a>] __pm_runtime_resume+0x1da/0x450
[<ffffffff8130a53a>] pm_runtime_resume+0x2a/0x50
[<ffffffff81328176>] usb_autopm_get_interface+0x26/0x60
[<ffffffffa02bc626>] wacom_open+0x36/0x90 [wacom]

wacom_open() takes wacom->lock and calls usb_autopm_get_interface(),
which in turn calls wacom_resume() which tries to acquire the lock
again.

The fix is to call usb_autopm_get_interface() first, before we take
the lock.

Since we do not do usb_autopm_put_interface() until wacom_close()
is called runtime PM is effectively disabled for the driver, however
changing it now would risk regressions so the complete fix will
have to wait till the next merge window.

Reported-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2010-10-04 22:36:41 -07:00
..
gameport Merge commit 'v2.6.34-rc6' into core/locking 2010-05-03 09:17:01 +02:00
joystick Input: fix faulty XXinput_* calls 2010-08-13 12:03:24 -07:00
keyboard Input: pxa27x_keypad - remove input_free_device() in pxa27x_keypad_remove() 2010-08-25 07:51:40 -07:00
misc Input: uinput - setup MT usage during device creation 2010-09-19 16:29:57 -07:00
mouse Input: bcm5974 - adjust major/minor to scale 2010-08-31 18:00:02 -07:00
serio Input: i8042 - fix device removal on unload 2010-08-31 18:28:15 -07:00
tablet Input: wacom - fix runtime PM related deadlock 2010-10-04 22:36:41 -07:00
touchscreen touchscreen: Fix sign bug 2010-08-12 11:27:59 +02:00
Kconfig Merge branch 'xen/fbdev' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen 2009-12-10 09:34:40 -08:00
Makefile Input: add generic support for sparse keymaps 2009-12-07 09:26:35 -08:00
apm-power.c Input: apm-power - fix crash when unloading modules 2008-03-24 11:02:06 -04:00
evbug.c Input: struct device - replace bus_id with dev_name(), dev_set_name() 2008-10-30 09:29:05 -04:00
evdev.c Input: evdev - rearrange ioctl handling 2010-08-02 20:30:44 -07:00
ff-core.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
ff-memless.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
fixp-arith.h changed email 2007-10-20 00:47:32 +02:00
input-compat.c Input: refactor evdev 32bit compat to be shareable with uinput 2008-10-27 22:03:42 -04:00
input-compat.h [IA64] Remove COMPAT_IA32 support 2010-02-08 10:42:17 -08:00
input-polldev.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
input.c Input: MT - initialize slots to unused 2010-08-28 21:39:43 -07:00
joydev.c Input: joydev - fix JSIOCSAXMAP ioctl 2010-09-21 00:59:43 -07:00
mousedev.c Input: mousedev - fix regression of inverting axes 2010-08-25 07:50:44 -07:00
sparse-keymap.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2010-04-15 11:49:55 -07:00
xen-kbdfront.c x86: early PV on HVM features initialization. 2010-07-22 16:45:35 -07:00