Page MenuHomeFreeBSD

D47373.diff
No OneTemporary

D47373.diff

diff --git a/sys/dev/spibus/acpi_spibus.c b/sys/dev/spibus/acpi_spibus.c
--- a/sys/dev/spibus/acpi_spibus.c
+++ b/sys/dev/spibus/acpi_spibus.c
@@ -561,6 +561,7 @@
DEVMETHOD(bus_alloc_resource, acpi_spibus_alloc_resource),
#endif
DEVMETHOD(bus_add_child, acpi_spibus_add_child),
+ DEVMETHOD(bus_child_deleted, spibus_child_deleted),
DEVMETHOD(bus_probe_nomatch, acpi_spibus_probe_nomatch),
DEVMETHOD(bus_driver_added, acpi_spibus_driver_added),
DEVMETHOD(bus_child_deleted, acpi_spibus_child_deleted),
diff --git a/sys/dev/spibus/ofw_spibus.c b/sys/dev/spibus/ofw_spibus.c
--- a/sys/dev/spibus/ofw_spibus.c
+++ b/sys/dev/spibus/ofw_spibus.c
@@ -190,6 +190,12 @@
return (child);
}
+static void
+ofw_spibus_child_deleted(device_t dev, device_t child)
+{
+ free(device_get_ivars(child), M_DEVBUF);
+}
+
static const struct ofw_bus_devinfo *
ofw_spibus_get_devinfo(device_t bus, device_t dev)
{
@@ -216,6 +222,7 @@
/* Bus interface */
DEVMETHOD(bus_child_pnpinfo, ofw_bus_gen_child_pnpinfo),
DEVMETHOD(bus_add_child, ofw_spibus_add_child),
+ DEVMETHOD(bus_child_deleted, ofw_spibus_child_deleted),
DEVMETHOD(bus_get_resource_list, ofw_spibus_get_resource_list),
/* ofw_bus interface */
diff --git a/sys/dev/spibus/spibus.c b/sys/dev/spibus/spibus.c
--- a/sys/dev/spibus/spibus.c
+++ b/sys/dev/spibus/spibus.c
@@ -198,6 +198,18 @@
return (child);
}
+void
+spibus_child_deleted(device_t dev, device_t child)
+{
+ struct spibus_ivar *devi;
+
+ devi = device_get_ivars(child);
+ if (devi == NULL)
+ return;
+ resource_list_free(&devi->rl);
+ free(devi, M_DEVBUF);
+}
+
static device_t
spibus_add_child(device_t dev, u_int order, const char *name, int unit)
{
@@ -262,6 +274,7 @@
DEVMETHOD(bus_get_resource_list, spibus_get_resource_list),
DEVMETHOD(bus_add_child, spibus_add_child),
+ DEVMETHOD(bus_child_deleted, spibus_child_deleted),
DEVMETHOD(bus_print_child, spibus_print_child),
DEVMETHOD(bus_probe_nomatch, spibus_probe_nomatch),
DEVMETHOD(bus_read_ivar, spibus_read_ivar),
diff --git a/sys/dev/spibus/spibusvar.h b/sys/dev/spibus/spibusvar.h
--- a/sys/dev/spibus/spibusvar.h
+++ b/sys/dev/spibus/spibusvar.h
@@ -79,6 +79,7 @@
int spibus_attach(device_t);
int spibus_detach(device_t);
device_t spibus_add_child_common(device_t, u_int, const char *, int, size_t);
+void spibus_child_deleted(device_t, device_t);
void spibus_probe_nomatch(device_t, device_t);
int spibus_child_location(device_t, device_t, struct sbuf *);
int spibus_read_ivar(device_t, device_t, int, uintptr_t *);

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 17, 12:50 PM (20 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14663795
Default Alt Text
D47373.diff (2 KB)

Event Timeline