device_del() should be called first and then called put_device() in unregister path, becase if that the final reference count, the device will be cleaned up via device_release() above. So use device_unregister() instead. Fixes: 9885440b16b8 (PCI: Fix pci_host_bridge struct device release/free handling) Signed-off-by: Yajun Deng <yajun.deng@xxxxxxxxx> --- drivers/pci/probe.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 0ec5c792c27d..abd481a15a17 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -994,9 +994,7 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge) return 0; unregister: - put_device(&bridge->dev); - device_del(&bridge->dev); - + device_unregister(&bridge->dev); free: kfree(bus); return err; -- 2.32.0