On 05-08-16, 11:51, Alan Stern wrote: > The locking in hub_activate() is not adequate to provide full mutual > exclusion with hub_quiesce(). The subroutine locks the hub's > usb_interface, but the callers of hub_quiesce() (such as > hub_pre_reset() and hub_event()) hold the lock to the hub's > usb_device. > > This patch changes hub_activate() to make it acquire the same lock as > those other routines. > > Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > CC: <stable@xxxxxxxxxxxxxxx> #4.4+ > > --- > > > [as1808] > > > drivers/usb/core/hub.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > Index: usb-4.x/drivers/usb/core/hub.c > =================================================================== > --- usb-4.x.orig/drivers/usb/core/hub.c > +++ usb-4.x/drivers/usb/core/hub.c > @@ -1052,7 +1052,7 @@ static void hub_activate(struct usb_hub > > /* Continue a partial initialization */ > if (type == HUB_INIT2 || type == HUB_INIT3) { > - device_lock(hub->intfdev); > + device_lock(&hdev->dev); > > /* Was the hub disconnected while we were waiting? */ > if (hub->disconnected) > @@ -1259,7 +1259,7 @@ static void hub_activate(struct usb_hub > queue_delayed_work(system_power_efficient_wq, > &hub->init_work, > msecs_to_jiffies(delay)); > - device_unlock(hub->intfdev); > + device_unlock(&hdev->dev); > return; /* Continues at init3: below */ > } else { > msleep(delay); > @@ -1282,7 +1282,7 @@ static void hub_activate(struct usb_hub > /* Allow autosuspend if it was suppressed */ > disconnected: > usb_autopm_put_interface_async(to_usb_interface(hub->intfdev)); > - device_unlock(hub->intfdev); > + device_unlock(&hdev->dev); > } > > kref_put(&hub->kref, hub_release); As I do not have good knowledge of which lock protects what here, I will stay away from giving a meaningless Reviewed-by :) But thanks for the patch.. -- viresh -- 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