Date: Tue, 29 May 2007 18:21:49 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 120575 for review Message-ID: <200705291821.l4TILnDj086406@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=120575 Change 120575 by hselasky@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 */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200705291821.l4TILnDj086406>