PERFORCE change 120575 for review

Hans Petter Selasky hselasky at FreeBSD.org
Tue May 29 18:21:50 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=120575

Change 120575 by hselasky at hselasky_mini_itx on 2007/05/29 18:21:03

	Fix a panic at USB host controller detach, due to a
	NULL pointer reference. Detaching an USB pcmcia
	card is still not safe due to some code inherited from
	the old USB stack in "usb.c". This will be fixed.

Affected files ...

.. //depot/projects/usb/src/sys/dev/usb/ehci_pci.c#18 edit
.. //depot/projects/usb/src/sys/dev/usb/ohci_pci.c#18 edit
.. //depot/projects/usb/src/sys/dev/usb/uhci_pci.c#17 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/usb/ehci_pci.c#18 (text+ko) ====

@@ -379,14 +379,15 @@
 ehci_pci_detach(device_t self)
 {
 	ehci_softc_t *sc = device_get_softc(self);
+	device_t bdev;
 
 	usbd_config_td_stop(&(sc->sc_config_td));
 
 	if(sc->sc_bus.bdev)
 	{
-		device_detach(sc->sc_bus.bdev);
-		device_delete_child(self, sc->sc_bus.bdev);
-		sc->sc_bus.bdev = NULL;
+		bdev = sc->sc_bus.bdev;
+		device_detach(bdev);
+		device_delete_child(self, bdev);
 	}
 
 	/* during module unload there are lots of children leftover */

==== //depot/projects/usb/src/sys/dev/usb/ohci_pci.c#18 (text+ko) ====

@@ -342,14 +342,15 @@
 ohci_pci_detach(device_t self)
 {
 	ohci_softc_t *sc = device_get_softc(self);
+	device_t bdev;
 
 	usbd_config_td_stop(&(sc->sc_config_td));
 
 	if(sc->sc_bus.bdev)
 	{
-		device_detach(sc->sc_bus.bdev);
-		device_delete_child(self, sc->sc_bus.bdev);
-		sc->sc_bus.bdev = NULL;
+		bdev = sc->sc_bus.bdev;
+		device_detach(bdev);
+		device_delete_child(self, bdev);
 	}
 
 	/* during module unload there are lots of children leftover */

==== //depot/projects/usb/src/sys/dev/usb/uhci_pci.c#17 (text+ko) ====

@@ -342,14 +342,15 @@
 uhci_pci_detach(device_t self)
 {
 	uhci_softc_t *sc = device_get_softc(self);
+	device_t bdev;
 
 	usbd_config_td_stop(&(sc->sc_config_td));
 
 	if(sc->sc_bus.bdev)
 	{
-		device_detach(sc->sc_bus.bdev);
-		device_delete_child(self, sc->sc_bus.bdev);
-		sc->sc_bus.bdev = NULL;
+		bdev = sc->sc_bus.bdev;
+		device_detach(bdev);
+		device_delete_child(self, bdev);
 	}
 
 	/* during module unload there are lots of children leftover */


More information about the p4-projects mailing list