diff --git a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c index b2a68bc9f0b4..74eabcd09995 100644 --- a/drivers/input/joystick/iforce/iforce-main.c +++ b/drivers/input/joystick/iforce/iforce-main.c @@ -186,6 +186,7 @@ static void iforce_close(struct input_dev *dev) struct iforce *iforce = input_get_drvdata(dev); int i; + printk("iforce_close(%p) start\n", iforce); if (test_bit(EV_FF, dev->evbit)) { /* Check: no effects should be present in memory */ for (i = 0; i < dev->ff->max_effects; i++) { @@ -197,14 +198,17 @@ static void iforce_close(struct input_dev *dev) } } + printk("iforce_send_packet(%p) start\n", iforce); /* Disable force feedback playback */ iforce_send_packet(iforce, FF_CMD_ENABLE, "\001"); /* Wait for the command to complete */ wait_event_interruptible(iforce->wait, !test_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags)); + printk("wait_event_interruptible(%p) end\n", iforce); } iforce->xport_ops->stop_io(iforce); + printk("iforce_close(%p) end\n", iforce); } int iforce_init_device(struct device *parent, u16 bustype, diff --git a/drivers/input/joystick/iforce/iforce-usb.c b/drivers/input/joystick/iforce/iforce-usb.c index ea58805c480f..3120d94f9e0e 100644 --- a/drivers/input/joystick/iforce/iforce-usb.c +++ b/drivers/input/joystick/iforce/iforce-usb.c @@ -256,14 +256,17 @@ static void iforce_usb_disconnect(struct usb_interface *intf) { struct iforce_usb *iforce_usb = usb_get_intfdata(intf); + printk("iforce_usb_disconnect(%p) start\n", iforce_usb); usb_set_intfdata(intf, NULL); input_unregister_device(iforce_usb->iforce.dev); + printk("input_unregister_device(%p) end\n", iforce_usb); usb_free_urb(iforce_usb->irq); usb_free_urb(iforce_usb->out); kfree(iforce_usb); + printk("iforce_usb_disconnect(%p) end\n", iforce_usb); } static const struct usb_device_id iforce_usb_ids[] = { diff --git a/kernel/hung_task.c b/kernel/hung_task.c index cff3ae8c818f..adc2c2ac9d94 100644 --- a/kernel/hung_task.c +++ b/kernel/hung_task.c @@ -204,8 +204,21 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout) } unlock: rcu_read_unlock(); - if (hung_task_show_lock) - debug_show_all_locks(); + if (hung_task_show_lock) { + pr_warn("\nShowing all threads with locks held in the system:\n"); + rcu_read_lock(); + for_each_process_thread(g, t) { + if (t->lockdep_depth && t != current) { + sched_show_task(t); + debug_show_held_locks(t); + touch_nmi_watchdog(); + touch_all_softlockup_watchdogs(); + } + } + rcu_read_unlock(); + pr_warn("\n"); + pr_warn("=============================================\n\n"); + } if (hung_task_show_all_bt) { hung_task_show_all_bt = false;