From c5e233d3883bb82e80f21e1011cfdd47e8e398ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 9 Nov 2013 14:34:37 +0100 Subject: [PATCH] usb: hub port reset is also done when the port status reset bit is zero. * encountered on QEmu 1.6.50 with nec-usb-xhci and usb-storage devices. --- src/add-ons/kernel/bus_managers/usb/Hub.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/usb/Hub.cpp b/src/add-ons/kernel/bus_managers/usb/Hub.cpp index 38f01a9878..a1f2d6b724 100644 --- a/src/add-ons/kernel/bus_managers/usb/Hub.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Hub.cpp @@ -157,14 +157,17 @@ Hub::ResetPort(uint8 index) if (result < B_OK) return result; - if (fPortStatus[index].change & PORT_STATUS_RESET) { + if ((fPortStatus[index].change & PORT_STATUS_RESET) != 0 + || (fPortStatus[index].status & PORT_STATUS_RESET) == 0) { // reset is done break; } } - if ((fPortStatus[index].change & PORT_STATUS_RESET) == 0) { - TRACE_ERROR("port %d won't reset\n", index); + if ((fPortStatus[index].change & PORT_STATUS_RESET) == 0 + && (fPortStatus[index].status & PORT_STATUS_RESET) != 0) { + TRACE_ERROR("port %d won't reset (%#x, %#x)\n", index, + fPortStatus[index].change, fPortStatus[index].status); return B_ERROR; }