|
@@ -305,7 +305,7 @@ static int __init sbwdog_init(void)
|
|
if (ret) {
|
|
if (ret) {
|
|
printk(KERN_ERR "%s: failed to request irq 1 - %d\n",
|
|
printk(KERN_ERR "%s: failed to request irq 1 - %d\n",
|
|
ident.identity, ret);
|
|
ident.identity, ret);
|
|
- return ret;
|
|
|
|
|
|
+ goto out;
|
|
}
|
|
}
|
|
|
|
|
|
ret = misc_register(&sbwdog_miscdev);
|
|
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",
|
|
printk(KERN_INFO "%s: timeout is %ld.%ld secs\n",
|
|
ident.identity,
|
|
ident.identity,
|
|
timeout / 1000000, (timeout / 100000) % 10);
|
|
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;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static void __exit sbwdog_exit(void)
|
|
static void __exit sbwdog_exit(void)
|
|
{
|
|
{
|
|
misc_deregister(&sbwdog_miscdev);
|
|
misc_deregister(&sbwdog_miscdev);
|
|
|
|
+ free_irq(1, (void *)user_dog);
|
|
|
|
+ unregister_reboot_notifier(&sbwdog_notifier);
|
|
}
|
|
}
|
|
|
|
|
|
module_init(sbwdog_init);
|
|
module_init(sbwdog_init);
|