Hi Alan, It seems the non-atomic sleep at ehci_bus_suspend during the system suspend process will cause kernel dump(see below), any suggestions?
Peter root@freescale ~$ echo mem > /sys/power/state PM: Syncing filesystems ... done. Freezing user space processes ... (elapsed 0.001 seconds) done. Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. ci_hdrc ci_hdrc.0: high speed connection ================================= [ INFO: inconsistent lock state ] 3.13.0+ #78 Not tainted --------------------------------- inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. kworker/u8:0/6 [HC0[0]:SC0[0]:HE1:SE1] takes: (&(&ehci->lock)->rlock){?.-...}, at: [<80400104>] ehci_bus_suspend+0x4c/0x49c {IN-HARDIRQ-W} state was registered at: [<80061880>] mark_lock+0x15c/0x6dc [<800628e0>] __lock_acquire+0xae0/0x1cd0 [<80063fe8>] lock_acquire+0x68/0x7c [<805eab7c>] _raw_spin_lock+0x34/0x44 [<80400574>] ehci_irq+0x20/0x324 [<803e9c98>] usb_hcd_irq+0x2c/0x40 [<8040b608>] host_irq+0x1c/0x20 [<80408124>] ci_irq+0x90/0x160 [<8006d9f0>] handle_irq_event_percpu+0x54/0x1a4 [<8006db84>] handle_irq_event+0x44/0x64 [<80070ce4>] handle_fasteoi_irq+0xc4/0x15c [<8006d354>] generic_handle_irq+0x28/0x38 [<8000f1c8>] handle_IRQ+0x54/0xb4 [<80008644>] gic_handle_irq+0x30/0x64 [<80012fa4>] __irq_svc+0x44/0x5c [<8014360c>] kernfs_remove_by_name_ns+0x38/0x8c [<80141520>] sysfs_unmerge_group+0x48/0x60 [<80332344>] rpm_sysfs_remove+0x18/0x20 [<803366b8>] pm_runtime_no_callbacks+0x44/0x48 [<8040c298>] ci_hdrc_imx_probe+0x2a8/0x38c [<8032ee8c>] platform_drv_probe+0x20/0x50 [<8032d2b8>] driver_probe_device+0x118/0x22c [<8032d468>] __driver_attach+0x9c/0xa0 [<8032b9bc>] bus_for_each_dev+0x5c/0x90 [<8032cd8c>] driver_attach+0x20/0x28 [<8032c98c>] bus_add_driver+0xe0/0x1d8 [<8032db20>] driver_register+0x80/0xfc [<8032e7d8>] __platform_driver_register+0x50/0x64 [<808006a8>] ci_hdrc_imx_driver_init+0x18/0x20 [<800088b4>] do_one_initcall+0x3c/0x168 [<807d2c74>] kernel_init_freeable+0x104/0x1d4 [<805df9ac>] kernel_init+0x10/0x118 [<8000e948>] ret_from_fork+0x14/0x2c irq event stamp: 4422 hardirqs last enabled at (4421): [<805eb2ac>] _raw_spin_unlock_irq+0x2c/0x34 hardirqs last disabled at (4422): [<805eac90>] _raw_spin_lock_irq+0x20/0x58 softirqs last enabled at (3960): [<8002afe8>] __do_softirq+0x1c4/0x280 softirqs last disabled at (3949): [<8002b3b4>] irq_exit+0xb0/0x114 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(&(&ehci->lock)->rlock); <Interrupt> lock(&(&ehci->lock)->rlock); *** DEADLOCK *** 4 locks held by kworker/u8:0/6: #0: (events_unbound){.+.+.+}, at: [<8003ccc0>] process_one_work+0x130/0x438 #1: ((&entry->work)){+.+.+.}, at: [<8003ccc0>] process_one_work+0x130/0x438 #2: (&__lockdep_no_validate__){......}, at: [<803340b8>] __device_suspend+0xb8/0x220 #3: (&(&ehci->lock)->rlock){?.-...}, at: [<80400104>] ehci_bus_suspend+0x4c/0x49c stack backtrace: CPU: 0 PID: 6 Comm: kworker/u8:0 Not tainted 3.13.0+ #78 Workqueue: events_unbound async_run_entry_fn Backtrace: [<80012220>] (dump_backtrace+0x0/0x10c) from [<800123c0>] (show_stack+0x18/0x1c) r6:bf87b3f8 r5:bf87af80 r4:00000000 r3:bf87af80 [<800123a8>] (show_stack+0x0/0x1c) from [<805e4708>] (dump_stack+0x78/0x94) [<805e4690>] (dump_stack+0x0/0x94) from [<805e2590>] (print_usage_bug+0x268/0x2d8) r4:80927080 r3:bf87af80 [<805e2328>] (print_usage_bug+0x0/0x2d8) from [<80061cd8>] (mark_lock+0x5b4/0x6dc) [<80061724>] (mark_lock+0x0/0x6dc) from [<800647e8>] (mark_held_locks+0xa0/0x138) [<80064748>] (mark_held_locks+0x0/0x138) from [<80064930>] (trace_hardirqs_on_caller+0xb0/0x1cc) [<80064880>] (trace_hardirqs_on_caller+0x0/0x1cc) from [<80064a60>] (trace_hardirqs_on+0x14/0x18) r7:80829db0 r6:815e4b40 r5:bee2ae00 r4:815e4b40 [<80064a4c>] (trace_hardirqs_on+0x0/0x18) from [<805eb2ac>] (_raw_spin_unlock_irq+0x2c/0x34) [<805eb280>] (_raw_spin_unlock_irq+0x0/0x34) from [<8004bd04>] (finish_task_switch+0x8c/0x13c) r4:00000000 r3:bf87af80 [<8004bc78>] (finish_task_switch+0x0/0x13c) from [<805e697c>] (__schedule+0x210/0x5d0) [<805e676c>] (__schedule+0x0/0x5d0) from [<805e6e38>] (schedule+0x38/0x88) [<805e6e00>] (schedule+0x0/0x88) from [<805e61e4>] (schedule_timeout+0x10c/0x18c) [<805e60d8>] (schedule_timeout+0x0/0x18c) from [<805e628c>] (schedule_timeout_uninterruptible+0x28/0x2c) [<805e6264>] (schedule_timeout_uninterruptible+0x0/0x2c) from [<80031584>] (msleep+0x1c/0x28) [<80031568>] (msleep+0x0/0x28) from [<804001f8>] (ehci_bus_suspend+0x140/0x49c) [<804000b8>] (ehci_bus_suspend+0x0/0x49c) from [<803ec52c>] (hcd_bus_suspend+0x60/0x100) [<803ec4cc>] (hcd_bus_suspend+0x0/0x100) from [<803f8794>] (generic_suspend+0x38/0x3c) r7:00000000 r6:00000001 r5:ffffffff r4:bf0d4c00 [<803f875c>] (generic_suspend+0x0/0x3c) from [<803f081c>] (usb_suspend_both+0x10c/0x1a4) [<803f0710>] (usb_suspend_both+0x0/0x1a4) from [<803f10c8>] (usb_suspend+0xf4/0x118) [<803f0fd4>] (usb_suspend+0x0/0x118) from [<803e2920>] (usb_dev_suspend+0x14/0x18) [<803e290c>] (usb_dev_suspend+0x0/0x18) from [<80333bac>] (dpm_run_callback.isra.12+0x34/0x6c) [<80333b78>] (dpm_run_callback.isra.12+0x0/0x6c) from [<8033410c>] (__device_suspend+0x10c/0x220) r9:00000002 r8:00000000 r6:00000002 r5:80dac34c r4:bf0d4c68 [<80334000>] (__device_suspend+0x0/0x220) from [<80334240>] (async_suspend+0x20/0x94) r7:bf82f400 r6:8086cb60 r5:bf0d4c68 r4:80dac34c [<80334220>] (async_suspend+0x0/0x94) from [<80049e9c>] (async_run_entry_fn+0x48/0x190) r6:8086cb60 r5:beef9900 r4:beef9910 r3:00000000 [<80049e54>] (async_run_entry_fn+0x0/0x190) from [<8003cd34>] (process_one_work+0x1a4/0x438) r9:00000002 r8:00000000 r7:bf82f400 r6:bf80dc00 r5:beef9910 r4:bf82d980 [<8003cb90>] (process_one_work+0x0/0x438) from [<8003da5c>] (worker_thread+0x120/0x3e4) [<8003d93c>] (worker_thread+0x0/0x3e4) from [<80044070>] (kthread+0xcc/0xe8) [<80043fa4>] (kthread+0x0/0xe8) from [<8000e948>] (ret_from_fork+0x14/0x2c) r7:00000000 r6:00000000 r5:80043fa4 r4:bf840680 PM: suspend of devices complete after 530.175 msecs PM: suspend devices took 0.540 seconds PM: late suspend of devices complete after 1.038 msecs PM: noirq suspend of devices complete after 1.087 msecs Disabling non-boot CPUs ... CPU1: shutdown CPU2: shutdown CPU3: shutdown -- Best Regards, Peter Chen -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html