Module Name:    src
Committed By:   mrg
Date:           Sun Feb 26 05:05:45 UTC 2012

Modified Files:
        src/sys/dev/usb [jmcneill-usbmp]: TODO.usbmp ehci.c if_url.c ohci.c
            uhci.c usb.c usbdi.c usbdi_util.c

Log Message:
- add some more "XXXSMP ok" tags
- use cpu_softintr_p() instead of checking LP_INTR directly


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.4 -r1.1.2.5 src/sys/dev/usb/TODO.usbmp
cvs rdiff -u -r1.181.6.13 -r1.181.6.14 src/sys/dev/usb/ehci.c
cvs rdiff -u -r1.38.12.1 -r1.38.12.2 src/sys/dev/usb/if_url.c
cvs rdiff -u -r1.218.6.15 -r1.218.6.16 src/sys/dev/usb/ohci.c
cvs rdiff -u -r1.240.6.14 -r1.240.6.15 src/sys/dev/usb/uhci.c
cvs rdiff -u -r1.125.6.11 -r1.125.6.12 src/sys/dev/usb/usb.c
cvs rdiff -u -r1.134.2.13 -r1.134.2.14 src/sys/dev/usb/usbdi.c
cvs rdiff -u -r1.55.12.3 -r1.55.12.4 src/sys/dev/usb/usbdi_util.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/TODO.usbmp
diff -u src/sys/dev/usb/TODO.usbmp:1.1.2.4 src/sys/dev/usb/TODO.usbmp:1.1.2.5
--- src/sys/dev/usb/TODO.usbmp:1.1.2.4	Sat Feb 25 20:54:03 2012
+++ src/sys/dev/usb/TODO.usbmp	Sun Feb 26 05:05:44 2012
@@ -1,11 +1,11 @@
-$NetBSD: TODO.usbmp,v 1.1.2.4 2012/02/25 20:54:03 mrg Exp $
+$NetBSD: TODO.usbmp,v 1.1.2.5 2012/02/26 05:05:44 mrg Exp $
 
 
 the majority of the USB MP device interface is documented in usbdivar.h.
 
 
-host controller porting:
-  - slhci
+host controllers needing to be ported:
+  - dev/ic/slhci.c
   - arch/mips/adm5120/dev/ahci.c
   - rump/dev/lib/libugenhc/ugenhc.c
 
@@ -14,7 +14,10 @@ use /* XXXSMP ok */ markers for non-SMP-
 eg, "if (lock_ptr) mutex_enter(lock_ptr); else s = splusb();"
 
 
-add lots of asserts
+add lots more asserts
+
+
+usb_event_thread() startup should use something to sync companions
 
 
 usb_transfer_complete() is sometimes called with host intr lock held,
@@ -22,7 +25,7 @@ sometimes with usb lock.  may need to re
 
 
 wake/wakeup conversion:
-  - usb_detach_wait/wakeup() -> add a usb_detach_cvwait/broadcast() that
+  - usb_detach_wait/wakeup() -> add a usb_detach_waitcv/broadcast() that
     take a mutex (done)
   - drivers:
       if_aue.c
@@ -37,7 +40,7 @@ wake/wakeup conversion:
       uhso.c
       uirda.c
       ulpt.c
-      umass.c		- done, untested
+      umass.c		- done
       urio.c
       usbdi_util.c
       usbdi_util.h
@@ -45,6 +48,8 @@ wake/wakeup conversion:
       usscanner.c
       ustir.c
       utoppy.c
+  - maybe rename usb_detach_wait() to usb_detach_waitold(), so that the
+    new one can be usb_detach_waitcv()
 
 
 convert uhidev users to MPSAFE:
@@ -74,8 +79,7 @@ wakeup/tsleep drivers:
   - uirda.c
   - ulpt.c
   - umass_isdata.c
-  - usb.c
-  - usb_subr.c
+  - usb_subr.c: usb_delay_ms() should use kpause
   - ustir.c
   - uthum.c
   - utoppy.c
@@ -110,10 +114,6 @@ missing CALLOUT_MPSAFE drivers:
   - ulpt
   - uyurex
 
-  - ohci
-  - uhci
-  - usbdi
-
 
 driver testing:		STATUS
   - uhub		working

