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 ...

John Baldwin jhb at freebsd.org
Wed Mar 14 20:52:26 UTC 2007


On Tuesday 20 February 2007 17:56, 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

Why is the ipmi watchdog function different in current and 6.x after this 
change?

HEAD:

static void
ipmi_wd_event(void *arg, unsigned int cmd, int *error)
{
	struct ipmi_softc *sc = arg;
	unsigned int timeout;

	cmd &= WD_INTERVAL;
	if (cmd > 0 && cmd <= 63) {
		timeout = ((uint64_t)1 << cmd) / 1800000000;
		ipmi_set_watchdog(sc, timeout);
		*error = 0;
	} else {
		ipmi_set_watchdog(sc, 0);
		if (cmd > 0)
			*error = 0;
	}
}

RELENG_6:

static void
ipmi_wd_event(void *arg, unsigned int cmd, int *error)
{
	struct ipmi_softc *sc = arg;
	unsigned int timeout;

	cmd &= WD_INTERVAL;
	if (cmd > 0 && cmd <= 63) {
		timeout = ((uint64_t)1 << cmd) / 1800000000;
		ipmi_set_watchdog(sc, timeout);
		*error = 0;
	} else {
		ipmi_set_watchdog(sc, 0);
	}
}

Also, the watchdog(9) manpage still says:

     If the watchdog cannot be configured to the proposed timeout, it must be
     disabled and the error argument set to EINVAL.  If the watchdog cannot be
     disabled, the error argument must be set to EOPNOTSUPP.

Which would lead me to believe that the HEAD version should be setting *error 
to EINVAL in that last case?

-- 
John Baldwin


More information about the cvs-src mailing list