Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Mar 2007 16:32:41 +0100 (CET)
From:      Nick Hibma <nick@van-laarhoven.org>
To:        Mike Tancsa <mike@sentex.net>
Cc:        freebsd-stable@FreeBSD.org
Subject:   Re: cvs commit: src/share/man/man4 Makefile watchdog.4 src/share/man/man9 watchdog.9 src/sys/arm/xscale/i80321 i80321_wdog.c src/sys/dev/ichwd ichwd.c src/sys/dev/ipmi ipmi.c src/sys/dev/mk48txx mk48txx.c src/sys/dev/watchdog watchdog.c ...
Message-ID:  <20070313162641.S17388@localhost>
In-Reply-To: <200703131524.l2DFOSHY024018@lava.sentex.ca>
References:  <200702202256.l1KMuTPN046797@repoman.freebsd.org> <200703092140.l29LeUZ8002593@lava.sentex.ca> <200703131524.l2DFOSHY024018@lava.sentex.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
> Hi,
> I think the issue is that in the commit you wiped out the part where the dog 
> gets enabled ?
>
> This diff against what you committed gets it working once again

Yes, the enable is missing. The (untested) fix should be:

--- ichwd.c~    Tue Feb 20 23:56:27 2007
+++ ichwd.c     Tue Mar 13 16:31:11 2007
@@ -183,8 +183,11 @@
         timeout = ((uint64_t)1 << cmd) / ICHWD_TICK;
         if (cmd > 0 && cmd <= 63
             && timeout >= ICHWD_MIN_TIMEOUT && timeout <= ICHWD_MAX_TIMEOUT) {
-               if (timeout != sc->timeout)
+               if (timeout != sc->timeout) {
+                       if (!sc->active)
+                               ichwd_tmr_enable(sc);
                         ichwd_tmr_set(sc, timeout);
+               }

                 ichwd_tmr_reload(sc);
                 *error = 0;


Nick

>
>
> --- ichwd.c.old     Tue Feb 20 17:56:27 2007
> +++ ichwd.c         Tue Mar 13 10:19:12 2007
> @@ -178,6 +178,16 @@
>        struct ichwd_softc *sc = arg;
>        unsigned int timeout;
>
> +/* disable / enable */
> +        if (!(cmd & WD_ACTIVE)) {
> +                if (sc->active)
> +                        ichwd_tmr_disable(sc);
> +                *error = 0;
> +                return;
> +        }
> +        if (!sc->active)
> +                ichwd_tmr_enable(sc);
> +
>        /* convert from power-of-two-ns to WDT ticks */
>        cmd &= WD_INTERVAL;
>        timeout = ((uint64_t)1 << cmd) / ICHWD_TICK;
> @@ -189,8 +199,6 @@
>                ichwd_tmr_reload(sc);
>                *error = 0;
>        } else {
> -               if (sc->active)
> -                       ichwd_tmr_disable(sc);
>                if (cmd > 0)
>                        *error = EINVAL;
>        }
>
>
>
>
>>         ---Mike
>> 
>> At 05:56 PM 2/20/2007, Nick Hibma wrote:
>>> n_hibma     2007-02-20 22:56:29 UTC
>>>
>>>   FreeBSD src repository
>>>
>>>   Modified files:        (Branch: RELENG_6)
>>>     share/man/man4       Makefile watchdog.4
>>>     share/man/man9       watchdog.9
>>>     sys/arm/xscale/i80321 i80321_wdog.c
>>>     sys/dev/ichwd        ichwd.c
>>>     sys/dev/ipmi         ipmi.c
>>>     sys/dev/mk48txx      mk48txx.c
>>>     sys/dev/watchdog     watchdog.c
>>>     sys/i386/i386        elan-mmcr.c
>>>     sys/kern             kern_clock.c
>>>     sys/sys              watchdog.h
>>>     usr.sbin/watchdogd   watchdog.8 watchdogd.c
>>>   Log:
>>>   MFC the following commits:
>>>
>>>     Align the interfaces for the various watchdogs and make the interface
>>>     behave as expected.
>>>
>>>     Also:
>>>     - Return an error if WD_PASSIVE is passed in to the ioctl as only
>>>       WD_ACTIVE is implemented at the moment. See sys/watchdog.h for an
>>>       explanation of the difference between WD_ACTIVE and WD_PASSIVE.
>>>     - Remove the I_HAVE_TOTALLY_LOST_MY_SENSE_OF_HUMOR define. If you've
>>>       lost your sense of humor, than don't add a define.
>>>
>>>     Specific changes:
>>>
>>>     i80321_wdog.c
>>>       Don't roll your own passive watchdog tickle as this would defeat the
>>>       purpose of an active (userland) watchdog tickle.
>>>
>>>     ichwd.c / ipmi.c:
>>>       WD_ACTIVE means active patting of the watchdog by a userland 
>>> process,
>>>       not whether the watchdog is active. See sys/watchdog.h.
>>>
>>>     kern_clock.c:
>>>       (software watchdog) Remove a check for WD_ACTIVE as this does not 
>>> make
>>>       sense here. This reverts r1.181.
>>>
>>>     Revision  Changes    Path
>>>     1.371     +1 -0      src/share/man/man4/Makefile
>>>     1.8       +69 -25    src/share/man/man4/watchdog.4
>>>     1.4       +7 -1      src/share/man/man9/watchdog.9
>>>     1.3       +15 -11    src/sys/arm/xscale/i80321/i80321_wdog.c
>>>     1.7       +12 -30    src/sys/dev/ichwd/ichwd.c
>>>     1.8       +8 -17     src/sys/dev/ipmi/ipmi.c
>>>     1.8       +3 -1      src/sys/dev/mk48txx/mk48txx.c
>>>     1.4       +4 -1      src/sys/dev/watchdog/watchdog.c
>>>     1.33      +9 -9      src/sys/i386/i386/elan-mmcr.c
>>>     1.193     +3 -3      src/sys/kern/kern_clock.c
>>>     1.4       +0 -4      src/sys/sys/watchdog.h
>>>
>>>   and
>>>
>>>     Don't exit from watchdogd on receiving a signal if we cannot stop the 
>>> watchdog.
>>>     That'll require -KILL. This avoids resetting your system on one of the
>>>     watchdogs that you cannot disable.
>>>
>>>     Revision  Changes    Path
>>>     1.15      +18 -11    src/usr.sbin/watchdogd/watchdogd.c
>>>
>>>   Reviewed by:    phk
>>>
>>>   Revision    Changes    Path
>>>   1.320.2.25  +1 -0      src/share/man/man4/Makefile
>>>   1.6.8.2     +69 -25    src/share/man/man4/watchdog.4
>>>   1.3.8.1     +7 -1      src/share/man/man9/watchdog.9
>>>   1.2.2.1     +15 -11    src/sys/arm/xscale/i80321/i80321_wdog.c
>>>   1.5.2.2     +12 -30    src/sys/dev/ichwd/ichwd.c
>>>   1.3.2.5     +6 -17     src/sys/dev/ipmi/ipmi.c
>>>   1.6.2.2     +3 -1      src/sys/dev/mk48txx/mk48txx.c
>>>   1.2.8.1     +9 -2      src/sys/dev/watchdog/watchdog.c
>>>   1.31.2.2    +9 -9      src/sys/i386/i386/elan-mmcr.c
>>>   1.178.2.4   +3 -3      src/sys/kern/kern_clock.c
>>>   1.3.8.1     +0 -4      src/sys/sys/watchdog.h
>>>   1.6.2.1     +5 -4      src/usr.sbin/watchdogd/watchdog.8
>>>   1.10.2.2    +19 -13    src/usr.sbin/watchdogd/watchdogd.c
>>> _______________________________________________
>>> cvs-all@freebsd.org mailing list
>>> http://lists.freebsd.org/mailman/listinfo/cvs-all
>>> To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
>> 
>> _______________________________________________
>> freebsd-stable@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
>> To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org"
>
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070313162641.S17388>