Merge tag 'for-linus-5.3' of git://github.com/cminyard/linux-ipmi
[sfrench/cifs-2.6.git] / drivers / char / ipmi / ipmi_si_platform.c
index fd94c423844944cd34b378cba20486c15d743549..22f6c9b20e9a153d0182438a83ff813cf536c832 100644 (file)
@@ -19,6 +19,7 @@
 #include "ipmi_si.h"
 #include "ipmi_dmi.h"
 
+static bool platform_registered;
 static bool si_tryplatform = true;
 #ifdef CONFIG_ACPI
 static bool          si_tryacpi = true;
@@ -443,6 +444,7 @@ void ipmi_remove_platform_device_by_name(char *name)
                struct platform_device *pdev = to_platform_device(dev);
 
                platform_device_unregister(pdev);
+               put_device(dev);
        }
 }
 
@@ -469,9 +471,12 @@ void ipmi_si_platform_init(void)
        int rv = platform_driver_register(&ipmi_platform_driver);
        if (rv)
                pr_err("Unable to register driver: %d\n", rv);
+       else
+               platform_registered = true;
 }
 
 void ipmi_si_platform_shutdown(void)
 {
-       platform_driver_unregister(&ipmi_platform_driver);
+       if (platform_registered)
+               platform_driver_unregister(&ipmi_platform_driver);
 }