From mboxrd@z Thu Jan 1 00:00:00 1970 From: majianpeng Subject: Re: [BUG] suspicious RCU usage Date: Fri, 03 May 2013 18:35:42 +0800 Message-ID: <518392FE.4000302@gmail.com> References: <51835EFD.2070403@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Return-path: Received: from mail-pa0-f47.google.com ([209.85.220.47]:51273 "EHLO mail-pa0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752453Ab3ECKfu (ORCPT ); Fri, 3 May 2013 06:35:50 -0400 Received: by mail-pa0-f47.google.com with SMTP id kl13so859615pab.20 for ; Fri, 03 May 2013 03:35:50 -0700 (PDT) In-Reply-To: Sender: linux-input-owner@vger.kernel.org List-Id: linux-input@vger.kernel.org To: Jiri Kosina Cc: Benjamin Tissoires , Dmitry Torokhov , linux-input On 05/03/2013 04:23 PM, Jiri Kosina wrote: > On Fri, 3 May 2013, Benjamin Tissoires wrote: > >> Thanks for reporting it. >> >> Jiri, we had a similar bug in the RH bugzilla: >> https://bugzilla.redhat.com/show_bug.cgi?id=958935 >> >> Are these two reports potentially fixed by your patch "HID: protect >> hid_debug_list" (https://patchwork.kernel.org/patch/2453931/) >> If so, maybe we should send it to stable as well... > I actually believe this bug is *introduced* by that patch :) All the > reports were with the kernel containing it, right? > > Does the patch below fix it, please? > > > > > drivers/hid/hid-core.c | 2 +- > drivers/hid/hid-debug.c | 14 ++++++++------ > include/linux/hid.h | 2 +- > 3 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c > index 1e51159..264f550 100644 > --- a/drivers/hid/hid-core.c > +++ b/drivers/hid/hid-core.c > @@ -2342,7 +2342,7 @@ struct hid_device *hid_allocate_device(void) > > init_waitqueue_head(&hdev->debug_wait); > INIT_LIST_HEAD(&hdev->debug_list); > - mutex_init(&hdev->debug_list_lock); > + spin_lock_init(&hdev->debug_list_lock); > sema_init(&hdev->driver_lock, 1); > sema_init(&hdev->driver_input_lock, 1); > > diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c > index 7e56cb3..572572c 100644 > --- a/drivers/hid/hid-debug.c > +++ b/drivers/hid/hid-debug.c > @@ -580,14 +580,14 @@ void hid_debug_event(struct hid_device *hdev, char *buf) > int i; > struct hid_debug_list *list; > > - mutex_lock(&hdev->debug_list_lock); > + spin_lock(&hdev->debug_list_lock); > list_for_each_entry(list, &hdev->debug_list, node) { > for (i = 0; i < strlen(buf); i++) > list->hid_debug_buf[(list->tail + i) % HID_DEBUG_BUFSIZE] = > buf[i]; > list->tail = (list->tail + i) % HID_DEBUG_BUFSIZE; > } > - mutex_unlock(&hdev->debug_list_lock); > + spin_unlock(&hdev->debug_list_lock); > > wake_up_interruptible(&hdev->debug_wait); > } > @@ -977,6 +977,7 @@ static int hid_debug_events_open(struct inode *inode, struct file *file) > { > int err = 0; > struct hid_debug_list *list; > + unsigned long flags; > > if (!(list = kzalloc(sizeof(struct hid_debug_list), GFP_KERNEL))) { > err = -ENOMEM; > @@ -992,9 +993,9 @@ static int hid_debug_events_open(struct inode *inode, struct file *file) > file->private_data = list; > mutex_init(&list->read_mutex); > > - mutex_lock(&list->hdev->debug_list_lock); > + spin_lock_irqsave(&list->hdev->debug_list_lock, flags); > list_add_tail(&list->node, &list->hdev->debug_list); > - mutex_unlock(&list->hdev->debug_list_lock); > + spin_unlock_irqrestore(&list->hdev->debug_list_lock, flags); > > out: > return err; > @@ -1088,10 +1089,11 @@ static unsigned int hid_debug_events_poll(struct file *file, poll_table *wait) > static int hid_debug_events_release(struct inode *inode, struct file *file) > { > struct hid_debug_list *list = file->private_data; > + unsigned long flags; > > - mutex_lock(&list->hdev->debug_list_lock); > + spin_lock_irqsave(&list->hdev->debug_list_lock, flags); > list_del(&list->node); > - mutex_unlock(&list->hdev->debug_list_lock); > + spin_unlock_irqrestore(&list->hdev->debug_list_lock, flags); > kfree(list->hid_debug_buf); > kfree(list); > > diff --git a/include/linux/hid.h b/include/linux/hid.h > index af1b86d..0c48991 100644 > --- a/include/linux/hid.h > +++ b/include/linux/hid.h > @@ -515,7 +515,7 @@ struct hid_device { /* device report descriptor */ > struct dentry *debug_rdesc; > struct dentry *debug_events; > struct list_head debug_list; > - struct mutex debug_list_lock; > + spinlock_t debug_list_lock; > wait_queue_head_t debug_wait; > }; > Add your patch.Found the following message: [ 150.908051] ====================================================== [ 150.908053] [ INFO: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected ] [ 150.908056] 3.9.0+ #102 Not tainted [ 150.908057] ------------------------------------------------------ [ 150.908060] Xorg/5473 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire: [ 150.908062] (&(&hdev->debug_list_lock)->rlock){+.+...}, at: [] hid_debug_event+0x32/0x100 [ 150.908072] [ 150.908072] and this task is already holding: [ 150.908074] (&(&usbhid->lock)->rlock){-.....}, at: [] usb_hidinput_input_event+0x89/0x120 [ 150.908081] which would create a new lock dependency: [ 150.908082] (&(&usbhid->lock)->rlock){-.....} -> (&(&hdev->debug_list_lock)->rlock){+.+...} [ 150.908089] [ 150.908089] but this new dependency connects a HARDIRQ-irq-safe lock: [ 150.908091] (&(&usbhid->lock)->rlock){-.....} [ 150.908091] ... which became HARDIRQ-irq-safe at: [ 150.908094] [] __lock_acquire+0x91f/0x1d80 [ 150.908098] [] lock_acquire+0x97/0x1d0 [ 150.908101] [] _raw_spin_lock+0x46/0x80 [ 150.908105] [] hid_ctrl+0x45/0x1a0 [ 150.908108] [] usb_hcd_giveback_urb+0x65/0xf0 [ 150.908112] [] ehci_urb_done+0x80/0xc0 [ 150.908115] [] qh_completions+0x367/0x570 [ 150.908118] [] ehci_work+0xdb/0x8d0 [ 150.908122] [] ehci_irq+0x2d8/0x4c0 [ 150.908125] [] usb_hcd_irq+0x37/0x70 [ 150.908127] [] handle_irq_event_percpu+0x75/0x380 [ 150.908131] [] handle_irq_event+0x48/0x70 [ 150.908134] [] handle_fasteoi_irq+0x5a/0x100 [ 150.908138] [] handle_irq+0xbf/0x150 [ 150.908141] [] do_IRQ+0x5a/0xe0 [ 150.908145] [] ret_from_intr+0x0/0x13 [ 150.908148] [] __kernel_text_address+0x58/0x80 [ 150.908152] [] print_context_stack+0x8f/0xf0 [ 150.908155] [] dump_trace+0x1af/0x2d0 [ 150.908157] [] save_stack_trace+0x2b/0x50 [ 150.908162] [] create_object+0x144/0x310 [ 150.908167] [] kmemleak_alloc+0x5b/0xc0 [ 150.908170] [] kmem_cache_alloc+0x106/0x290 [ 150.908174] [] sysfs_new_dirent+0x59/0x140 [ 150.908177] [] sysfs_add_file_mode+0x6b/0x110 [ 150.908180] [] internal_create_group+0xd0/0x230 [ 150.908183] [] sysfs_create_group+0x13/0x20 [ 150.908186] [] device_add_groups+0x48/0xa0 [ 150.908190] [] device_add+0x407/0x6b0 [ 150.908193] [] input_register_device+0x200/0x5b0 [ 150.908196] [] hidinput_connect+0x15b1/0x2900 [ 150.908199] [] hid_connect+0x2dd/0x350 [ 150.908202] [] hid_device_probe+0x154/0x170 [ 150.908206] [] driver_probe_device+0x7f/0x370 [ 150.908209] [] __device_attach+0x4b/0x60 [ 150.908213] [] bus_for_each_drv+0x4e/0xa0 [ 150.908216] [] device_attach+0x98/0xb0 [ 150.908219] [] bus_probe_device+0xa0/0xc0 [ 150.908222] [] device_add+0x5ae/0x6b0 [ 150.908225] [] hid_add_device+0x174/0x370 [ 150.908228] [] usbhid_probe+0x394/0x4d0 [ 150.908231] [] usb_probe_interface+0xf5/0x240 [ 150.908234] [] driver_probe_device+0x7f/0x370 [ 150.908238] [] __device_attach+0x4b/0x60 [ 150.908241] [] bus_for_each_drv+0x4e/0xa0 [ 150.908244] [] device_attach+0x98/0xb0 [ 150.908247] [] bus_probe_device+0xa0/0xc0 [ 150.908250] [] device_add+0x5ae/0x6b0 [ 150.908253] [] usb_set_configuration+0x4db/0x820 [ 150.908256] [] generic_probe+0x37/0x90 [ 150.908260] [] usb_probe_device+0x32/0x60 [ 150.908263] [] driver_probe_device+0x7f/0x370 [ 150.908266] [] __device_attach+0x4b/0x60 [ 150.908269] [] bus_for_each_drv+0x4e/0xa0 [ 150.908272] [] device_attach+0x98/0xb0 [ 150.908275] [] bus_probe_device+0xa0/0xc0 [ 150.908278] [] device_add+0x5ae/0x6b0 [ 150.908281] [] usb_new_device+0x1c8/0x320 [ 150.908285] [] hub_thread+0x5d9/0x1570 [ 150.908288] [] kthread+0xdb/0xe0 [ 150.908292] [] ret_from_fork+0x7c/0xb0 [ 150.908295] [ 150.908295] to a HARDIRQ-irq-unsafe lock: [ 150.908297] (&(&hdev->debug_list_lock)->rlock){+.+...} [ 150.908297] ... which became HARDIRQ-irq-unsafe at: [ 150.908301] ... [] __lock_acquire+0x623/0x1d80 [ 150.908304] [] lock_acquire+0x97/0x1d0 [ 150.908307] [] _raw_spin_lock+0x46/0x80 [ 150.908310] [] hid_debug_event+0x32/0x100 [ 150.908313] [] hid_dump_input+0x67/0xa0 [ 150.908316] [] hid_set_field+0x50/0x120 [ 150.908319] [] usbhid_set_leds+0x84/0xc0 [ 150.908322] [] usbhid_start+0x528/0x5f0 [ 150.908325] [] hid_device_probe+0x140/0x170 [ 150.908328] [] driver_probe_device+0x7f/0x370 [ 150.908331] [] __device_attach+0x4b/0x60 [ 150.908335] [] bus_for_each_drv+0x4e/0xa0 [ 150.908337] [] device_attach+0x98/0xb0 [ 150.908340] [] bus_probe_device+0xa0/0xc0 [ 150.908344] [] device_add+0x5ae/0x6b0 [ 150.908346] [] hid_add_device+0x174/0x370 [ 150.908350] [] usbhid_probe+0x394/0x4d0 [ 150.908353] [] usb_probe_interface+0xf5/0x240 [ 150.908356] [] driver_probe_device+0x7f/0x370 [ 150.908359] [] __device_attach+0x4b/0x60 [ 150.908362] [] bus_for_each_drv+0x4e/0xa0 [ 150.908365] [] device_attach+0x98/0xb0 [ 150.908368] [] bus_probe_device+0xa0/0xc0 [ 150.908371] [] device_add+0x5ae/0x6b0 [ 150.908373] [] usb_set_configuration+0x4db/0x820 [ 150.908376] [] generic_probe+0x37/0x90 [ 150.908380] [] usb_probe_device+0x32/0x60 [ 150.908383] [] driver_probe_device+0x7f/0x370 [ 150.908386] [] __device_attach+0x4b/0x60 [ 150.908389] [] bus_for_each_drv+0x4e/0xa0 [ 150.908392] [] device_attach+0x98/0xb0 [ 150.908395] [] bus_probe_device+0xa0/0xc0 [ 150.908398] [] device_add+0x5ae/0x6b0 [ 150.908401] [] usb_new_device+0x1c8/0x320 [ 150.908404] [] hub_thread+0x5d9/0x1570 [ 150.908408] [] kthread+0xdb/0xe0 [ 150.908411] [] ret_from_fork+0x7c/0xb0 [ 150.908414] [ 150.908414] other info that might help us debug this: [ 150.908414] [ 150.908417] Possible interrupt unsafe locking scenario: [ 150.908417] [ 150.908419] CPU0 CPU1 [ 150.908420] ---- ---- [ 150.908422] lock(&(&hdev->debug_list_lock)->rlock); [ 150.908425] local_irq_disable(); [ 150.908426] lock(&(&usbhid->lock)->rlock); [ 150.908429] lock(&(&hdev->debug_list_lock)->rlock); [ 150.908432] [ 150.908433] lock(&(&usbhid->lock)->rlock); [ 150.908436] [ 150.908436] *** DEADLOCK *** [ 150.908436] [ 150.908439] 4 locks held by Xorg/5473: [ 150.908441] #0: (&evdev->mutex){+.+...}, at: [] evdev_write+0x6d/0x160 [ 150.908448] #1: (&(&dev->event_lock)->rlock#2){-.-...}, at: [] input_inject_event+0x5b/0x230 [ 150.908455] #2: (rcu_read_lock){.+.+..}, at: [] input_inject_event+0x42/0x230 [ 150.908461] #3: (&(&usbhid->lock)->rlock){-.....}, at: [] usb_hidinput_input_event+0x89/0x120 [ 150.908468] [ 150.908468] the dependencies between HARDIRQ-irq-safe lock and the holding lock: [ 150.908473] -> (&(&usbhid->lock)->rlock){-.....} ops: 11 { [ 150.908478] IN-HARDIRQ-W at: [ 150.908480] [] __lock_acquire+0x91f/0x1d80 [ 150.908483] [] lock_acquire+0x97/0x1d0 [ 150.908486] [] _raw_spin_lock+0x46/0x80 [ 150.908489] [] hid_ctrl+0x45/0x1a0 [ 150.908492] [] usb_hcd_giveback_urb+0x65/0xf0 [ 150.908495] [] ehci_urb_done+0x80/0xc0 [ 150.908498] [] qh_completions+0x367/0x570 [ 150.908501] [] ehci_work+0xdb/0x8d0 [ 150.908504] [] ehci_irq+0x2d8/0x4c0 [ 150.908507] [] usb_hcd_irq+0x37/0x70 [ 150.908510] [] handle_irq_event_percpu+0x75/0x380 [ 150.908513] [] handle_irq_event+0x48/0x70 [ 150.908516] [] handle_fasteoi_irq+0x5a/0x100 [ 150.908519] [] handle_irq+0xbf/0x150 [ 150.908522] [] do_IRQ+0x5a/0xe0 [ 150.908525] [] ret_from_intr+0x0/0x13 [ 150.908528] [] __kernel_text_address+0x58/0x80 [ 150.908531] [] print_context_stack+0x8f/0xf0 [ 150.908534] [] dump_trace+0x1af/0x2d0 [ 150.908537] [] save_stack_trace+0x2b/0x50 [ 150.908540] [] create_object+0x144/0x310 [ 150.908543] [] kmemleak_alloc+0x5b/0xc0 [ 150.908546] [] kmem_cache_alloc+0x106/0x290 [ 150.908549] [] sysfs_new_dirent+0x59/0x140 [ 150.908553] [] sysfs_add_file_mode+0x6b/0x110 [ 150.908555] [] internal_create_group+0xd0/0x230 [ 150.908558] [] sysfs_create_group+0x13/0x20 [ 150.908561] [] device_add_groups+0x48/0xa0 [ 150.908564] [] device_add+0x407/0x6b0 [ 150.908567] [] input_register_device+0x200/0x5b0 [ 150.908570] [] hidinput_connect+0x15b1/0x2900 [ 150.908573] [] hid_connect+0x2dd/0x350 [ 150.908576] [] hid_device_probe+0x154/0x170 [ 150.908579] [] driver_probe_device+0x7f/0x370 [ 150.908583] [] __device_attach+0x4b/0x60 [ 150.908586] [] bus_for_each_drv+0x4e/0xa0 [ 150.908589] [] device_attach+0x98/0xb0 [ 150.908592] [] bus_probe_device+0xa0/0xc0 [ 150.908595] [] device_add+0x5ae/0x6b0 [ 150.908598] [] hid_add_device+0x174/0x370 [ 150.908602] [] usbhid_probe+0x394/0x4d0 [ 150.908605] [] usb_probe_interface+0xf5/0x240 [ 150.908608] [] driver_probe_device+0x7f/0x370 [ 150.908611] [] __device_attach+0x4b/0x60 [ 150.908614] [] bus_for_each_drv+0x4e/0xa0 [ 150.908617] [] device_attach+0x98/0xb0 [ 150.908620] [] bus_probe_device+0xa0/0xc0 [ 150.908623] [] device_add+0x5ae/0x6b0 [ 150.908626] [] usb_set_configuration+0x4db/0x820 [ 150.908629] [] generic_probe+0x37/0x90 [ 150.908633] [] usb_probe_device+0x32/0x60 [ 150.908635] [] driver_probe_device+0x7f/0x370 [ 150.908638] [] __device_attach+0x4b/0x60 [ 150.908641] [] bus_for_each_drv+0x4e/0xa0 [ 150.908644] [] device_attach+0x98/0xb0 [ 150.908647] [] bus_probe_device+0xa0/0xc0 [ 150.908650] [] device_add+0x5ae/0x6b0 [ 150.908653] [] usb_new_device+0x1c8/0x320 [ 150.908656] [] hub_thread+0x5d9/0x1570 [ 150.908659] [] kthread+0xdb/0xe0 [ 150.908662] [] ret_from_fork+0x7c/0xb0 [ 150.908665] INITIAL USE at: [ 150.908667] [] __lock_acquire+0x316/0x1d80 [ 150.908670] [] lock_acquire+0x97/0x1d0 [ 150.908673] [] _raw_spin_lock_irqsave+0x58/0xa0 [ 150.908676] [] usbhid_submit_report+0x40/0x80 [ 150.908679] [] usbhid_init_reports+0x40/0x110 [ 150.908682] [] usbhid_start+0x513/0x5f0 [ 150.908685] [] hid_device_probe+0x140/0x170 [ 150.908688] [] driver_probe_device+0x7f/0x370 [ 150.908691] [] __device_attach+0x4b/0x60 [ 150.908694] [] bus_for_each_drv+0x4e/0xa0 [ 150.908697] [] device_attach+0x98/0xb0 [ 150.908700] [] bus_probe_device+0xa0/0xc0 [ 150.908703] [] device_add+0x5ae/0x6b0 [ 150.908706] [] hid_add_device+0x174/0x370 [ 150.908710] [] usbhid_probe+0x394/0x4d0 [ 150.908712] [] usb_probe_interface+0xf5/0x240 [ 150.908716] [] driver_probe_device+0x7f/0x370 [ 150.908719] [] __device_attach+0x4b/0x60 [ 150.908722] [] bus_for_each_drv+0x4e/0xa0 [ 150.908725] [] device_attach+0x98/0xb0 [ 150.908728] [] bus_probe_device+0xa0/0xc0 [ 150.908731] [] device_add+0x5ae/0x6b0 [ 150.908734] [] usb_set_configuration+0x4db/0x820 [ 150.908737] [] generic_probe+0x37/0x90 [ 150.908740] [] usb_probe_device+0x32/0x60 [ 150.908743] [] driver_probe_device+0x7f/0x370 [ 150.908746] [] __device_attach+0x4b/0x60 [ 150.908749] [] bus_for_each_drv+0x4e/0xa0 [ 150.908752] [] device_attach+0x98/0xb0 [ 150.908755] [] bus_probe_device+0xa0/0xc0 [ 150.908758] [] device_add+0x5ae/0x6b0 [ 150.908761] [] usb_new_device+0x1c8/0x320 [ 150.908764] [] hub_thread+0x5d9/0x1570 [ 150.908767] [] kthread+0xdb/0xe0 [ 150.908771] [] ret_from_fork+0x7c/0xb0 [ 150.908774] } [ 150.908775] ... key at: [] __key.28245+0x0/0x8 [ 150.908780] ... acquired at: [ 150.908782] [] check_irq_usage+0x5b/0xe0 [ 150.908784] [] __lock_acquire+0xe9b/0x1d80 [ 150.908787] [] lock_acquire+0x97/0x1d0 [ 150.908790] [] _raw_spin_lock+0x46/0x80 [ 150.908792] [] hid_debug_event+0x32/0x100 [ 150.908796] [] hid_dump_input+0x67/0xa0 [ 150.908799] [] hid_set_field+0x50/0x120 [ 150.908802] [] usb_hidinput_input_event+0x9a/0x120 [ 150.908805] [] input_handle_event+0x8e/0x530 [ 150.908808] [] input_inject_event+0x1d0/0x230 [ 150.908820] [] evdev_write+0xde/0x160 [ 150.908825] [] vfs_write+0xc8/0x1f0 [ 150.908831] [] SyS_write+0x55/0xa0 [ 150.908837] [] system_call_fastpath+0x16/0x1b [ 150.908843] [ 150.908846] [ 150.908846] the dependencies between the lock to be acquired and HARDIRQ-irq-unsafe lock: [ 150.908863] -> (&(&hdev->debug_list_lock)->rlock){+.+...} ops: 2 { [ 150.908881] HARDIRQ-ON-W at: [ 150.908885] [] __lock_acquire+0x623/0x1d80 [ 150.908891] [] lock_acquire+0x97/0x1d0 [ 150.908897] [] _raw_spin_lock+0x46/0x80 [ 150.908903] [] hid_debug_event+0x32/0x100 [ 150.908909] [] hid_dump_input+0x67/0xa0 [ 150.908916] [] hid_set_field+0x50/0x120 [ 150.908923] [] usbhid_set_leds+0x84/0xc0 [ 150.908929] [] usbhid_start+0x528/0x5f0 [ 150.908936] [] hid_device_probe+0x140/0x170 [ 150.908943] [] driver_probe_device+0x7f/0x370 [ 150.908950] [] __device_attach+0x4b/0x60 [ 150.908956] [] bus_for_each_drv+0x4e/0xa0 [ 150.908963] [] device_attach+0x98/0xb0 [ 150.908969] [] bus_probe_device+0xa0/0xc0 [ 150.908975] [] device_add+0x5ae/0x6b0 [ 150.908981] [] hid_add_device+0x174/0x370 [ 150.908989] [] usbhid_probe+0x394/0x4d0 [ 150.908995] [] usb_probe_interface+0xf5/0x240 [ 150.909001] [] driver_probe_device+0x7f/0x370 [ 150.909008] [] __device_attach+0x4b/0x60 [ 150.909015] [] bus_for_each_drv+0x4e/0xa0 [ 150.909021] [] device_attach+0x98/0xb0 [ 150.909027] [] bus_probe_device+0xa0/0xc0 [ 150.909034] [] device_add+0x5ae/0x6b0 [ 150.909040] [] usb_set_configuration+0x4db/0x820 [ 150.909046] [] generic_probe+0x37/0x90 [ 150.909053] [] usb_probe_device+0x32/0x60 [ 150.909059] [] driver_probe_device+0x7f/0x370 [ 150.909065] [] __device_attach+0x4b/0x60 [ 150.909072] [] bus_for_each_drv+0x4e/0xa0 [ 150.909078] [] device_attach+0x98/0xb0 [ 150.909084] [] bus_probe_device+0xa0/0xc0 [ 150.909091] [] device_add+0x5ae/0x6b0 [ 150.909097] [] usb_new_device+0x1c8/0x320 [ 150.909104] [] hub_thread+0x5d9/0x1570 [ 150.909111] [] kthread+0xdb/0xe0 [ 150.909117] [] ret_from_fork+0x7c/0xb0 [ 150.909124] SOFTIRQ-ON-W at: [ 150.909128] [] __lock_acquire+0x658/0x1d80 [ 150.909134] [] lock_acquire+0x97/0x1d0 [ 150.909140] [] _raw_spin_lock+0x46/0x80 [ 150.909146] [] hid_debug_event+0x32/0x100 [ 150.909152] [] hid_dump_input+0x67/0xa0 [ 150.909159] [] hid_set_field+0x50/0x120 [ 150.909166] [] usbhid_set_leds+0x84/0xc0 [ 150.909172] [] usbhid_start+0x528/0x5f0 [ 150.909178] [] hid_device_probe+0x140/0x170 [ 150.909185] [] driver_probe_device+0x7f/0x370 [ 150.909192] [] __device_attach+0x4b/0x60 [ 150.909198] [] bus_for_each_drv+0x4e/0xa0 [ 150.909205] [] device_attach+0x98/0xb0 [ 150.909211] [] bus_probe_device+0xa0/0xc0 [ 150.909218] [] device_add+0x5ae/0x6b0 [ 150.909224] [] hid_add_device+0x174/0x370 [ 150.909231] [] usbhid_probe+0x394/0x4d0 [ 150.909237] [] usb_probe_interface+0xf5/0x240 [ 150.909244] [] driver_probe_device+0x7f/0x370 [ 150.909250] [] __device_attach+0x4b/0x60 [ 150.909257] [] bus_for_each_drv+0x4e/0xa0 [ 150.909263] [] device_attach+0x98/0xb0 [ 150.909270] [] bus_probe_device+0xa0/0xc0 [ 150.909276] [] device_add+0x5ae/0x6b0 [ 150.909282] [] usb_set_configuration+0x4db/0x820 [ 150.909288] [] generic_probe+0x37/0x90 [ 150.909296] [] usb_probe_device+0x32/0x60 [ 150.909301] [] driver_probe_device+0x7f/0x370 [ 150.909308] [] __device_attach+0x4b/0x60 [ 150.909315] [] bus_for_each_drv+0x4e/0xa0 [ 150.909321] [] device_attach+0x98/0xb0 [ 150.909327] [] bus_probe_device+0xa0/0xc0 [ 150.909334] [] device_add+0x5ae/0x6b0 [ 150.909340] [] usb_new_device+0x1c8/0x320 [ 150.909347] [] hub_thread+0x5d9/0x1570 [ 150.909354] [] kthread+0xdb/0xe0 [ 150.909361] [] ret_from_fork+0x7c/0xb0 [ 150.909367] INITIAL USE at: [ 150.909371] [] __lock_acquire+0x316/0x1d80 [ 150.909377] [] lock_acquire+0x97/0x1d0 [ 150.909382] [] _raw_spin_lock+0x46/0x80 [ 150.909388] [] hid_debug_event+0x32/0x100 [ 150.909395] [] hid_dump_input+0x67/0xa0 [ 150.909401] [] hid_set_field+0x50/0x120 [ 150.909408] [] usbhid_set_leds+0x84/0xc0 [ 150.909414] [] usbhid_start+0x528/0x5f0 [ 150.909420] [] hid_device_probe+0x140/0x170 [ 150.909427] [] driver_probe_device+0x7f/0x370 [ 150.909433] [] __device_attach+0x4b/0x60 [ 150.909440] [] bus_for_each_drv+0x4e/0xa0 [ 150.909446] [] device_attach+0x98/0xb0 [ 150.909453] [] bus_probe_device+0xa0/0xc0 [ 150.909459] [] device_add+0x5ae/0x6b0 [ 150.909465] [] hid_add_device+0x174/0x370 [ 150.909471] [] usbhid_probe+0x394/0x4d0 [ 150.909477] [] usb_probe_interface+0xf5/0x240 [ 150.909484] [] driver_probe_device+0x7f/0x370 [ 150.909490] [] __device_attach+0x4b/0x60 [ 150.909496] [] bus_for_each_drv+0x4e/0xa0 [ 150.909503] [] device_attach+0x98/0xb0 [ 150.909509] [] bus_probe_device+0xa0/0xc0 [ 150.909515] [] device_add+0x5ae/0x6b0 [ 150.909521] [] usb_set_configuration+0x4db/0x820 [ 150.909528] [] generic_probe+0x37/0x90 [ 150.909535] [] usb_probe_device+0x32/0x60 [ 150.909540] [] driver_probe_device+0x7f/0x370 [ 150.909547] [] __device_attach+0x4b/0x60 [ 150.909554] [] bus_for_each_drv+0x4e/0xa0 [ 150.909560] [] device_attach+0x98/0xb0 [ 150.909566] [] bus_probe_device+0xa0/0xc0 [ 150.909572] [] device_add+0x5ae/0x6b0 [ 150.909578] [] usb_new_device+0x1c8/0x320 [ 150.909585] [] hub_thread+0x5d9/0x1570 [ 150.909592] [] kthread+0xdb/0xe0 [ 150.909598] [] ret_from_fork+0x7c/0xb0 [ 150.909605] } [ 150.909607] ... key at: [] __key.25753+0x0/0x8 [ 150.909613] ... acquired at: [ 150.909616] [] check_irq_usage+0x5b/0xe0 [ 150.909622] [] __lock_acquire+0xe9b/0x1d80 [ 150.909627] [] lock_acquire+0x97/0x1d0 [ 150.909633] [] _raw_spin_lock+0x46/0x80 [ 150.909638] [] hid_debug_event+0x32/0x100 [ 150.909645] [] hid_dump_input+0x67/0xa0 [ 150.909651] [] hid_set_field+0x50/0x120 [ 150.909658] [] usb_hidinput_input_event+0x9a/0x120 [ 150.909664] [] input_handle_event+0x8e/0x530 [ 150.909670] [] input_inject_event+0x1d0/0x230 [ 150.909676] [] evdev_write+0xde/0x160 [ 150.909682] [] vfs_write+0xc8/0x1f0 [ 150.909687] [] SyS_write+0x55/0xa0 [ 150.909693] [] system_call_fastpath+0x16/0x1b [ 150.909698] [ 150.909701] [ 150.909701] stack backtrace: [ 150.909708] CPU: 1 PID: 5473 Comm: Xorg Not tainted 3.9.0+ #102 [ 150.909712] Hardware name: Dell Inc. OptiPlex 390/0M5DCD, BIOS A09 07/24/2012 [ 150.909716] ffffffff82213570 ffff88006c279a70 ffffffff816f89af ffff88006c279b68 [ 150.909726] ffffffff810afb34 0000000000000000 ffff880000000000 ffff880000000001 [ 150.909736] ffff88006c279ac0 ffffffff81a083a5 ffff88006c279b00 ffff88006c279ac0 [ 150.909745] Call Trace: [ 150.909753] [] dump_stack+0x19/0x1b [ 150.909760] [] check_usage+0x4e4/0x4f0 [ 150.909768] [] check_irq_usage+0x5b/0xe0 [ 150.909774] [] __lock_acquire+0xe9b/0x1d80 [ 150.909783] [] ? trace_hardirqs_off+0xd/0x10 [ 150.909791] [] ? local_clock+0x4f/0x60 [ 150.909798] [] ? lock_release_holdtime.part.24+0xf/0x190 [ 150.909807] [] ? string.isra.3+0x3a/0xd0 [ 150.909814] [] lock_acquire+0x97/0x1d0 [ 150.909821] [] ? hid_debug_event+0x32/0x100 [ 150.909827] [] _raw_spin_lock+0x46/0x80 [ 150.909835] [] ? hid_debug_event+0x32/0x100 [ 150.909842] [] hid_debug_event+0x32/0x100 [ 150.909849] [] hid_dump_input+0x67/0xa0 [ 150.909857] [] hid_set_field+0x50/0x120 [ 150.909864] [] usb_hidinput_input_event+0x9a/0x120 [ 150.909871] [] input_handle_event+0x8e/0x530 [ 150.909878] [] input_inject_event+0x1d0/0x230 [ 150.909884] [] ? input_inject_event+0x42/0x230 [ 150.909891] [] evdev_write+0xde/0x160 [ 150.909898] [] vfs_write+0xc8/0x1f0 [ 150.909904] [] SyS_write+0x55/0xa0 [ 150.909911] [] system_call_fastpath+0x16/0x1b