[PATCH] watchdog cleanups/bugfixes

From: Philipp Rumpf (prumpf@parcelfarce.linux.theplanet.co.uk)
Date: Fri Sep 29 2000 - 22:26:53 EDT

  • Next message: Chris Kloiber: "Re: What is up with Redhat 7.0?"

    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 : Fri Sep 29 2000 - 22:30:03 EDT