Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ipmi_si: fix unexpected driver unregister warning

If ipmi_si_platform_init()->platform_driver_register() fails,
platform_driver_unregister() called unconditionally will trigger
following warning,

ipmi_platform: Unable to register driver: -12
------------[ cut here ]------------
Unexpected driver unregister!
WARNING: CPU: 1 PID: 7210 at drivers/base/driver.c:193 driver_unregister+0x60/0x70 drivers/base/driver.c:193

Fix it by adding platform_registered variable, only unregister platform
driver when it is already successfully registered.

Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Message-Id: <20190517101245.4341-1-wangkefeng.wang@huawei.com>

Signed-off-by: Corey Minyard <cminyard@mvista.com>

authored by

Kefeng Wang and committed by
Corey Minyard
2f663539 a188339c

+5 -1
+5 -1
drivers/char/ipmi/ipmi_si_platform.c
··· 19 19 #include "ipmi_si.h" 20 20 #include "ipmi_dmi.h" 21 21 22 + static bool platform_registered; 22 23 static bool si_tryplatform = true; 23 24 #ifdef CONFIG_ACPI 24 25 static bool si_tryacpi = true; ··· 470 469 int rv = platform_driver_register(&ipmi_platform_driver); 471 470 if (rv) 472 471 pr_err("Unable to register driver: %d\n", rv); 472 + else 473 + platform_registered = true; 473 474 } 474 475 475 476 void ipmi_si_platform_shutdown(void) 476 477 { 477 - platform_driver_unregister(&ipmi_platform_driver); 478 + if (platform_registered) 479 + platform_driver_unregister(&ipmi_platform_driver); 478 480 }