On Tue, Sep 01, 2020 at 10:19:26AM +0530, P J P wrote: > +-- On Sun, 30 Aug 2020, Alexander Bulekov wrote --+ > | I think there is already a fix queued for this one: > | https://www.mail-archive.com/qemu-devel@nongnu.org/msg734424.html > > Yes, it looks similar. > > | > @@ -1615,7 +1615,14 @@ static int xhci_setup_packet(XHCITransfer *xfer) > | > xhci_xfer_create_sgl(xfer, dir == USB_TOKEN_IN); /* Also sets > int_req */ > | > usb_packet_setup(&xfer->packet, dir, ep, xfer->streamid, > | > xfer->trbs[0].addr, false, xfer->int_req); > | > - usb_packet_map(&xfer->packet, &xfer->sgl); > | > + if (usb_packet_map(&xfer->packet, &xfer->sgl) < 0) { > | > + DPRINTF("xhci: setup packet failed: pid: 0x%x addr %d ep %d\n", > | > + xfer->packet.pid, ep->dev->addr, ep->nr); > | > + usb_packet_cleanup(&xfer->packet); > | > + qemu_sglist_destroy(&xfer->sgl); > | > + return -1; > > We don't need 'usb_packet_cleanup' call? (to confirm)
Oh, didn't notice the difference. I think we need it, otherwise we leak iov entries in case the packet has multiple segments and only the second (or any later) fails to map. take care, Gerd