mirror of https://gitee.com/openkylin/qemu.git
usb: bugfixes
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJeRGbIAAoJEEy22O7T6HE4PZYP/1Drb35WnI+BVyr0sbnDhyLP whK0+KAHIy2a3jiwqNO+gpCWAdiERg8qpJCq2ve9tHR10oLBBFHt2TktkvLEUkZx ZbxM7jDHzcvvt/0GfWOoP60qF2WGkq/a8x2Qenkn+d/HyfmxNh1C5nwSgVatTcza bSQH+M75Ih3iknxfcSrBN1Ib5DHsoI9F1dHjImirG2VbfQKSaF4BMjcOnioDzRr/ cRgmwKLZSCvUJ/AR3NFhTvvizCmbwhASmIZkgU8/paQx1IFReLi3Ojv6ZBgVyDI/ IX42qVAoh5Y6waeiiIGpO+80PfDEWQWB6TCX4GgEdJ/SxKnWg1lVP5X83BuNzA5m Sl+WSBVmHsN34XvRzENMsZ45Nl0xWio+ZgO0Z2VQq/UhnahcorDXOE1PUiU9wp/z SXWrRLU64cXUtPjhg1G+t3MSj2lUAebpS6QnXWUcq/iCXpZgEpmHwwVvTgjIPqez BDMz85D+o6l+xF1oYfIHk0r2ktbc94Uz3gYznUqF91rvjV21NwtoG1c0FwGIWRh7 VbrAOg5FnUGPs7moupspDX+4OlMtdkMQO1+Sf7uIYVhTbQsVSbFTW14QPm7gNozL JOC4mznTYgyVztNCsyDpa5vWUUj+Dp05TGslkluxkN/3DtUiudJ42lvV7LHCfMmt 9xw96bxJQZedd1i8VhnF =PlvL -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/usb-20200212-pull-request' into staging usb: bugfixes # gpg: Signature made Wed 12 Feb 2020 20:57:44 GMT # gpg: using RSA key 4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/usb-20200212-pull-request: uas: fix super speed bMaxPacketSize0 usb-host: wait for cancel complete Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
48f84ab310
|
@ -303,7 +303,7 @@ static const USBDescDevice desc_device_high = {
|
|||
|
||||
static const USBDescDevice desc_device_super = {
|
||||
.bcdUSB = 0x0300,
|
||||
.bMaxPacketSize0 = 64,
|
||||
.bMaxPacketSize0 = 9,
|
||||
.bNumConfigurations = 1,
|
||||
.confs = (USBDescConfig[]) {
|
||||
{
|
||||
|
|
|
@ -354,9 +354,7 @@ static USBHostRequest *usb_host_req_alloc(USBHostDevice *s, USBPacket *p,
|
|||
|
||||
static void usb_host_req_free(USBHostRequest *r)
|
||||
{
|
||||
if (r->host) {
|
||||
QTAILQ_REMOVE(&r->host->requests, r, next);
|
||||
}
|
||||
QTAILQ_REMOVE(&r->host->requests, r, next);
|
||||
libusb_free_transfer(r->xfer);
|
||||
g_free(r->buffer);
|
||||
g_free(r);
|
||||
|
@ -468,12 +466,7 @@ static void usb_host_req_abort(USBHostRequest *r)
|
|||
usb_packet_complete(USB_DEVICE(s), r->p);
|
||||
}
|
||||
r->p = NULL;
|
||||
}
|
||||
|
||||
QTAILQ_REMOVE(&r->host->requests, r, next);
|
||||
r->host = NULL;
|
||||
|
||||
if (inflight) {
|
||||
libusb_cancel_transfer(r->xfer);
|
||||
}
|
||||
}
|
||||
|
@ -962,6 +955,13 @@ static void usb_host_abort_xfers(USBHostDevice *s)
|
|||
QTAILQ_FOREACH_SAFE(r, &s->requests, next, rtmp) {
|
||||
usb_host_req_abort(r);
|
||||
}
|
||||
|
||||
while (QTAILQ_FIRST(&s->requests) != NULL) {
|
||||
struct timeval tv;
|
||||
memset(&tv, 0, sizeof(tv));
|
||||
tv.tv_usec = 2500;
|
||||
libusb_handle_events_timeout(ctx, &tv);
|
||||
}
|
||||
}
|
||||
|
||||
static int usb_host_close(USBHostDevice *s)
|
||||
|
@ -1011,6 +1011,7 @@ static void usb_host_exit_notifier(struct Notifier *n, void *data)
|
|||
USBHostDevice *s = container_of(n, USBHostDevice, exit);
|
||||
|
||||
if (s->dh) {
|
||||
usb_host_abort_xfers(s);
|
||||
usb_host_release_interfaces(s);
|
||||
libusb_reset_device(s->dh);
|
||||
usb_host_attach_kernel(s);
|
||||
|
|
Loading…
Reference in New Issue