devinfo_del() can safely be called mutiple times. Call it from free_device_res() so that remaining resources are freed before the device goes out of scope.
Signed-off-by: Sascha Hauer <[email protected]> --- drivers/base/driver.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/base/driver.c b/drivers/base/driver.c index eca23d7c30..eefed4b1a5 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c @@ -348,6 +348,7 @@ EXPORT_SYMBOL(unregister_device); */ void free_device_res(struct device *dev) { + devinfo_del(dev, NULL); free(dev->unique_name); dev->unique_name = NULL; free(dev->deferred_probe_reason); @@ -825,10 +826,11 @@ void devinfo_del(struct device *dev, void (*info)(struct device *)) devinfo_init(dev); list_for_each_entry_safe(cb, tmp, &dev->info_list, list) { - if (cb->info == info) { - list_del(&cb->list); - free(cb); - } + if (info && cb->info != info) + continue; + + list_del(&cb->list); + free(cb); } } -- 2.47.3