Index: src/sys/dev/usb/ehci.c
diff -u src/sys/dev/usb/ehci.c:1.181.6.13 src/sys/dev/usb/ehci.c:1.181.6.14
--- src/sys/dev/usb/ehci.c:1.181.6.13	Sat Feb 25 20:46:33 2012
+++ src/sys/dev/usb/ehci.c	Sun Feb 26 05:05:44 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ehci.c,v 1.181.6.13 2012/02/25 20:46:33 mrg Exp $ */
+/*	$NetBSD: ehci.c,v 1.181.6.14 2012/02/26 05:05:44 mrg Exp $ */
 
 /*
  * Copyright (c) 2004-2012 The NetBSD Foundation, Inc.
@@ -53,7 +53,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.181.6.13 2012/02/25 20:46:33 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.181.6.14 2012/02/26 05:05:44 mrg Exp $");
 
 #include "ohci.h"
 #include "uhci.h"
@@ -548,7 +548,7 @@ ehci_init(ehci_softc_t *sc)
 	sc->sc_async_head = sqh;
 	EOWRITE4(sc, EHCI_ASYNCLISTADDR, sqh->physaddr | EHCI_LINK_QH);
 
-	callout_init(&(sc->sc_tmo_intrlist), CALLOUT_MPSAFE);
+	callout_init(&sc->sc_tmo_intrlist, CALLOUT_MPSAFE);
 
 	/* Turn on controller */
 	EOWRITE4(sc, EHCI_USBCMD,
@@ -3003,7 +3003,7 @@ ehci_abort_xfer(usbd_xfer_handle xfer, u
 		return;
 	}
 
-	if (cpu_intr_p() || (curlwp->l_pflag & LP_INTR) != 0)
+	if (cpu_intr_p() || cpu_softintr_p())
 		panic("ehci_abort_xfer: not in process context");
 
 	/*

Index: src/sys/dev/usb/if_url.c
diff -u src/sys/dev/usb/if_url.c:1.38.12.1 src/sys/dev/usb/if_url.c:1.38.12.2
--- src/sys/dev/usb/if_url.c:1.38.12.1	Sat Feb 18 07:35:06 2012
+++ src/sys/dev/usb/if_url.c	Sun Feb 26 05:05:44 2012
@@ -1,4 +1,5 @@
-/*	$NetBSD: if_url.c,v 1.38.12.1 2012/02/18 07:35:06 mrg Exp $	*/
+/*	$NetBSD: if_url.c,v 1.38.12.2 2012/02/26 05:05:44 mrg Exp $	*/
+
 /*
  * Copyright (c) 2001, 2002
  *     Shingo WATANABE <[email protected]>.  All rights reserved.
@@ -43,7 +44,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_url.c,v 1.38.12.1 2012/02/18 07:35:06 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_url.c,v 1.38.12.2 2012/02/26 05:05:44 mrg Exp $");
 
 #include "opt_inet.h"
 

Index: src/sys/dev/usb/ohci.c
diff -u src/sys/dev/usb/ohci.c:1.218.6.15 src/sys/dev/usb/ohci.c:1.218.6.16
--- src/sys/dev/usb/ohci.c:1.218.6.15	Sat Feb 25 20:46:34 2012
+++ src/sys/dev/usb/ohci.c	Sun Feb 26 05:05:44 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ohci.c,v 1.218.6.15 2012/02/25 20:46:34 mrg Exp $	*/
+/*	$NetBSD: ohci.c,v 1.218.6.16 2012/02/26 05:05:44 mrg Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/ohci.c,v 1.22 1999/11/17 22:33:40 n_hibma Exp $	*/
 
 /*
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.218.6.15 2012/02/25 20:46:34 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.218.6.16 2012/02/26 05:05:44 mrg Exp $");
 
 #include "opt_usb.h"
 
@@ -2317,7 +2317,7 @@ ohci_abort_xfer(usbd_xfer_handle xfer, u
 		return;
 	}
 
-	if (cpu_intr_p() || (curlwp->l_pflag & LP_INTR) != 0)
+	if (cpu_intr_p() || cpu_softintr_p())
 		panic("ohci_abort_xfer: not in process context");
 
 	/*

Index: src/sys/dev/usb/uhci.c
diff -u src/sys/dev/usb/uhci.c:1.240.6.14 src/sys/dev/usb/uhci.c:1.240.6.15
--- src/sys/dev/usb/uhci.c:1.240.6.14	Sat Feb 25 20:46:33 2012
+++ src/sys/dev/usb/uhci.c	Sun Feb 26 05:05:44 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhci.c,v 1.240.6.14 2012/02/25 20:46:33 mrg Exp $	*/
+/*	$NetBSD: uhci.c,v 1.240.6.15 2012/02/26 05:05:44 mrg Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/uhci.c,v 1.33 1999/11/17 22:33:41 n_hibma Exp $	*/
 
 /*
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhci.c,v 1.240.6.14 2012/02/25 20:46:33 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhci.c,v 1.240.6.15 2012/02/26 05:05:44 mrg Exp $");
 
 #include "opt_usb.h"
 
@@ -2146,7 +2146,7 @@ uhci_abort_xfer(usbd_xfer_handle xfer, u
 		return;
 	}
 
-	if (cpu_intr_p() || (curlwp->l_pflag & LP_INTR) != 0)
+	if (cpu_intr_p() || cpu_softintr_p())
 		panic("uhci_abort_xfer: not in process context");
 
 	/*

Index: src/sys/dev/usb/usb.c
diff -u src/sys/dev/usb/usb.c:1.125.6.11 src/sys/dev/usb/usb.c:1.125.6.12
--- src/sys/dev/usb/usb.c:1.125.6.11	Sat Feb 25 10:26:24 2012
+++ src/sys/dev/usb/usb.c	Sun Feb 26 05:05:45 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: usb.c,v 1.125.6.11 2012/02/25 10:26:24 mrg Exp $	*/
+/*	$NetBSD: usb.c,v 1.125.6.12 2012/02/26 05:05:45 mrg Exp $	*/
 
 /*
  * Copyright (c) 1998, 2002, 2008, 2012 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.125.6.11 2012/02/25 10:26:24 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.125.6.12 2012/02/26 05:05:45 mrg Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_usb.h"
@@ -409,8 +409,8 @@ usb_event_thread(void *arg)
 			cv_timedwait(&sc->sc_bus->needs_explore_cv,
 			    sc->sc_bus->lock, usb_noexplore ? 0 : hz * 60);
 		else
-			(void)tsleep(&sc->sc_bus->needs_explore, PWAIT,
-			    "usbevt", usb_noexplore ? 0 : hz * 60);
+			(void)tsleep(&sc->sc_bus->needs_explore, /* XXXSMP ok */
+			    PWAIT, "usbevt", usb_noexplore ? 0 : hz * 60);
 		DPRINTFN(2,("usb_event_thread: woke up\n"));
 	}
 	sc->sc_event_thread = NULL;
