rtc: mark if rtc-cmos drivers were successfully registered

rtc-cmos has two drivers, one PNP and one platform.  When PNP has not
succeeded probing, platform is registered.  However, it tries to
unregister both drivers unconditionally, instead of only unregistering
those that were successfully registered.  This causes runtime warnings to
be emitted from the driver core code.

Fix this with a boolean variable for each driver indicating whether
registering was successful.

Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Bjorn Helgaas <[email protected]>
Cc: Alessandro Zummo <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Kay Sievers <[email protected]>
Cc: Greg KH <[email protected]>
Cc: Ozan Caglayan <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
Thadeu Lima de Souza Cascardo 2009-07-29 15:02:13 -07:00 • committed by Linus Torvalds
commit 659098141d

View file

@ -1174,23 +1174,34 @@ static struct platform_driver cmos_platform_driver = {
}
};
#ifdef CONFIG_PNP
static bool pnp_driver_registered;
#endif
static bool platform_driver_registered;
static int __init cmos_init(void)
{
int retval = 0;
#ifdef CONFIG_PNP
pnp_register_driver(&cmos_pnp_driver);
retval = pnp_register_driver(&cmos_pnp_driver);
if (retval == 0)
pnp_driver_registered = true;
#endif
if (!cmos_rtc.dev)
if (!cmos_rtc.dev) {
retval = platform_driver_probe(&cmos_platform_driver,
cmos_platform_probe);
if (retval == 0)
platform_driver_registered = true;
}
if (retval == 0)
return 0;
#ifdef CONFIG_PNP
pnp_unregister_driver(&cmos_pnp_driver);
if (pnp_driver_registered)
pnp_unregister_driver(&cmos_pnp_driver);
#endif
return retval;
}
@ -1199,9 +1210,11 @@ module_init(cmos_init);
static void __exit cmos_exit(void)
{
#ifdef CONFIG_PNP
pnp_unregister_driver(&cmos_pnp_driver);
if (pnp_driver_registered)
pnp_unregister_driver(&cmos_pnp_driver);
#endif
platform_driver_unregister(&cmos_platform_driver);
if (platform_driver_registered)
platform_driver_unregister(&cmos_platform_driver);
}
module_exit(cmos_exit);