This patch (against 2.4.0-test9-pre7) makes all watchdog drivers use
module_init, rather than explicit init calls; as a side-effect, it fixes a
presumed bug that would cause the softdog driver to be used if i810-tco and
softdog were enabled.
I think it would make sense to move the watchdog drivers to a directory of
their own soon. drivers/char names aren't as obvious as they could be, and
removing 10 files should help this situation a bit. Linus ?
Philipp Rumpf
diff -ur linux/drivers/char/Config.in linux-prumpf/drivers/char/Config.in
--- linux/drivers/char/Config.in Fri Sep 29 16:48:37 2000
+++ linux-prumpf/drivers/char/Config.in Fri Sep 29 17:00:34 2000
@@ -122,6 +122,7 @@
bool 'Watchdog Timer Support' CONFIG_WATCHDOG
if [ "$CONFIG_WATCHDOG" != "n" ]; then
bool ' Disable watchdog shutdown on close' CONFIG_WATCHDOG_NOWAYOUT
+ tristate ' Software Watchdog' CONFIG_SOFT_WATCHDOG
tristate ' WDT Watchdog timer' CONFIG_WDT
tristate ' WDT PCI Watchdog timer' CONFIG_WDTPCI
if [ "$CONFIG_WDT" != "n" ]; then
@@ -130,7 +131,6 @@
bool ' Fan Tachometer' CONFIG_WDT_501_FAN
fi
fi
- tristate ' Software Watchdog' CONFIG_SOFT_WATCHDOG
tristate ' Berkshire Products PC Watchdog' CONFIG_PCWATCHDOG
tristate ' Acquire SBC Watchdog Timer' CONFIG_ACQUIRE_WDT
tristate ' SBC-60XX Watchdog Timer' CONFIG_60XX_WDT
diff -ur linux/drivers/char/Makefile linux-prumpf/drivers/char/Makefile
--- linux/drivers/char/Makefile Fri Sep 29 16:48:37 2000
+++ linux-prumpf/drivers/char/Makefile Fri Sep 29 17:00:34 2000
@@ -160,27 +160,16 @@
obj-$(CONFIG_APPLICOM) += applicom.o
obj-$(CONFIG_MS_BUSMOUSE) += msbusmouse.o
obj-$(CONFIG_82C710_MOUSE) += qpmouse.o
-obj-$(CONFIG_SOFT_WATCHDOG) += softdog.o
-obj-$(CONFIG_PCWATCHDOG) += pcwd.o
-obj-$(CONFIG_ACQUIRE_WDT) += acquirewdt.o
-obj-$(CONFIG_MIXCOMWD) += mixcomwd.o
-obj-$(CONFIG_60XX_WDT) += sbc60xxwdt.o
obj-$(CONFIG_AMIGAMOUSE) += amigamouse.o
obj-$(CONFIG_ATARIMOUSE) += atarimouse.o
obj-$(CONFIG_ADBMOUSE) += adbmouse.o
obj-$(CONFIG_PC110_PAD) += pc110pad.o
-obj-$(CONFIG_WDT) += wdt.o
-obj-$(CONFIG_WDTPCI) += wdt_pci.o
obj-$(CONFIG_RTC) += rtc.o
obj-$(CONFIG_EFI_RTC) += efirtc.o
ifeq ($(CONFIG_PPC),)
obj-$(CONFIG_NVRAM) += nvram.o
endif
obj-$(CONFIG_TOSHIBA) += toshiba.o
-
-obj-$(CONFIG_21285_WATCHDOG) += wdt285.o
-obj-$(CONFIG_977_WATCHDOG) += wdt977.o
-obj-$(CONFIG_I810_TCO) += i810-tco.o
obj-$(CONFIG_DS1620) += ds1620.o
obj-$(CONFIG_INTEL_RNG) += i810_rng.o
@@ -230,6 +219,23 @@
MOD_SUB_DIRS += agp
endif
endif
+
+# Only one watchdog can succeed. We probe the hardware watchdog
+# drivers first, then the softdog driver. This means if your hardware
+# watchdog dies or is 'borrowed' for some reason the software watchdog
+# still gives you some cover.
+
+obj-$(CONFIG_PCWATCHDOG) += pcwd.o
+obj-$(CONFIG_ACQUIRE_WDT) += acquirewdt.o
+obj-$(CONFIG_MIXCOMWD) += mixcomwd.o
+obj-$(CONFIG_60XX_WDT) += sbc60xxwdt.o
+obj-$(CONFIG_WDT) += wdt.o
+obj-$(CONFIG_WDTPCI) += wdt_pci.o
+obj-$(CONFIG_21285_WATCHDOG) += wdt285.o
+obj-$(CONFIG_977_WATCHDOG) += wdt977.o
+obj-$(CONFIG_I810_TCO) += i810-tco.o
+obj-$(CONFIG_SOFT_WATCHDOG) += softdog.o
+
# Extract lists of the multi-part drivers.
# The 'int-*' lists are the intermediate files used to build the multi's.
diff -ur linux/drivers/char/acquirewdt.c linux-prumpf/drivers/char/acquirewdt.c
--- linux/drivers/char/acquirewdt.c Sun Jul 23 16:44:36 2000
+++ linux-prumpf/drivers/char/acquirewdt.c Fri Sep 29 17:00:34 2000
@@ -204,21 +204,7 @@
0
};
-#ifdef MODULE
-
-#define acq_init init_module
-
-void cleanup_module(void)
-{
- misc_deregister(&acq_miscdev);
- unregister_reboot_notifier(&acq_notifier);
- release_region(WDT_STOP,1);
- release_region(WDT_START,1);
-}
-
-#endif
-
-int __init acq_init(void)
+static int __init acq_init(void)
{
printk("WDT driver for Acquire single board computer initialising.\n");
@@ -229,4 +215,14 @@
register_reboot_notifier(&acq_notifier);
return 0;
}
+
+static void __exit acq_exit(void)
+{
+ misc_deregister(&acq_miscdev);
+ unregister_reboot_notifier(&acq_notifier);
+ release_region(WDT_STOP,1);
+ release_region(WDT_START,1);
+}
+module_init(acq_init);
+module_exit(acq_exit);
diff -ur linux/drivers/char/i810-tco.c linux-prumpf/drivers/char/i810-tco.c
--- linux/drivers/char/i810-tco.c Tue Sep 26 14:30:46 2000
+++ linux-prumpf/drivers/char/i810-tco.c Fri Sep 29 17:00:34 2000
@@ -301,10 +301,9 @@
tco_timer_settimer ((unsigned char) i810_margin);
tco_timer_reload ();
- /* FIXME: no floating point math */
printk (KERN_INFO
"i810 TCO timer: V0.02, timer margin: %d sec (0x%04x)\n",
- (int) (i810_margin * 0.6), TCOBASE);
+ (int) (i810_margin * 6 / 10), TCOBASE);
return 0;
}
diff -ur linux/drivers/char/misc.c linux-prumpf/drivers/char/misc.c
--- linux/drivers/char/misc.c Fri Sep 29 16:48:38 2000
+++ linux-prumpf/drivers/char/misc.c Fri Sep 29 17:00:34 2000
@@ -70,8 +70,6 @@
extern void gfx_register(void);
#endif
extern void streamable_init(void);
-extern void watchdog_init(void);
-extern void pcwatchdog_init(void);
extern int rtc_sun_init(void); /* Combines MK48T02 and MK48T08 */
extern int rtc_DP8570A_init(void);
extern int rtc_MK48T08_init(void);
@@ -254,18 +252,6 @@
#endif
#ifdef CONFIG_PC110_PAD
pc110pad_init();
-#endif
-/*
- * Only one watchdog can succeed. We probe the pcwatchdog first,
- * then the wdt cards and finally the software watchdog which always
- * works. This means if your hardware watchdog dies or is 'borrowed'
- * for some reason the software watchdog still gives you some cover.
- */
-#ifdef CONFIG_PCWATCHDOG
- pcwatchdog_init();
-#endif
-#ifdef CONFIG_SOFT_WATCHDOG
- watchdog_init();
#endif
#ifdef CONFIG_MVME16x
rtc_MK48T08_init();
diff -ur linux/drivers/char/mixcomwd.c linux-prumpf/drivers/char/mixcomwd.c
--- linux/drivers/char/mixcomwd.c Sun Jul 23 16:44:37 2000
+++ linux-prumpf/drivers/char/mixcomwd.c Fri Sep 29 17:00:34 2000
@@ -216,7 +216,7 @@
return 1;
}
-void __init mixcomwd_init(void)
+static int __init mixcomwd_init(void)
{
int i;
int found=0;
@@ -247,14 +247,7 @@
printk(KERN_INFO "MixCOM watchdog driver v%s, watchdog port at 0x%3x\n",VERSION,watchdog_port);
}
-#ifdef MODULE
-int init_module(void)
-{
- mixcomwd_init();
- return 0;
-}
-
-void cleanup_module(void)
+static void __exit mixcomwd_exit(void)
{
#ifndef CONFIG_WATCHDOG_NOWAYOUT
if(mixcomwd_timer_alive) {
@@ -267,4 +260,6 @@
release_region(watchdog_port,1);
misc_deregister(&mixcomwd_miscdev);
}
-#endif
+
+module_init(mixcomwd_init);
+module_exit(mixcomwd_exit);
diff -ur linux/drivers/char/pcwd.c linux-prumpf/drivers/char/pcwd.c
--- linux/drivers/char/pcwd.c Sun Jul 23 16:44:37 2000
+++ linux-prumpf/drivers/char/pcwd.c Fri Sep 29 19:10:23 2000
@@ -564,11 +564,7 @@
&pcwd_fops
};
-#ifdef MODULE
-int init_module(void)
-#else
-int __init pcwatchdog_init(void)
-#endif
+static int __init pcwatchdog_init(void)
{
int i, found = 0;
spin_lock_init(&io_lock);
@@ -644,8 +640,7 @@
return 0;
}
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit pcwatchdog_exit(void)
{
/* Disable the board */
if (revision == PCWD_REVISION_C) {
@@ -658,4 +653,6 @@
release_region(current_readport, (revision == PCWD_REVISION_A) ? 2 : 4);
}
-#endif
+
+module_init(pcwatchdog_init);
+module_exit(pcwatchdog_exit);
diff -ur linux/drivers/char/sbc60xxwdt.c linux-prumpf/drivers/char/sbc60xxwdt.c
--- linux/drivers/char/sbc60xxwdt.c Sun Jul 23 16:44:37 2000
+++ linux-prumpf/drivers/char/sbc60xxwdt.c Fri Sep 29 19:10:03 2000
@@ -338,4 +338,4 @@
}
module_init(sbc60xxwdt_init);
-module_exit(sbc60xxwdt_unload)
+module_exit(sbc60xxwdt_unload);
diff -ur linux/drivers/char/softdog.c linux-prumpf/drivers/char/softdog.c
--- linux/drivers/char/softdog.c Sun Jul 23 16:44:37 2000
+++ linux-prumpf/drivers/char/softdog.c Fri Sep 29 17:00:35 2000
@@ -164,7 +164,7 @@
&softdog_fops
};
-void __init watchdog_init(void)
+static int __init watchdog_init(void)
{
misc_register(&softdog_miscdev);
init_timer(&watchdog_ticktock);
@@ -172,15 +172,10 @@
printk("Software Watchdog Timer: 0.05, timer margin: %d sec\n", soft_margin);
}
-#ifdef MODULE
-int init_module(void)
-{
- watchdog_init();
- return 0;
-}
-
-void cleanup_module(void)
+static void __exit watchdog_exit(void)
{
misc_deregister(&softdog_miscdev);
}
-#endif
+
+module_init(watchdog_init);
+module_exit(watchdog_exit);
diff -ur linux/drivers/char/wdt.c linux-prumpf/drivers/char/wdt.c
--- linux/drivers/char/wdt.c Fri Sep 29 16:48:38 2000
+++ linux-prumpf/drivers/char/wdt.c Fri Sep 29 19:12:05 2000
@@ -459,10 +459,6 @@
0
};
-#ifdef MODULE
-
-#define wdt_init init_module
-
/**
* cleanup_module:
*
@@ -473,7 +469,7 @@
* module in 60 seconds or reboot.
*/
-void cleanup_module(void)
+static void __exit wdt_exit(void)
{
misc_deregister(&wdt_miscdev);
#ifdef CONFIG_WDT_501
@@ -484,8 +480,6 @@
free_irq(irq, NULL);
}
-#endif
-
/**
* wdt_init:
*
@@ -494,7 +488,7 @@
* The open() function will actually kick the board off.
*/
-int __init wdt_init(void)
+static int __init wdt_init(void)
{
int ret;
@@ -545,4 +539,7 @@
misc_deregister(&wdt_miscdev);
goto out;
}
+
+module_init(wdt_init);
+module_exit(wdt_exit);
diff -ur linux/drivers/char/wdt_pci.c linux-prumpf/drivers/char/wdt_pci.c
--- linux/drivers/char/wdt_pci.c Fri Sep 29 16:48:38 2000
+++ linux-prumpf/drivers/char/wdt_pci.c Fri Sep 29 17:00:35 2000
@@ -274,7 +274,7 @@
* @ptr: offset (no seek allowed)
*
* Read reports the temperature in degrees Fahrenheit. The API is in
- * farenheit. It was designed by an imperial measurement luddite.
+ * fahrenheit. It was designed by an imperial measurement luddite.
*/
static ssize_t wdtpci_read(struct file *file, char *buf, size_t count, loff_t *ptr)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sat Sep 30 2000 - 21:00:26 EST