Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Dec 2011 21:19:16 +0200
From:      Andriy Gapon <avg@FreeBSD.org>
To:        Attilio Rao <attilio@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r221173 - in head/sys: amd64/amd64 arm/arm i386/i386 ia64/ia64 kern mips/mips powerpc/powerpc x86/x86
Message-ID:  <4EEF8E34.7010100@FreeBSD.org>
In-Reply-To: <201104281602.p3SG265H030096@svn.freebsd.org>
References:  <201104281602.p3SG265H030096@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



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