svn commit: r363239 - stable/12/usr.sbin/bhyve
Peter Grehan
grehan at FreeBSD.org
Thu Jul 16 02:53:14 UTC 2020
Author: grehan
Date: Thu Jul 16 02:53:13 2020
New Revision: 363239
URL: https://svnweb.freebsd.org/changeset/base/363239
Log:
MFC r362644
Prevent calling USB backends multiple times.
Modified:
stable/12/usr.sbin/bhyve/pci_xhci.c
stable/12/usr.sbin/bhyve/usb_mouse.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/usr.sbin/bhyve/pci_xhci.c
==============================================================================
--- stable/12/usr.sbin/bhyve/pci_xhci.c Wed Jul 15 22:42:50 2020 (r363238)
+++ stable/12/usr.sbin/bhyve/pci_xhci.c Thu Jul 16 02:53:13 2020 (r363239)
@@ -1838,6 +1838,9 @@ retry:
DPRINTF(("pci_xhci[%d]: xfer->ndata %u", __LINE__, xfer->ndata));
+ if (xfer->ndata <= 0)
+ goto errout;
+
if (epid == 1) {
err = USB_ERR_NOT_STARTED;
if (dev->dev_ue->ue_request != NULL)
@@ -1852,6 +1855,7 @@ retry:
err = USB_TO_XHCI_ERR(err);
if ((err == XHCI_TRB_ERROR_SUCCESS) ||
+ (err == XHCI_TRB_ERROR_STALL) ||
(err == XHCI_TRB_ERROR_SHORT_PKT)) {
err = pci_xhci_xfer_complete(sc, xfer, slot, epid, &do_intr);
if (err != XHCI_TRB_ERROR_SUCCESS)
Modified: stable/12/usr.sbin/bhyve/usb_mouse.c
==============================================================================
--- stable/12/usr.sbin/bhyve/usb_mouse.c Wed Jul 15 22:42:50 2020 (r363238)
+++ stable/12/usr.sbin/bhyve/usb_mouse.c Thu Jul 16 02:53:13 2020 (r363239)
@@ -388,7 +388,7 @@ umouse_request(void *scarg, struct usb_data_xfer *xfer
"sizeof(umouse_dev_desc) %lu",
len, sizeof(umouse_dev_desc)));
if ((value & 0xFF) != 0) {
- err = USB_ERR_IOERROR;
+ err = USB_ERR_STALLED;
goto done;
}
if (len > sizeof(umouse_dev_desc)) {
@@ -403,7 +403,7 @@ umouse_request(void *scarg, struct usb_data_xfer *xfer
case UDESC_CONFIG:
DPRINTF(("umouse: (->UDESC_CONFIG)"));
if ((value & 0xFF) != 0) {
- err = USB_ERR_IOERROR;
+ err = USB_ERR_STALLED;
goto done;
}
if (len > sizeof(umouse_confd)) {
@@ -472,7 +472,7 @@ umouse_request(void *scarg, struct usb_data_xfer *xfer
default:
DPRINTF(("umouse: unknown(%d)->ERROR", value >> 8));
- err = USB_ERR_IOERROR;
+ err = USB_ERR_STALLED;
goto done;
}
eshort = data->blen > 0;
@@ -496,7 +496,7 @@ umouse_request(void *scarg, struct usb_data_xfer *xfer
break;
default:
DPRINTF(("umouse: IO ERROR"));
- err = USB_ERR_IOERROR;
+ err = USB_ERR_STALLED;
goto done;
}
eshort = data->blen > 0;
@@ -507,7 +507,7 @@ umouse_request(void *scarg, struct usb_data_xfer *xfer
if (index != 0) {
DPRINTF(("umouse get_interface, invalid index %d",
index));
- err = USB_ERR_IOERROR;
+ err = USB_ERR_STALLED;
goto done;
}
@@ -578,7 +578,7 @@ umouse_request(void *scarg, struct usb_data_xfer *xfer
case UREQ(UR_SET_FEATURE, UT_WRITE_INTERFACE):
case UREQ(UR_SET_FEATURE, UT_WRITE_ENDPOINT):
DPRINTF(("umouse: (UR_CLEAR_FEATURE, UT_WRITE_INTERFACE)"));
- err = USB_ERR_IOERROR;
+ err = USB_ERR_STALLED;
goto done;
case UREQ(UR_SET_INTERFACE, UT_WRITE_INTERFACE):
@@ -617,7 +617,7 @@ umouse_request(void *scarg, struct usb_data_xfer *xfer
memcpy(data->buf, &sc->um_report, len);
data->bdone += len;
} else {
- err = USB_ERR_IOERROR;
+ err = USB_ERR_STALLED;
goto done;
}
eshort = data->blen > 0;
@@ -659,7 +659,7 @@ umouse_request(void *scarg, struct usb_data_xfer *xfer
default:
DPRINTF(("**** umouse request unhandled"));
- err = USB_ERR_IOERROR;
+ err = USB_ERR_STALLED;
break;
}
More information about the svn-src-stable
mailing list