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 [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to