diff --git a/sys/dev/bhnd/bhndb/bhndb.c b/sys/dev/bhnd/bhndb/bhndb.c index eeff088ffdd..511beae0cc2 100644 --- a/sys/dev/bhnd/bhndb/bhndb.c +++ b/sys/dev/bhnd/bhndb/bhndb.c @@ -1037,7 +1037,7 @@ static int bhndb_release_resource(device_t dev, device_t child, struct resource *r) { struct bhndb_softc *sc; - struct resource_list_entry *rle; + struct resource_list_entry *rle = NULL; bool passthrough; int error; @@ -1058,16 +1058,17 @@ bhndb_release_resource(device_t dev, device_t child, struct resource *r) return (error); } + /* Check for resource list entry */ + if (!passthrough) + rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child), + rman_get_type(r), rman_get_rid(r)); + if ((error = rman_release_resource(r))) return (error); - if (!passthrough) { - /* Clean resource list entry */ - rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child), - rman_get_type(r), rman_get_rid(r)); - if (rle != NULL) - rle->res = NULL; - } + /* Clean resource list entry */ + if (rle != NULL) + rle->res = NULL; return (0); } diff --git a/sys/dev/bhnd/cores/chipc/chipc.c b/sys/dev/bhnd/cores/chipc/chipc.c index 010ebbbd6cb..09ca4d8884e 100644 --- a/sys/dev/bhnd/cores/chipc/chipc.c +++ b/sys/dev/bhnd/cores/chipc/chipc.c @@ -893,6 +893,10 @@ chipc_release_resource(device_t dev, device_t child, struct resource *r) if (cr == NULL) return (EINVAL); + /* Cache rle */ + rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child), + rman_get_type(r), rman_get_rid(r)); + /* Deactivate resources */ error = bus_generic_rman_release_resource(dev, child, r); if (error != 0) @@ -902,8 +906,6 @@ chipc_release_resource(device_t dev, device_t child, struct resource *r) chipc_release_region(sc, cr, RF_ALLOCATED); /* Clear reference from the resource list entry if exists */ - rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child), - rman_get_type(r), rman_get_rid(r)); if (rle != NULL) rle->res = NULL;