On Fri, 28 Aug 2015, Roland Weber wrote: > Hmm, looks like my last two mails didn't get sent to the list. > So, with some delay... > > > > If you want, you could try an even finer bisection. The commit you > > > identified adds a mutex_lock and a mutex_unlock, and it also changes an > > > alloc_ordered_workqueue to alloc_workqueue. You could leave the mutex > > > stuff out and just include the alloc_workqueue change, or vice versa. > > I've tried both. The kernel with just the mutex change is good. The one > which only changes alloc_ordered_workqueue to alloc_workqueue is bad. Interesting. It's possible (though unlikely) that your problem arises from a bug in the workqueue code rather than in the USB stack. > Does that mean I'll have to dig into hardware specs next, to see if > there's some restriction on the order in which ports must be probed > or reset on that specific USB hub? No hubs have any restrictions of that sort. Besides, changing alloc_ordered_workqueue to alloc_workqueue could affect the order in which different hubs are managed, but it can't affect the order in which ports within a single hub are handled. > Or maybe I can gather some more > debug information about the initialization? As long as I'm the only one > bitten by this change, I wouldn't ask to simply revert it. You can try the debugging patch below. It will tell us when the items on the workqueue get executed, which could be a useful clue. You should test this from a VT console with the logging level set high enough so that the log messages show up on the screen. That way you'll be able to see them even after a hang. Alan Stern Index: usb-4.2/drivers/usb/core/hub.c =================================================================== --- usb-4.2.orig/drivers/usb/core/hub.c +++ usb-4.2/drivers/usb/core/hub.c @@ -4990,6 +4990,8 @@ static void hub_event(struct work_struct hub_dev = hub->intfdev; intf = to_usb_interface(hub_dev); + dev_info(hub_dev, "entry\n"); + dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n", hdev->state, hdev->maxchild, /* NOTE: expects max 15 ports... */ @@ -5093,6 +5095,8 @@ out_autopm: out_hdev_lock: usb_unlock_device(hdev); + dev_info(hub_dev, "exit\n"); + /* Balance the stuff in kick_hub_wq() and allow autosuspend */ usb_autopm_put_interface(intf); kref_put(&hub->kref, hub_release); -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html