diff options
author | weongyo <weongyo@FreeBSD.org> | 2009-03-18 02:38:35 +0000 |
---|---|---|
committer | weongyo <weongyo@FreeBSD.org> | 2009-03-18 02:38:35 +0000 |
commit | 7fabe111cbd4c1aa825b40730fb4647c65b44c75 (patch) | |
tree | f5626d73555fba83b35b098e9ba3484894783293 /sys/dev/if_ndis/if_ndis_usb.c | |
parent | bcc40d445d09395afa286b5446648255d2cb5968 (diff) | |
download | FreeBSD-src-7fabe111cbd4c1aa825b40730fb4647c65b44c75.zip FreeBSD-src-7fabe111cbd4c1aa825b40730fb4647c65b44c75.tar.gz |
Some NDIS USB drivers try to call URB funcs like URB_FUNCTION_VENDOR_xxx
or URB_FUNCTION_CLASS_xxx with HAL preemption lock that means it's
non-sleepable during USB requests though usb2_do_request() requires a
sleep so it needs to send queries to the default pipe without those
interfaces to avoid sleep.
Diffstat (limited to 'sys/dev/if_ndis/if_ndis_usb.c')
-rw-r--r-- | sys/dev/if_ndis/if_ndis_usb.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/dev/if_ndis/if_ndis_usb.c b/sys/dev/if_ndis/if_ndis_usb.c index 7aeed9a..ec9741b 100644 --- a/sys/dev/if_ndis/if_ndis_usb.c +++ b/sys/dev/if_ndis/if_ndis_usb.c @@ -210,6 +210,10 @@ ndisusb_detach(device_t self) ndis_pnpevent_nic(self, NDIS_PNP_EVENT_SURPRISE_REMOVED); + if (sc->ndisusb_status & NDISUSB_STATUS_SETUP_EP) { + usb2_transfer_unsetup(sc->ndisusb_dread_ep.ne_xfer, 1); + usb2_transfer_unsetup(sc->ndisusb_dwrite_ep.ne_xfer, 1); + } for (i = 0; i < NDISUSB_ENDPT_MAX; i++) { ne = &sc->ndisusb_ep[i]; usb2_transfer_unsetup(ne->ne_xfer, 1); |