mirror of
https://github.com/opnsense/src.git
synced 2026-02-18 18:20:26 -05:00
spibus: Use a bus_child_deleted method to free ivars for children
Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D47373 (cherry picked from commit 84553ccd0c8b1fa5b3f0b5b70a42a244f26cea75)
This commit is contained in:
parent
87bb96bb47
commit
35c71ac2b6
4 changed files with 22 additions and 0 deletions
|
|
@ -561,6 +561,7 @@ static device_method_t acpi_spibus_methods[] = {
|
|||
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),
|
||||
|
|
|
|||
|
|
@ -191,6 +191,12 @@ ofw_spibus_add_child(device_t dev, u_int order, const char *name, int unit)
|
|||
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)
|
||||
{
|
||||
|
|
@ -217,6 +223,7 @@ static device_method_t ofw_spibus_methods[] = {
|
|||
/* 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 */
|
||||
|
|
|
|||
|
|
@ -199,6 +199,18 @@ spibus_add_child_common(device_t dev, u_int order, const char *name, int unit,
|
|||
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)
|
||||
{
|
||||
|
|
@ -263,6 +275,7 @@ static device_method_t spibus_methods[] = {
|
|||
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),
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ extern driver_t ofw_spibus_driver;
|
|||
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 *);
|
||||
|
|
|
|||
Loading…
Reference in a new issue