Jiri Kosina
1deb9d341d
HID: debug: fix RCU preemption issue
Commit 2353f2bea ("HID: protect hid_debug_list") introduced mutex
locking around debug_list access to prevent SMP races when debugfs
nodes are being operated upon by multiple userspace processess.
mutex is not a proper synchronization primitive though, as the hid-debug
callbacks are being called from atomic contexts.
We also have to be careful about disabling IRQs when taking the lock
to prevent deadlock against IRQ handlers.
Benjamin reports this has also been reported in RH bugzilla as bug #958935.
===============================
[ INFO: suspicious RCU usage. ]
3.9.0+ #94 Not tainted
-------------------------------
include/linux/rcupdate.h:476 Illegal context switch in RCU read-side critical section!
other info that might help us debug this:
rcu_scheduler_active = 1, debug_locks = 0
4 locks held by Xorg/5502:
#0: (&evdev->mutex){+.+...}, at: [<ffffffff81512c3d>] evdev_write+0x6d/0x160
#1: (&(&dev->event_lock)->rlock#2){-.-...}, at: [<ffffffff8150dd9b>] input_inject_event+0x5b/0x230
#2: (rcu_read_lock){.+.+..}, at: [<ffffffff8150dd82>] input_inject_event+0x42/0x230
#3: (&(&usbhid->lock)->rlock){-.....}, at: [<ffffffff81565289>] usb_hidinput_input_event+0x89/0x120
stack backtrace:
CPU: 0 PID: 5502 Comm: Xorg Not tainted 3.9.0+ #94
Hardware name: Dell Inc. OptiPlex 390/0M5DCD, BIOS A09 07/24/2012
0000000000000001 ffff8800689c7c38 ffffffff816f249f ffff8800689c7c68
ffffffff810acb1d 0000000000000000 ffffffff81a03ac7 000000000000019d
0000000000000000 ffff8800689c7c90 ffffffff8107cda7 0000000000000000
Call Trace:
[<ffffffff816f249f>] dump_stack+0x19/0x1b
[<ffffffff810acb1d>] lockdep_rcu_suspicious+0xfd/0x130
[<ffffffff8107cda7>] __might_sleep+0xc7/0x230
[<ffffffff816f7770>] mutex_lock_nested+0x40/0x3a0
[<ffffffff81312ac4>] ? vsnprintf+0x354/0x640
[<ffffffff81553cc4>] hid_debug_event+0x34/0x100
[<ffffffff81554197>] hid_dump_input+0x67/0xa0
[<ffffffff81556430>] hid_set_field+0x50/0x120
[<ffffffff8156529a>] usb_hidinput_input_event+0x9a/0x120
[<ffffffff8150d89e>] input_handle_event+0x8e/0x530
[<ffffffff8150df10>] input_inject_event+0x1d0/0x230
[<ffffffff8150dd82>] ? input_inject_event+0x42/0x230
[<ffffffff81512cae>] evdev_write+0xde/0x160
[<ffffffff81185038>] vfs_write+0xc8/0x1f0
[<ffffffff81185535>] SyS_write+0x55/0xa0
[<ffffffff81704482>] system_call_fastpath+0x16/0x1b
BUG: sleeping function called from invalid context at kernel/mutex.c:413
in_atomic(): 1, irqs_disabled(): 1, pid: 5502, name: Xorg
INFO: lockdep is turned off.
irq event stamp: 1098574
hardirqs last enabled at (1098573): [<ffffffff816fb53f>] _raw_spin_unlock_irqrestore+0x3f/0x70
hardirqs last disabled at (1098574): [<ffffffff816faaf5>] _raw_spin_lock_irqsave+0x25/0xa0
softirqs last enabled at (1098306): [<ffffffff8104971f>] __do_softirq+0x18f/0x3c0
softirqs last disabled at (1097867): [<ffffffff81049ad5>] irq_exit+0xa5/0xb0
CPU: 0 PID: 5502 Comm: Xorg Not tainted 3.9.0+ #94
Hardware name: Dell Inc. OptiPlex 390/0M5DCD, BIOS A09 07/24/2012
ffffffff81a03ac7 ffff8800689c7c68 ffffffff816f249f ffff8800689c7c90
ffffffff8107ce60 0000000000000000 ffff8800689c7fd8 ffff88006a62c800
ffff8800689c7d10 ffffffff816f7770 ffff8800689c7d00 ffffffff81312ac4
Call Trace:
[<ffffffff816f249f>] dump_stack+0x19/0x1b
[<ffffffff8107ce60>] __might_sleep+0x180/0x230
[<ffffffff816f7770>] mutex_lock_nested+0x40/0x3a0
[<ffffffff81312ac4>] ? vsnprintf+0x354/0x640
[<ffffffff81553cc4>] hid_debug_event+0x34/0x100
[<ffffffff81554197>] hid_dump_input+0x67/0xa0
[<ffffffff81556430>] hid_set_field+0x50/0x120
[<ffffffff8156529a>] usb_hidinput_input_event+0x9a/0x120
[<ffffffff8150d89e>] input_handle_event+0x8e/0x530
[<ffffffff8150df10>] input_inject_event+0x1d0/0x230
[<ffffffff8150dd82>] ? input_inject_event+0x42/0x230
[<ffffffff81512cae>] evdev_write+0xde/0x160
[<ffffffff81185038>] vfs_write+0xc8/0x1f0
[<ffffffff81185535>] SyS_write+0x55/0xa0
[<ffffffff81704482>] system_call_fastpath+0x16/0x1b
Reported-by: majianpeng <majianpeng@gmail.com>
Reported-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
2013-05-06 13:07:33 +02:00 |
| .. |
|
i2c-hid
|
HID: i2c-hid: fix length for set/get report in i2c hid
|
2013-04-04 09:59:32 +02:00 |
|
usbhid
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
|
2013-04-30 09:37:55 -07:00 |
|
hid-a4tech.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-apple.c
|
Merge branches 'for-3.10/appleir', 'for-3.10/hid-debug', 'for-3.10/hid-driver-transport-cleanups', 'for-3.10/i2c-hid' and 'for-3.10/logitech' into for-linus
|
2013-04-30 10:12:44 +02:00 |
|
hid-appleir.c
|
HID: appleir: add support for Apple ir devices
|
2013-04-18 19:06:20 -07:00 |
|
hid-aureal.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-axff.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-belkin.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-cherry.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-chicony.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-core.c
|
HID: debug: fix RCU preemption issue
|
2013-05-06 13:07:33 +02:00 |
|
hid-cypress.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-debug.c
|
HID: debug: fix RCU preemption issue
|
2013-05-06 13:07:33 +02:00 |
|
hid-dr.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-elecom.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-emsff.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-ezkey.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-gaff.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-generic.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-gyration.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-holtek-kbd.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-holtekff.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-hyperv.c
|
Drivers: hid: hid-hyperv: Use consolidated GUID definitions
|
2013-01-25 11:17:31 -08:00 |
|
hid-icade.c
|
HID: icade: u16 which never < 0
|
2013-04-24 16:32:27 +02:00 |
|
hid-ids.h
|
Merge branches 'for-3.10/wiimote' and 'for-3.9/upstream-fixes' into for-linus
|
2013-04-30 10:19:21 +02:00 |
|
hid-input.c
|
HID: input: don't register unmapped input devices
|
2013-03-27 14:02:45 +01:00 |
|
hid-kensington.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-keytouch.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-kye.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-lcpower.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-lenovo-tpkbd.c
|
Merge branches 'for-3.10/multitouch', 'for-3.10/roccat' and 'for-3.10/upstream' into for-linus
|
2013-04-30 10:19:07 +02:00 |
|
hid-lg.c
|
Merge branches 'for-3.9/logitech', 'for-3.9/multitouch', 'for-3.9/ntrig', 'for-3.9/thingm' and 'for-3.9/upstream' into for-linus
|
2013-02-21 10:45:01 +01:00 |
|
hid-lg.h
|
HID: hid-lg4ff: Adjust X axis input value accordingly to selected range.
|
2012-09-25 15:41:02 +02:00 |
|
hid-lg2ff.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-lg3ff.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-lg4ff.c
|
Merge branches 'for-3.10/appleir', 'for-3.10/hid-debug', 'for-3.10/hid-driver-transport-cleanups', 'for-3.10/i2c-hid' and 'for-3.10/logitech' into for-linus
|
2013-04-30 10:12:44 +02:00 |
|
hid-lgff.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-logitech-dj.c
|
Merge branches 'for-3.10/appleir', 'for-3.10/hid-debug', 'for-3.10/hid-driver-transport-cleanups', 'for-3.10/i2c-hid' and 'for-3.10/logitech' into for-linus
|
2013-04-30 10:12:44 +02:00 |
|
hid-logitech-dj.h
|
Revert "HID: Fix logitech-dj: missing Unifying device issue"
|
2013-03-01 14:14:59 +01:00 |
|
hid-magicmouse.c
|
Merge branches 'for-3.10/appleir', 'for-3.10/hid-debug', 'for-3.10/hid-driver-transport-cleanups', 'for-3.10/i2c-hid' and 'for-3.10/logitech' into for-linus
|
2013-04-30 10:12:44 +02:00 |
|
hid-microsoft.c
|
HID: Add PID for Japanese version of NE4K keyboard
|
2013-04-29 10:16:55 +02:00 |
|
hid-monterey.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-multitouch.c
|
Merge branch 'for-3.10/mt-hybrid-finger-pen' into for-linus
|
2013-04-30 10:17:48 +02:00 |
|
hid-ntrig.c
|
HID: use hid_hw_wait() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-ortek.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-petalynx.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-picolcd.h
|
Merge branches 'for-3.10/multitouch', 'for-3.10/roccat' and 'for-3.10/upstream' into for-linus
|
2013-04-30 10:19:07 +02:00 |
|
hid-picolcd_backlight.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-picolcd_cir.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-picolcd_core.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-picolcd_debugfs.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-picolcd_fb.c
|
HID: use hid_hw_wait() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-picolcd_lcd.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-picolcd_leds.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-pl.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-primax.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-prodikeys.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-ps3remote.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-roccat-arvo.c
|
HID: roccat: rename roccat_common functions to roccat_common2
|
2012-06-28 10:34:01 +02:00 |
|
hid-roccat-arvo.h
|
|
|
|
hid-roccat-common.c
|
HID: roccat: rename roccat_common functions to roccat_common2
|
2012-06-28 10:34:01 +02:00 |
|
hid-roccat-common.h
|
HID: roccat: rename roccat_common functions to roccat_common2
|
2012-06-28 10:34:01 +02:00 |
|
hid-roccat-isku.c
|
HID: roccat: add support for IskuFX
|
2013-03-14 11:50:49 +01:00 |
|
hid-roccat-isku.h
|
HID: roccat: add support for IskuFX
|
2013-03-14 11:50:49 +01:00 |
|
hid-roccat-kone.c
|
HID: roccat: added media key support for Kone
|
2013-04-08 10:33:13 +02:00 |
|
hid-roccat-kone.h
|
HID: roccat: added media key support for Kone
|
2013-04-08 10:33:13 +02:00 |
|
hid-roccat-koneplus.c
|
HID: roccat: deprecate some Koneplus attributes
|
2012-11-12 15:30:28 +01:00 |
|
hid-roccat-koneplus.h
|
HID: roccat: fix wrong attr size for koneplus tcu
|
2012-11-18 22:58:28 +01:00 |
|
hid-roccat-konepure.c
|
HID: roccat: add support for Roccat Kone Pure gaming mouse
|
2013-03-14 11:50:49 +01:00 |
|
hid-roccat-konepure.h
|
HID: roccat: add support for Roccat Kone Pure gaming mouse
|
2013-03-14 11:50:49 +01:00 |
|
hid-roccat-kovaplus.c
|
HID: roccat: deprecate some Kovaplus attributes
|
2012-11-12 15:30:29 +01:00 |
|
hid-roccat-kovaplus.h
|
HID: roccat: deprecate some Kovaplus attributes
|
2012-11-12 15:30:29 +01:00 |
|
hid-roccat-lua.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-roccat-lua.h
|
HID: roccat: add support for Roccat Lua
|
2012-10-17 10:44:47 +02:00 |
|
hid-roccat-pyra.c
|
HID: roccat: deprecated some Pyra attributes
|
2012-11-12 15:30:28 +01:00 |
|
hid-roccat-pyra.h
|
HID: roccat: deprecated some Pyra attributes
|
2012-11-12 15:30:28 +01:00 |
|
hid-roccat-savu.c
|
HID: roccat: enable Savu device reset
|
2012-11-05 13:17:39 +01:00 |
|
hid-roccat-savu.h
|
HID: roccat: added sensor sysfs attribute for Savu
|
2012-07-20 09:50:42 +02:00 |
|
hid-roccat.c
|
HID: roccat: fix comments on chardevice
|
2013-03-14 11:50:49 +01:00 |
|
hid-saitek.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-samsung.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-sensor-hub.c
|
HID: use hid_hw_wait() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-sjoy.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-sony.c
|
Merge branches 'for-3.9/sony' and 'for-3.9/steelseries' into for-linus
|
2013-02-21 10:45:52 +01:00 |
|
hid-speedlink.c
|
HID: Kconfig: Remove explicit transport layer dependencies
|
2013-02-25 13:26:40 +01:00 |
|
hid-steelseries.c
|
HID: hid-steelseries fix led class build issue
|
2013-05-03 10:26:52 +02:00 |
|
hid-sunplus.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-thingm.c
|
HID: Kconfig: Remove explicit transport layer dependencies
|
2013-02-25 13:26:40 +01:00 |
|
hid-tivo.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-tmff.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-topseed.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-twinhan.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-uclogic.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-wacom.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-waltop.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hid-wiimote-core.c
|
HID: wiimote: parse reduced status reports
|
2013-04-04 09:38:43 +02:00 |
|
hid-wiimote-debug.c
|
HID: Fix uninitialized variable "size" in hid-wiimote-debug
|
2013-01-18 10:59:24 +01:00 |
|
hid-wiimote-ext.c
|
HID: wiimote: fix nunchuck button parser
|
2013-02-18 10:41:52 +01:00 |
|
hid-wiimote.h
|
|
|
|
hid-zpff.c
|
HID: use hid_hw_request() instead of direct call to usbhid
|
2013-02-25 13:26:41 +01:00 |
|
hid-zydacron.c
|
HID: Use module_hid_driver macro
|
2013-01-03 10:27:31 +01:00 |
|
hidraw.c
|
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
|
2013-02-26 20:16:07 -08:00 |
|
Kconfig
|
Merge branches 'for-3.10/multitouch', 'for-3.10/roccat' and 'for-3.10/upstream' into for-linus
|
2013-04-30 10:19:07 +02:00 |
|
Makefile
|
Merge branches 'for-3.10/multitouch', 'for-3.10/roccat' and 'for-3.10/upstream' into for-linus
|
2013-04-30 10:19:07 +02:00 |
|
uhid.c
|
HID: uhid: make creating devices work on 64/32 systems
|
2013-02-18 11:28:16 +01:00 |