watchdog: sb_wdog: release irq and reboot notifier in error path and module_exit()
irq and reboot notifier are acquired in module_init() but never released. They should be released correctly, otherwise reloading the module or error during module_init() will cause a problem. Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Cc: Andrew Sharp <andy.sharp@lsi.com> Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
This commit is contained in:
parent
9c03f1622a
commit
ae44855ae8
|
@ -305,7 +305,7 @@ static int __init sbwdog_init(void)
|
|||
if (ret) {
|
||||
printk(KERN_ERR "%s: failed to request irq 1 - %d\n",
|
||||
ident.identity, ret);
|
||||
return ret;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = misc_register(&sbwdog_miscdev);
|
||||
|
@ -313,14 +313,20 @@ static int __init sbwdog_init(void)
|
|||
printk(KERN_INFO "%s: timeout is %ld.%ld secs\n",
|
||||
ident.identity,
|
||||
timeout / 1000000, (timeout / 100000) % 10);
|
||||
} else
|
||||
free_irq(1, (void *)user_dog);
|
||||
return 0;
|
||||
}
|
||||
free_irq(1, (void *)user_dog);
|
||||
out:
|
||||
unregister_reboot_notifier(&sbwdog_notifier);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __exit sbwdog_exit(void)
|
||||
{
|
||||
misc_deregister(&sbwdog_miscdev);
|
||||
free_irq(1, (void *)user_dog);
|
||||
unregister_reboot_notifier(&sbwdog_notifier);
|
||||
}
|
||||
|
||||
module_init(sbwdog_init);
|
||||
|
|
Loading…
Reference in New Issue