svn commit: r221173 - in head/sys: amd64/amd64 arm/arm i386/i386
ia64/ia64 kern mips/mips powerpc/powerpc x86/x86
Andriy Gapon
avg at FreeBSD.org
Mon Dec 19 19:19:21 UTC 2011
on 28/04/2011 19:02 Attilio Rao said the following:
> Author: attilio
> Date: Thu Apr 28 16:02:05 2011
> New Revision: 221173
> URL: http://svn.freebsd.org/changeset/base/221173
>
> Log:
> Add the watchdogs patting during the (shutdown time) disk syncing and
> disk dumping.
> With the option SW_WATCHDOG on, these operations are doomed to let
> watchdog fire, fi they take too long.
>
> I implemented the stubs this way because I really want wdog_kern_*
> KPI to not be dependant by SW_WATCHDOG being on (and really, the option
> only enables watchdog activation in hardclock) and also avoid to
> call them when not necessary (avoiding not-volountary watchdog
> activations).
>
> Sponsored by: Sandvine Incorporated
> Discussed with: emaste, des
> MFC after: 2 weeks
Attilio,
I wonder what was the reason to put all this patting under SW_WATCHDOG.
I think that the code that you added can also be useful without SW_WATCHDOG with
hardware watchdog drivers. SW_WATCHDOG is good for debugging, but is not as
reliable as hardware watchdogs.
Thank you.
> Modified:
> head/sys/amd64/amd64/minidump_machdep.c
> head/sys/arm/arm/dump_machdep.c
> head/sys/arm/arm/minidump_machdep.c
> head/sys/i386/i386/minidump_machdep.c
> head/sys/ia64/ia64/dump_machdep.c
> head/sys/kern/kern_shutdown.c
> head/sys/kern/vfs_subr.c
> head/sys/mips/mips/dump_machdep.c
> head/sys/powerpc/powerpc/dump_machdep.c
> head/sys/x86/x86/dump_machdep.c
>
> Modified: head/sys/amd64/amd64/minidump_machdep.c
> ==============================================================================
> --- head/sys/amd64/amd64/minidump_machdep.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/amd64/amd64/minidump_machdep.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -27,6 +27,8 @@
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> +#include "opt_watchdog.h"
> +
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/conf.h>
> @@ -34,6 +36,9 @@ __FBSDID("$FreeBSD$");
> #include <sys/kernel.h>
> #include <sys/kerneldump.h>
> #include <sys/msgbuf.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
> #include <vm/vm.h>
> #include <vm/pmap.h>
> #include <machine/atomic.h>
> @@ -167,6 +172,9 @@ blk_write(struct dumperinfo *di, char *p
> report_progress(progress, dumpsize);
> counter &= (1<<24) - 1;
> }
> +#ifdef SW_WATCHDOG
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> if (ptr) {
> error = dump_write(di, ptr, 0, dumplo, len);
> if (error)
>
> Modified: head/sys/arm/arm/dump_machdep.c
> ==============================================================================
> --- head/sys/arm/arm/dump_machdep.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/arm/arm/dump_machdep.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -27,6 +27,8 @@
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> +#include "opt_watchdog.h"
> +
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/conf.h>
> @@ -35,6 +37,9 @@ __FBSDID("$FreeBSD$");
> #include <sys/kernel.h>
> #include <sys/proc.h>
> #include <sys/kerneldump.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
> #include <vm/vm.h>
> #include <vm/pmap.h>
> #include <machine/elf.h>
> @@ -189,6 +194,9 @@ cb_dumpdata(struct md_pa *mdp, int seqnr
> cpu_tlb_flushID_SE(0);
> cpu_cpwait();
> }
> +#ifdef SW_WATCHDOG
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> error = dump_write(di,
> (void *)(pa - (pa & L1_ADDR_BITS)),0, dumplo, sz);
> if (error)
>
> Modified: head/sys/arm/arm/minidump_machdep.c
> ==============================================================================
> --- head/sys/arm/arm/minidump_machdep.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/arm/arm/minidump_machdep.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -29,6 +29,8 @@
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> +#include "opt_watchdog.h"
> +
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/conf.h>
> @@ -36,6 +38,9 @@ __FBSDID("$FreeBSD$");
> #include <sys/kernel.h>
> #include <sys/kerneldump.h>
> #include <sys/msgbuf.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
> #include <vm/vm.h>
> #include <vm/pmap.h>
> #include <machine/pmap.h>
> @@ -138,6 +143,9 @@ blk_write(struct dumperinfo *di, char *p
> counter &= (1<<22) - 1;
> }
>
> +#ifdef SW_WATCHDOG
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> if (ptr) {
> error = dump_write(di, ptr, 0, dumplo, len);
> if (error)
>
> Modified: head/sys/i386/i386/minidump_machdep.c
> ==============================================================================
> --- head/sys/i386/i386/minidump_machdep.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/i386/i386/minidump_machdep.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -27,6 +27,8 @@
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> +#include "opt_watchdog.h"
> +
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/conf.h>
> @@ -34,6 +36,9 @@ __FBSDID("$FreeBSD$");
> #include <sys/kernel.h>
> #include <sys/kerneldump.h>
> #include <sys/msgbuf.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
> #include <vm/vm.h>
> #include <vm/pmap.h>
> #include <machine/atomic.h>
> @@ -138,6 +143,9 @@ blk_write(struct dumperinfo *di, char *p
> printf(" %lld", PG2MB(progress >> PAGE_SHIFT));
> counter &= (1<<24) - 1;
> }
> +#ifdef SW_WATCHDOG
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> if (ptr) {
> error = dump_write(di, ptr, 0, dumplo, len);
> if (error)
>
> Modified: head/sys/ia64/ia64/dump_machdep.c
> ==============================================================================
> --- head/sys/ia64/ia64/dump_machdep.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/ia64/ia64/dump_machdep.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -27,12 +27,17 @@
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> +#include "opt_watchdog.h"
> +
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/conf.h>
> #include <sys/cons.h>
> #include <sys/kernel.h>
> #include <sys/kerneldump.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
> #include <vm/vm.h>
> #include <vm/pmap.h>
> #include <machine/efi.h>
> @@ -125,6 +130,9 @@ cb_dumpdata(struct efi_md *mdp, int seqn
> printf("%c\b", "|/-\\"[twiddle++ & 3]);
> counter &= (1<<24) - 1;
> }
> +#ifdef SW_WATCHDOG
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> error = dump_write(di, (void*)pa, 0, dumplo, sz);
> if (error)
> break;
>
> Modified: head/sys/kern/kern_shutdown.c
> ==============================================================================
> --- head/sys/kern/kern_shutdown.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/kern/kern_shutdown.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
> #include "opt_panic.h"
> #include "opt_show_busybufs.h"
> #include "opt_sched.h"
> +#include "opt_watchdog.h"
>
> #include <sys/param.h>
> #include <sys/systm.h>
> @@ -65,6 +66,9 @@ __FBSDID("$FreeBSD$");
> #include <sys/smp.h>
> #include <sys/sysctl.h>
> #include <sys/sysproto.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
>
> #include <ddb/ddb.h>
>
> @@ -310,6 +314,9 @@ kern_reboot(int howto)
>
> waittime = 0;
>
> +#ifdef SW_WATCHDOG
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> sync(curthread, NULL);
>
> /*
> @@ -335,6 +342,9 @@ kern_reboot(int howto)
> if (nbusy < pbusy)
> iter = 0;
> pbusy = nbusy;
> +#ifdef SW_WATCHDOG
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> sync(curthread, NULL);
>
> #ifdef PREEMPTION
>
> Modified: head/sys/kern/vfs_subr.c
> ==============================================================================
> --- head/sys/kern/vfs_subr.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/kern/vfs_subr.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -42,6 +42,7 @@
> __FBSDID("$FreeBSD$");
>
> #include "opt_ddb.h"
> +#include "opt_watchdog.h"
>
> #include <sys/param.h>
> #include <sys/systm.h>
> @@ -72,6 +73,9 @@ __FBSDID("$FreeBSD$");
> #include <sys/syslog.h>
> #include <sys/vmmeter.h>
> #include <sys/vnode.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
>
> #include <machine/stdarg.h>
>
> @@ -1839,6 +1843,10 @@ sched_sync(void)
> LIST_INSERT_HEAD(next, bo, bo_synclist);
> continue;
> }
> +#ifdef SW_WATCHDOG
> + if (first_printf == 0)
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> }
> if (!LIST_EMPTY(gslp)) {
> mtx_unlock(&sync_mtx);
>
> Modified: head/sys/mips/mips/dump_machdep.c
> ==============================================================================
> --- head/sys/mips/mips/dump_machdep.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/mips/mips/dump_machdep.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -27,6 +27,8 @@
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> +#include "opt_watchdog.h"
> +
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/conf.h>
> @@ -35,6 +37,9 @@ __FBSDID("$FreeBSD$");
> #include <sys/kernel.h>
> #include <sys/proc.h>
> #include <sys/kerneldump.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
> #include <vm/vm.h>
> #include <vm/pmap.h>
> #include <machine/elf.h>
> @@ -182,6 +187,9 @@ cb_dumpdata(struct md_pa *mdp, int seqnr
> counter &= (1<<24) - 1;
> }
>
> +#ifdef SW_WATCHDOG
> + wdog_kern_path(WD_LASTVAL);
> +#endif
> error = dump_write(di, (void *)(intptr_t)(pa),0, dumplo, sz); /* XXX fix PA */
> if (error)
> break;
>
> Modified: head/sys/powerpc/powerpc/dump_machdep.c
> ==============================================================================
> --- head/sys/powerpc/powerpc/dump_machdep.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/powerpc/powerpc/dump_machdep.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -27,6 +27,8 @@
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> +#include "opt_watchdog.h"
> +
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/conf.h>
> @@ -34,6 +36,9 @@ __FBSDID("$FreeBSD$");
> #include <sys/kernel.h>
> #include <sys/kerneldump.h>
> #include <sys/sysctl.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
> #include <vm/vm.h>
> #include <vm/pmap.h>
> #include <machine/elf.h>
> @@ -129,6 +134,9 @@ cb_dumpdata(struct pmap_md *md, int seqn
> printf("%c\b", "|/-\\"[twiddle++ & 3]);
> counter &= (1<<24) - 1;
> }
> +#ifdef SW_WATCHDOG
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> error = di->dumper(di->priv, (void*)va, 0, dumplo, sz);
> pmap_dumpsys_unmap(md, ofs, va);
> if (error)
>
> Modified: head/sys/x86/x86/dump_machdep.c
> ==============================================================================
> --- head/sys/x86/x86/dump_machdep.c Thu Apr 28 14:55:41 2011 (r221172)
> +++ head/sys/x86/x86/dump_machdep.c Thu Apr 28 16:02:05 2011 (r221173)
> @@ -27,6 +27,8 @@
> #include <sys/cdefs.h>
> __FBSDID("$FreeBSD$");
>
> +#include "opt_watchdog.h"
> +
> #include <sys/param.h>
> #include <sys/systm.h>
> #include <sys/conf.h>
> @@ -34,6 +36,9 @@ __FBSDID("$FreeBSD$");
> #include <sys/sysctl.h>
> #include <sys/kernel.h>
> #include <sys/kerneldump.h>
> +#ifdef SW_WATCHDOG
> +#include <sys/watchdog.h>
> +#endif
> #include <vm/vm.h>
> #include <vm/pmap.h>
> #include <machine/elf.h>
> @@ -193,6 +198,9 @@ cb_dumpdata(struct md_pa *mdp, int seqnr
> a = pa + i * PAGE_SIZE;
> va = pmap_kenter_temporary(trunc_page(a), i);
> }
> +#ifdef SW_WATCHDOG
> + wdog_kern_pat(WD_LASTVAL);
> +#endif
> error = dump_write(di, va, 0, dumplo, sz);
> if (error)
> break;
--
Andriy Gapon
More information about the svn-src-all
mailing list