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

ipmi_ssif: fix unexpected driver unregister warning

If platform_driver_register() fails from init_ipmi_ssif(),
platform_driver_unregister() called unconditionally will
trigger following warning,

ipmi_ssif: Unable to register driver: -12
------------[ cut here ]------------
Unexpected driver unregister!
WARNING: CPU: 1 PID: 6305 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: <20190524143724.43218-1-wangkefeng.wang@huawei.com>

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

authored by

Kefeng Wang and committed by
Corey Minyard
2cd0e544 dd7450ca

+4 -1
+4 -1
drivers/char/ipmi/ipmi_ssif.c
··· 303 303 ((unsigned int) atomic_read(&(ssif)->stats[SSIF_STAT_ ## stat])) 304 304 305 305 static bool initialized; 306 + static bool platform_registered; 306 307 307 308 static void return_hosed_msg(struct ssif_info *ssif_info, 308 309 struct ipmi_smi_msg *msg); ··· 2089 2088 rv = platform_driver_register(&ipmi_driver); 2090 2089 if (rv) 2091 2090 pr_err("Unable to register driver: %d\n", rv); 2091 + else 2092 + platform_registered = true; 2092 2093 } 2093 2094 2094 2095 ssif_i2c_driver.address_list = ssif_address_list(); ··· 2114 2111 2115 2112 kfree(ssif_i2c_driver.address_list); 2116 2113 2117 - if (ssif_trydmi) 2114 + if (ssif_trydmi && platform_registered) 2118 2115 platform_driver_unregister(&ipmi_driver); 2119 2116 2120 2117 free_ssif_clients();