Module Name:    src
Committed By:   riastradh
Date:           Thu Mar  3 06:13:35 UTC 2022

Modified Files:
        src/sys/dev/usb: usb_subr.c

Log Message:
usbdi(9): Suspend control pipe on detach.

The device is gone so control transfers won't complete anyway.  This
obviates the need to wait for usbd_do_request to time out.

Seems like maybe we should make _all_ xfers fail with USBD_CANCELLED
when the device is detached, but there's no list of pipes we can just
walk down to suspend them, so we'd have to find another way to do so.
For now, we'll just keep having drivers suspend/abort pipes other
than the control pipe.


To generate a diff of this commit:
cvs rdiff -u -r1.269 -r1.270 src/sys/dev/usb/usb_subr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/usb/usb_subr.c
diff -u src/sys/dev/usb/usb_subr.c:1.269 src/sys/dev/usb/usb_subr.c:1.270
--- src/sys/dev/usb/usb_subr.c:1.269	Sat Nov  6 06:44:42 2021
+++ src/sys/dev/usb/usb_subr.c	Thu Mar  3 06:13:35 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb_subr.c,v 1.269 2021/11/06 06:44:42 skrll Exp $	*/
+/*	$NetBSD: usb_subr.c,v 1.270 2022/03/03 06:13:35 riastradh Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $	*/
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.269 2021/11/06 06:44:42 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.270 2022/03/03 06:13:35 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -1872,6 +1872,7 @@ usb_disconnect_port(struct usbd_port *up
 		return 0;
 	}
 
+	usbd_suspend_pipe(dev->ud_pipe0);
 	if (dev->ud_subdevlen > 0) {
 		DPRINTFN(3, "disconnect subdevs", 0, 0, 0, 0);
 		for (i = 0; i < dev->ud_subdevlen; i++) {

Reply via email to