summaryrefslogtreecommitdiffstats
path: root/sys/dev/if_ndis/if_ndis_usb.c
diff options
context:
space:
mode:
authorweongyo <weongyo@FreeBSD.org>2009-03-18 02:38:35 +0000
committerweongyo <weongyo@FreeBSD.org>2009-03-18 02:38:35 +0000
commit7fabe111cbd4c1aa825b40730fb4647c65b44c75 (patch)
treef5626d73555fba83b35b098e9ba3484894783293 /sys/dev/if_ndis/if_ndis_usb.c
parentbcc40d445d09395afa286b5446648255d2cb5968 (diff)
downloadFreeBSD-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.c4
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);
OpenPOWER on IntegriCloud