diff --git a/sys/bus/usb/usbdi.c b/sys/bus/usb/usbdi.c index 014fa1b..2d7286a 100644 --- a/sys/bus/usb/usbdi.c +++ b/sys/bus/usb/usbdi.c @@ -41,6 +41,7 @@ #include #include +#include #include #include #include "usb_if.h" @@ -326,10 +327,12 @@ usbd_transfer(usbd_xfer_handle xfer) if (err != USBD_IN_PROGRESS) return (err); crit_enter(); - if (!xfer->done) { - if (pipe->device->bus->use_polling) - panic("usbd_transfer: not done"); - tsleep(xfer, 0, "usbsyn", 0); + while (!xfer->done) { + if (pipe->device->bus->use_polling) { + usbd_dopoll(pipe->iface); + kprintf("warning: usbd_transfer: not done\n"); + } + tsleep(xfer, 0, "usbsyn", hz); } crit_exit(); return (xfer->status);