Date: Fri, 7 Aug 2009 17:52:35 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 167093 for review Message-ID: <200908071752.n77HqZgv066461@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=167093 Change 167093 by hselasky@hselasky_laptop001 on 2009/08/07 17:52:11 USB CORE: - fix recent newbus deadlock with regard to USB - all parts of the USB stack except the Linux Compat Layer, shall use the shared lock version of the newbus lock! - remove redundant locking in "if_upgt.c" Affected files ... .. //depot/projects/usb/src/sys/dev/usb/controller/usb_controller.c#29 edit .. //depot/projects/usb/src/sys/dev/usb/net/usb_ethernet.c#10 edit .. //depot/projects/usb/src/sys/dev/usb/wlan/if_upgt.c#14 edit .. //depot/projects/usb/src/sys/kern/subr_bus.c#25 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/controller/usb_controller.c#29 (text+ko) ==== @@ -265,9 +265,9 @@ USB_BUS_UNLOCK(bus); /* detach children first */ - newbus_xlock(); + newbus_slock(); bus_generic_detach(dev); - newbus_xunlock(); + newbus_sunlock(); /* * Free USB Root device, but not any sub-devices, hence they @@ -406,10 +406,10 @@ { const char *pname = device_get_nameunit(dev); - newbus_xlock(); + newbus_slock(); if (usb_devclass_ptr == NULL) usb_devclass_ptr = devclass_find("usbus"); - newbus_xunlock(); + newbus_sunlock(); /* Initialise USB process messages */ bus->explore_msg[0].hdr.pm_callback = &usb_bus_explore; ==== //depot/projects/usb/src/sys/dev/usb/net/usb_ethernet.c#10 (text+ko) ==== @@ -221,10 +221,10 @@ if (ue->ue_methods->ue_mii_upd != NULL && ue->ue_methods->ue_mii_sts != NULL) { - newbus_xlock(); + newbus_slock(); error = mii_phy_probe(ue->ue_dev, &ue->ue_miibus, ue_ifmedia_upd, ue->ue_methods->ue_mii_sts); - newbus_xunlock(); + newbus_sunlock(); if (error) { device_printf(ue->ue_dev, "MII without any PHY\n"); goto error; ==== //depot/projects/usb/src/sys/dev/usb/wlan/if_upgt.c#14 (text+ko) ==== @@ -465,7 +465,6 @@ switch (cmd) { case SIOCSIFFLAGS: - newbus_xlock(); if (ifp->if_flags & IFF_UP) { if (ifp->if_drv_flags & IFF_DRV_RUNNING) { if ((ifp->if_flags ^ sc->sc_if_flags) & @@ -482,7 +481,6 @@ sc->sc_if_flags = ifp->if_flags; if (startall) ieee80211_start_all(ic); - newbus_xunlock(); break; case SIOCGIFMEDIA: error = ifmedia_ioctl(ifp, ifr, &ic->ic_media, cmd); ==== //depot/projects/usb/src/sys/kern/subr_bus.c#25 (text+ko) ==== @@ -1109,7 +1109,7 @@ int i; int error; - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); PDEBUG(("%s from devclass %s", driver->name, DEVCLANAME(busclass))); if (!dc) @@ -1808,7 +1808,7 @@ int error; device_t grandchild; - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); PDEBUG(("%s from %s", DEVICENAME(child), DEVICENAME(dev))); /* remove children first */ @@ -1907,7 +1907,7 @@ int result, pri = 0; int hasclass = (child->devclass != NULL); - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); dc = dev->devclass; if (!dc) @@ -2558,7 +2558,7 @@ { int error; - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); if (dev->state >= DS_ALIVE && (dev->flags & DF_REBID) == 0) return (-1); @@ -2592,7 +2592,7 @@ { int error; - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); error = device_probe(dev); if (error == -1) @@ -2626,7 +2626,7 @@ { int error; - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); device_sysctl_init(dev); if (!device_is_quiet(dev)) @@ -2669,7 +2669,7 @@ { int error; - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); PDEBUG(("%s", DEVICENAME(dev))); if (dev->state == DS_BUSY) @@ -2713,7 +2713,7 @@ device_quiesce(device_t dev) { - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); PDEBUG(("%s", DEVICENAME(dev))); if (dev->state == DS_BUSY) @@ -3151,7 +3151,7 @@ { device_t child; - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); TAILQ_FOREACH(child, &dev->children, link) { device_probe_and_attach(child); @@ -3173,7 +3173,7 @@ device_t child; int error; - NBL_ASSERT(SA_XLOCKED); + NBL_ASSERT(SA_LOCKED); if (dev->state != DS_ATTACHED) return (EBUSY);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908071752.n77HqZgv066461>