svn commit: r215945 - stable/8/sys/dev/usb/controller

Andrew Thompson thompsa at FreeBSD.org
Sat Nov 27 19:37:34 UTC 2010


Author: thompsa
Date: Sat Nov 27 19:37:33 2010
New Revision: 215945
URL: http://svn.freebsd.org/changeset/base/215945

Log:
  MFC r213425
  
   The root mount hold reference was not released on USB controller
   attach failures during boot.

Modified:
  stable/8/sys/dev/usb/controller/usb_controller.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/mips/alchemy/   (props changed)
  stable/8/sys/mips/atheros/   (props changed)
  stable/8/sys/mips/cavium/   (props changed)
  stable/8/sys/mips/cavium/dev/   (props changed)
  stable/8/sys/mips/rmi/   (props changed)
  stable/8/sys/mips/rmi/dev/   (props changed)
  stable/8/sys/mips/sibyte/   (props changed)

Modified: stable/8/sys/dev/usb/controller/usb_controller.c
==============================================================================
--- stable/8/sys/dev/usb/controller/usb_controller.c	Sat Nov 27 19:35:12 2010	(r215944)
+++ stable/8/sys/dev/usb/controller/usb_controller.c	Sat Nov 27 19:37:33 2010	(r215945)
@@ -126,6 +126,16 @@ usb_probe(device_t dev)
 	return (0);
 }
 
+static void
+usb_root_mount_rel(struct usb_bus *bus)
+{
+	if (bus->bus_roothold != NULL) {
+		DPRINTF("Releasing root mount hold %p\n", bus->bus_roothold);
+		root_mount_rel(bus->bus_roothold);
+		bus->bus_roothold = NULL;
+	}
+}
+
 /*------------------------------------------------------------------------*
  *	usb_attach
  *------------------------------------------------------------------------*/
@@ -169,10 +179,7 @@ usb_detach(device_t dev)
 	usb_callout_drain(&bus->power_wdog);
 
 	/* Let the USB explore process detach all devices. */
-	if (bus->bus_roothold != NULL) {
-		root_mount_rel(bus->bus_roothold);
-		bus->bus_roothold = NULL;
-	}
+	usb_root_mount_rel(bus);
 
 	USB_BUS_LOCK(bus);
 	if (usb_proc_msignal(&bus->explore_proc,
@@ -249,10 +256,7 @@ usb_bus_explore(struct usb_proc_msg *pm)
 		(udev->hub->explore) (udev);
 		USB_BUS_LOCK(bus);
 	}
-	if (bus->bus_roothold != NULL) {
-		root_mount_rel(bus->bus_roothold);
-		bus->bus_roothold = NULL;
-	}
+	usb_root_mount_rel(bus);
 }
 
 /*------------------------------------------------------------------------*
@@ -363,6 +367,7 @@ usb_bus_attach(struct usb_proc_msg *pm)
 
 	default:
 		device_printf(bus->bdev, "Unsupported USB revision\n");
+		usb_root_mount_rel(bus);
 		return;
 	}
 
@@ -404,6 +409,7 @@ usb_bus_attach(struct usb_proc_msg *pm)
 	if (err) {
 		device_printf(bus->bdev, "Root HUB problem, error=%s\n",
 		    usbd_errstr(err));
+		usb_root_mount_rel(bus);
 	}
 
 	/* set softc - we are ready */


More information about the svn-src-all mailing list