@@ -1039,7 +1039,7 @@ usb_detach(device_t self, int flags)
 			mutex_exit(sc->sc_bus->lock);
 		} else {
 			wakeup(&sc->sc_bus->needs_explore);	/* XXXSMP ok */
-			tsleep(sc, PWAIT, "usbdet", hz * 60);
+			tsleep(sc, PWAIT, "usbdet", hz * 60);	/* XXXSMP ok */
 		}
 	}
 	DPRINTF(("usb_detach: event thread dead\n"));

Index: src/sys/dev/usb/usbdi.c
diff -u src/sys/dev/usb/usbdi.c:1.134.2.13 src/sys/dev/usb/usbdi.c:1.134.2.14
--- src/sys/dev/usb/usbdi.c:1.134.2.13	Sat Feb 25 20:46:34 2012
+++ src/sys/dev/usb/usbdi.c	Sun Feb 26 05:05:45 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi.c,v 1.134.2.13 2012/02/25 20:46:34 mrg Exp $	*/
+/*	$NetBSD: usbdi.c,v 1.134.2.14 2012/02/26 05:05:45 mrg Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/usbdi.c,v 1.28 1999/11/17 22:33:49 n_hibma Exp $	*/
 
 /*
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.134.2.13 2012/02/25 20:46:34 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.134.2.14 2012/02/26 05:05:45 mrg Exp $");
 
 #include "opt_compat_netbsd.h"
 #include "opt_usb.h"
@@ -968,7 +968,7 @@ usbd_do_request_flags_pipe(usbd_device_h
 	usbd_status err;
 
 #ifdef DIAGNOSTIC
-	if (cpu_intr_p() || (curlwp->l_pflag & LP_INTR) != 0) {
+	if (cpu_intr_p() || cpu_softintr_p()) {
 		printf("usbd_do_request: not in process context\n");
 		return (USBD_INVAL);
 	}

Index: src/sys/dev/usb/usbdi_util.c
diff -u src/sys/dev/usb/usbdi_util.c:1.55.12.3 src/sys/dev/usb/usbdi_util.c:1.55.12.4
--- src/sys/dev/usb/usbdi_util.c:1.55.12.3	Sat Feb 25 20:47:32 2012
+++ src/sys/dev/usb/usbdi_util.c	Sun Feb 26 05:05:45 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: usbdi_util.c,v 1.55.12.3 2012/02/25 20:47:32 mrg Exp $	*/
+/*	$NetBSD: usbdi_util.c,v 1.55.12.4 2012/02/26 05:05:45 mrg Exp $	*/
 
 /*
  * Copyright (c) 1998, 2012 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.55.12.3 2012/02/25 20:47:32 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.55.12.4 2012/02/26 05:05:45 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -439,7 +439,7 @@ usbd_bulk_transfer(usbd_xfer_handle xfer
 	usbd_setup_xfer(xfer, pipe, 0, buf, *size,
 			flags, timeout, usbd_bulk_transfer_cb);
 	DPRINTFN(1, ("usbd_bulk_transfer: start transfer %d bytes\n", *size));
-	usbd_lock_pipe(pipe);	/* don't want callback until tsleep() */
+	usbd_lock_pipe(pipe);	/* don't want callback until block */
 	err = usbd_transfer(xfer);
 	if (err != USBD_IN_PROGRESS) {
 		usbd_unlock_pipe(pipe);
@@ -448,10 +448,10 @@ usbd_bulk_transfer(usbd_xfer_handle xfer
 	if (pipe->device->bus->lock)
 		error = cv_wait_sig(&xfer->cv, pipe->device->bus->lock);
 	else
-		error = tsleep(xfer, PZERO | PCATCH, lbl, 0);
+		error = tsleep(xfer, PZERO | PCATCH, lbl, 0); /* XXXSMP ok */
 	usbd_unlock_pipe(pipe);
 	if (error) {
-		DPRINTF(("usbd_bulk_transfer: tsleep=%d\n", error));
+		DPRINTF(("usbd_bulk_transfer: wait=%d\n", error));
 		usbd_abort_pipe(pipe);
 		return (USBD_INTERRUPTED);
 	}
@@ -488,7 +488,7 @@ usbd_intr_transfer(usbd_xfer_handle xfer
 	usbd_setup_xfer(xfer, pipe, 0, buf, *size,
 			flags, timeout, usbd_intr_transfer_cb);
 	DPRINTFN(1, ("usbd_intr_transfer: start transfer %d bytes\n", *size));
-	usbd_lock_pipe(pipe);	/* don't want callback until tsleep() */
+	usbd_lock_pipe(pipe);	/* don't want callback until block */
 	err = usbd_transfer(xfer);
 	if (err != USBD_IN_PROGRESS) {
 		usbd_unlock_pipe(pipe);
@@ -497,10 +497,10 @@ usbd_intr_transfer(usbd_xfer_handle xfer
 	if (pipe->device->bus->lock)
 		error = cv_wait_sig(&xfer->cv, pipe->device->bus->lock);
 	else
-		error = tsleep(xfer, PZERO | PCATCH, lbl, 0);
+		error = tsleep(xfer, PZERO | PCATCH, lbl, 0); /* XXXSMP ok */
 	usbd_unlock_pipe(pipe);
 	if (error) {
-		DPRINTF(("usbd_intr_transfer: tsleep=%d\n", error));
+		DPRINTF(("usbd_intr_transfer: wait=%d\n", error));
 		usbd_abort_pipe(pipe);
 		return (USBD_INTERRUPTED);
 	}
@@ -534,7 +534,7 @@ void
 usb_detach_wait(device_t dv)
 {
 	DPRINTF(("usb_detach_wait: waiting for %s\n", device_xname(dv)));
-	if (tsleep(dv, PZERO, "usbdet", hz * 60))
+	if (tsleep(dv, PZERO, "usbdet", hz * 60)) /* XXXSMP ok */
 		printf("usb_detach_wait: %s didn't detach\n",
 		        device_xname(dv));
 	DPRINTF(("usb_detach_wait: %s done\n", device_xname(dv)));
@@ -544,7 +544,7 @@ void
 usb_detach_wakeup(device_t dv)
 {
 	DPRINTF(("usb_detach_wakeup: for %s\n", device_xname(dv)));
-	wakeup(dv);
+	wakeup(dv); /* XXXSMP ok */
 }
 
 const usb_cdc_descriptor_t *

Reply via email to