Page MenuHomeFreeBSD

D26468.diff
No OneTemporary

D26468.diff

Index: sys/dev/fdt/simplebus.h
===================================================================
--- sys/dev/fdt/simplebus.h
+++ sys/dev/fdt/simplebus.h
@@ -67,5 +67,6 @@
struct simplebus_softc *sc);
int simplebus_attach(device_t dev);
+int simplebus_detach(device_t dev);
#endif /* _FDT_SIMPLEBUS_H */
Index: sys/dev/fdt/simplebus.c
===================================================================
--- sys/dev/fdt/simplebus.c
+++ sys/dev/fdt/simplebus.c
@@ -67,7 +67,7 @@
/* Device interface */
DEVMETHOD(device_probe, simplebus_probe),
DEVMETHOD(device_attach, simplebus_attach),
- DEVMETHOD(device_detach, bus_generic_detach),
+ DEVMETHOD(device_detach, simplebus_detach),
DEVMETHOD(device_shutdown, bus_generic_shutdown),
DEVMETHOD(device_suspend, bus_generic_suspend),
DEVMETHOD(device_resume, bus_generic_resume),
@@ -155,6 +155,33 @@
for (node = OF_child(sc->node); node > 0; node = OF_peer(node))
simplebus_add_device(dev, node, 0, NULL, -1, NULL);
return (bus_generic_attach(dev));
+}
+
+int
+simplebus_detach(device_t dev)
+{
+ struct simplebus_softc *sc;
+ struct simplebus_devinfo *ndi;
+ device_t *devlist;
+ int index, num;
+
+ sc = device_get_softc(dev);
+
+ /* Free ranges */
+ if (sc->ranges)
+ free(sc->ranges, M_DEVBUF);
+
+ /* Free simplebus_devinfo ndi */
+ device_get_children(dev, &devlist, &num);
+ for (index = 0; index < num; index++) {
+ ndi = device_get_ivars(devlist[index]);
+ free(ndi, M_DEVBUF);
+ }
+ free(devlist, M_TEMP);
+
+ bus_generic_detach(dev);
+
+ return (0);
}
void

File Metadata

Mime Type
text/plain
Expires
Sun, Aug 2, 7:02 AM (52 m, 56 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35852320
Default Alt Text
D26468.diff (1 KB)

Event Timeline