The branch main has been updated by jhb:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=5c7af84925aa0916983551b0d470b461a70c0f1f

commit 5c7af84925aa0916983551b0d470b461a70c0f1f
Author:     John Baldwin <[email protected]>
AuthorDate: 2024-11-01 14:08:44 +0000
Commit:     John Baldwin <[email protected]>
CommitDate: 2024-11-01 14:08:44 +0000

    nvdimm: Use a bus_child_deleted method to free ivars for children
    
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D47363
---
 sys/dev/nvdimm/nvdimm_acpi.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/sys/dev/nvdimm/nvdimm_acpi.c b/sys/dev/nvdimm/nvdimm_acpi.c
index a8e5db0542f2..f6a7ebe6e2b9 100644
--- a/sys/dev/nvdimm/nvdimm_acpi.c
+++ b/sys/dev/nvdimm/nvdimm_acpi.c
@@ -197,13 +197,18 @@ nvdimm_root_attach(device_t dev)
        return (error);
 }
 
+static void
+nvdimm_root_child_deleted(device_t dev, device_t child)
+{
+       free(device_get_ivars(child), M_NVDIMM_ACPI);
+}
+
 static int
 nvdimm_root_detach(device_t dev)
 {
        struct nvdimm_root_dev *root;
        struct SPA_mapping *spa, *next;
-       device_t *children;
-       int i, error, num_children;
+       int error;
 
        root = device_get_softc(dev);
        SLIST_FOREACH_SAFE(spa, &root->spas, link, next) {
@@ -215,12 +220,6 @@ nvdimm_root_detach(device_t dev)
        error = bus_generic_detach(dev);
        if (error != 0)
                return (error);
-       error = device_get_children(dev, &children, &num_children);
-       if (error != 0)
-               return (error);
-       for (i = 0; i < num_children; i++)
-               free(device_get_ivars(children[i]), M_NVDIMM_ACPI);
-       free(children, M_TEMP);
        error = device_delete_children(dev);
        return (error);
 }
@@ -264,6 +263,7 @@ static device_method_t nvdimm_acpi_methods[] = {
        DEVMETHOD(device_attach, nvdimm_root_attach),
        DEVMETHOD(device_detach, nvdimm_root_detach),
        DEVMETHOD(bus_add_child, bus_generic_add_child),
+       DEVMETHOD(bus_child_deleted, nvdimm_root_child_deleted),
        DEVMETHOD(bus_read_ivar, nvdimm_root_read_ivar),
        DEVMETHOD(bus_write_ivar, nvdimm_root_write_ivar),
        DEVMETHOD(bus_child_location, nvdimm_root_child_location),

Reply via email to