|
@@ -3834,8 +3834,14 @@ static int xhci_setup_device(struct usb_hcd *hcd, struct usb_device *udev,
|
|
|
break;
|
|
|
case COMP_USB_TRANSACTION_ERROR:
|
|
|
dev_warn(&udev->dev, "Device not responding to setup %s.\n", act);
|
|
|
- ret = -EPROTO;
|
|
|
- break;
|
|
|
+
|
|
|
+ mutex_unlock(&xhci->mutex);
|
|
|
+ ret = xhci_disable_slot(xhci, udev->slot_id);
|
|
|
+ if (!ret)
|
|
|
+ xhci_alloc_dev(hcd, udev);
|
|
|
+ kfree(command->completion);
|
|
|
+ kfree(command);
|
|
|
+ return -EPROTO;
|
|
|
case COMP_INCOMPATIBLE_DEVICE_ERROR:
|
|
|
dev_warn(&udev->dev,
|
|
|
"ERROR: Incompatible device for setup %s command\n", act);
|