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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to