summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/ukbd.c
diff options
context:
space:
mode:
authorn_hibma <n_hibma@FreeBSD.org>2001-09-02 09:26:14 +0000
committern_hibma <n_hibma@FreeBSD.org>2001-09-02 09:26:14 +0000
commit8d3cf62e68b29b3aa2a0b90b438389799f660b83 (patch)
tree2b374499d95568b635e6846c65fe8d0cb12eacd6 /sys/dev/usb/ukbd.c
parentd280926250c4f3a68af238c5ff83287cca0c36e2 (diff)
downloadFreeBSD-src-8d3cf62e68b29b3aa2a0b90b438389799f660b83.zip
FreeBSD-src-8d3cf62e68b29b3aa2a0b90b438389799f660b83.tar.gz
Only clear endpoint stall if status was USBD_STALLED.
This avoids panicing the system by unplugging a hub. The interrupt transfer would sometimes arrive after the driver had been removed.
Diffstat (limited to 'sys/dev/usb/ukbd.c')
-rw-r--r--sys/dev/usb/ukbd.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/dev/usb/ukbd.c b/sys/dev/usb/ukbd.c
index ad2c8f1..6d3aa4e 100644
--- a/sys/dev/usb/ukbd.c
+++ b/sys/dev/usb/ukbd.c
@@ -700,7 +700,8 @@ ukbd_interrupt(keyboard_t *kbd, void *arg)
if (status != USBD_NORMAL_COMPLETION) {
DPRINTF(("ukbd_intr: status=%d\n", status));
- usbd_clear_endpoint_stall_async(state->ks_intrpipe);
+ if (status == USBD_STALLED)
+ usbd_clear_endpoint_stall_async(state->ks_intrpipe);
return 0;
}
OpenPOWER on IntegriCloud