Module Name: src Committed By: skrll Date: Fri Jun 10 08:15:22 UTC 2016
Modified Files: src/sys/dev/usb [nick-nhusb]: ehci.c ohci.c usb.c usbdi.h src/sys/external/bsd/dwc2 [nick-nhusb]: dwc2.c Log Message: Use SOFTINT_SERIAL for the USB stack (the 'S' stands for serial). This is a step in the right direction towards fixing kern/50491: unkillable wait in usbd_transfer while using usmsc0 on raspberry pi 2 kern/49065: ifconfig tun0 ... sequence locks up system but further analysis of locking of the usb drivers is required. To generate a diff of this commit: cvs rdiff -u -r1.234.2.102 -r1.234.2.103 src/sys/dev/usb/ehci.c cvs rdiff -u -r1.254.2.76 -r1.254.2.77 src/sys/dev/usb/ohci.c cvs rdiff -u -r1.156.2.13 -r1.156.2.14 src/sys/dev/usb/usb.c cvs rdiff -u -r1.90.4.12 -r1.90.4.13 src/sys/dev/usb/usbdi.h cvs rdiff -u -r1.32.2.27 -r1.32.2.28 src/sys/external/bsd/dwc2/dwc2.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/ehci.c diff -u src/sys/dev/usb/ehci.c:1.234.2.102 src/sys/dev/usb/ehci.c:1.234.2.103 --- src/sys/dev/usb/ehci.c:1.234.2.102 Sun May 29 08:44:31 2016 +++ src/sys/dev/usb/ehci.c Fri Jun 10 08:15:21 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ehci.c,v 1.234.2.102 2016/05/29 08:44:31 skrll Exp $ */ +/* $NetBSD: ehci.c,v 1.234.2.103 2016/06/10 08:15:21 skrll 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.234.2.102 2016/05/29 08:44:31 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ehci.c,v 1.234.2.103 2016/06/10 08:15:21 skrll Exp $"); #include "ohci.h" #include "uhci.h" @@ -418,10 +418,10 @@ ehci_init(ehci_softc_t *sc) sc->sc_xferpool = pool_cache_init(sizeof(struct ehci_xfer), 0, 0, 0, "ehcixfer", NULL, IPL_USB, NULL, NULL, NULL); - sc->sc_doorbell_si = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE, + sc->sc_doorbell_si = softint_establish(SOFTINT_USB | SOFTINT_MPSAFE, ehci_doorbell, sc); KASSERT(sc->sc_doorbell_si != NULL); - sc->sc_pcd_si = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE, + sc->sc_pcd_si = softint_establish(SOFTINT_USB | SOFTINT_MPSAFE, ehci_pcd, sc); KASSERT(sc->sc_pcd_si != NULL); Index: src/sys/dev/usb/ohci.c diff -u src/sys/dev/usb/ohci.c:1.254.2.76 src/sys/dev/usb/ohci.c:1.254.2.77 --- src/sys/dev/usb/ohci.c:1.254.2.76 Mon May 30 06:46:50 2016 +++ src/sys/dev/usb/ohci.c Fri Jun 10 08:15:21 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ohci.c,v 1.254.2.76 2016/05/30 06:46:50 skrll Exp $ */ +/* $NetBSD: ohci.c,v 1.254.2.77 2016/06/10 08:15:21 skrll Exp $ */ /* * Copyright (c) 1998, 2004, 2005, 2012 The NetBSD Foundation, Inc. @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.254.2.76 2016/05/30 06:46:50 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.254.2.77 2016/06/10 08:15:21 skrll Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -790,7 +790,7 @@ ohci_init(ohci_softc_t *sc) mutex_init(&sc->sc_intr_lock, MUTEX_DEFAULT, IPL_USB); cv_init(&sc->sc_softwake_cv, "ohciab"); - sc->sc_rhsc_si = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE, + sc->sc_rhsc_si = softint_establish(SOFTINT_USB | SOFTINT_MPSAFE, ohci_rhsc_softint, sc); for (i = 0; i < OHCI_HASH_SIZE; i++) Index: src/sys/dev/usb/usb.c diff -u src/sys/dev/usb/usb.c:1.156.2.13 src/sys/dev/usb/usb.c:1.156.2.14 --- src/sys/dev/usb/usb.c:1.156.2.13 Sun May 29 08:44:31 2016 +++ src/sys/dev/usb/usb.c Fri Jun 10 08:15:22 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: usb.c,v 1.156.2.13 2016/05/29 08:44:31 skrll Exp $ */ +/* $NetBSD: usb.c,v 1.156.2.14 2016/06/10 08:15:22 skrll 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.156.2.13 2016/05/29 08:44:31 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.156.2.14 2016/06/10 08:15:22 skrll Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -254,7 +254,7 @@ usb_attach(device_t parent, device_t sel aprint_normal("\n"); /* XXX we should have our own level */ - sc->sc_bus->ub_soft = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE, + sc->sc_bus->ub_soft = softint_establish(SOFTINT_USB | SOFTINT_MPSAFE, usb_soft_intr, sc->sc_bus); if (sc->sc_bus->ub_soft == NULL) { aprint_error("%s: can't register softintr\n", Index: src/sys/dev/usb/usbdi.h diff -u src/sys/dev/usb/usbdi.h:1.90.4.12 src/sys/dev/usb/usbdi.h:1.90.4.13 --- src/sys/dev/usb/usbdi.h:1.90.4.12 Fri Mar 25 08:34:16 2016 +++ src/sys/dev/usb/usbdi.h Fri Jun 10 08:15:22 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: usbdi.h,v 1.90.4.12 2016/03/25 08:34:16 skrll Exp $ */ +/* $NetBSD: usbdi.h,v 1.90.4.13 2016/06/10 08:15:22 skrll Exp $ */ /* $FreeBSD: src/sys/dev/usb/usbdi.h,v 1.18 1999/11/17 22:33:49 n_hibma Exp $ */ /* @@ -295,10 +295,11 @@ struct usbif_attach_arg { * * Eventually, IPL_USB can/should be changed */ -#define splusb splsoftnet -#define splhardusb splvm -#define IPL_SOFTUSB IPL_SOFTNET #define IPL_USB IPL_VM -#define SOFTINT_USB SOFTINT_NET +#define splhardusb splvm + +#define SOFTINT_USB SOFTINT_SERIAL +#define IPL_SOFTUSB IPL_SOFTSERIAL +#define splusb splsoftserial #endif /* _USBDI_H_ */ Index: src/sys/external/bsd/dwc2/dwc2.c diff -u src/sys/external/bsd/dwc2/dwc2.c:1.32.2.27 src/sys/external/bsd/dwc2/dwc2.c:1.32.2.28 --- src/sys/external/bsd/dwc2/dwc2.c:1.32.2.27 Sun May 29 08:44:36 2016 +++ src/sys/external/bsd/dwc2/dwc2.c Fri Jun 10 08:15:22 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: dwc2.c,v 1.32.2.27 2016/05/29 08:44:36 skrll Exp $ */ +/* $NetBSD: dwc2.c,v 1.32.2.28 2016/06/10 08:15:22 skrll Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dwc2.c,v 1.32.2.27 2016/05/29 08:44:36 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dwc2.c,v 1.32.2.28 2016/06/10 08:15:22 skrll Exp $"); #include "opt_usb.h" @@ -1264,7 +1264,7 @@ dwc2_init(struct dwc2_softc *sc) TAILQ_INIT(&sc->sc_complete); - sc->sc_rhc_si = softint_establish(SOFTINT_NET | SOFTINT_MPSAFE, + sc->sc_rhc_si = softint_establish(SOFTINT_USB | SOFTINT_MPSAFE, dwc2_rhc, sc); sc->sc_xferpool = pool_cache_init(sizeof(struct dwc2_xfer), 0, 0, 0,