From a1376ce7393b277ce096872bc2c580d0d05a606b Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Tue, 27 Sep 2016 16:37:34 -0700 Subject: [PATCH 6/7] Re-add minidump support to OneFS We might as well use minidumps with netdump since we don't have the space constrains that motivated prioritized dumps, and it lets us take a step towards using upstream ports kgdb. Some minor modifications are needed to support a dumpdev with mediasize 0. --- sys/amd64/amd64/minidump_machdep.c | 25 +++++++++++++------------ sys/amd64/include/md_var.h | 22 ---------------------- sys/sys/kerneldump.h | 8 ++++---- sys/vm/vm_page.c | 6 ------ sys/x86/x86/dump_machdep.c | 11 +++-------- 5 files changed, 20 insertions(+), 52 deletions(-) diff --git a/sys/amd64/amd64/minidump_machdep.c b/sys/amd64/amd64/minidump_machdep.c index 00300cf..fb59b78 100644 --- a/sys/amd64/amd64/minidump_machdep.c +++ b/sys/amd64/amd64/minidump_machdep.c @@ -24,10 +24,6 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* Begin Isilon */ -#if 0 -/* End Isilon */ - #include __FBSDID("$FreeBSD$"); @@ -322,12 +318,18 @@ minidumpsys(struct dumperinfo *di) dumpsize += PAGE_SIZE; /* Determine dump offset on device. */ - if (di->mediasize < SIZEOF_METADATA + dumpsize + di->blocksize * 2) { + /* Begin Isilon */ + if (di->mediasize > 0 && + di->mediasize < SIZEOF_METADATA + dumpsize + di->blocksize * 2) { error = E2BIG; goto fail; } - dumplo = di->mediaoffset + di->mediasize - dumpsize; - dumplo -= di->blocksize * 2; + if (di->mediasize != 0) { + dumplo = di->mediaoffset + di->mediasize - dumpsize; + dumplo -= di->blocksize * 2; + } else + dumplo = 0; + /* End Isilon */ progress = dumpsize; /* Initialize mdhdr */ @@ -341,7 +343,10 @@ minidumpsys(struct dumperinfo *di) mdhdr.dmapbase = DMAP_MIN_ADDRESS; mdhdr.dmapend = DMAP_MAX_ADDRESS; - mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_AMD64_VERSION, dumpsize, di->blocksize); + /* Begin Isilon */ + mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_AMD64_VERSION, dumpsize, + di->blocksize, false, KERNELDUMPVERSION_ISI_UNCOMPRESSED, 0); + /* End Isilon */ printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, ptoa((uintmax_t)physmem) / 1048576); @@ -487,7 +492,3 @@ dump_drop_page(vm_paddr_t pa) bit = pa & 63; atomic_clear_long(&vm_page_dump[idx], 1ul << bit); } - -/* Begin Isilon */ -#endif -/* End Isilon */ diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h index 5de812a..34bfde4 100644 --- a/sys/amd64/include/md_var.h +++ b/sys/amd64/include/md_var.h @@ -104,26 +104,8 @@ void fs_load_fault(void) __asm(__STRING(fs_load_fault)); void gs_load_fault(void) __asm(__STRING(gs_load_fault)); void fsbase_load_fault(void) __asm(__STRING(fsbase_load_fault)); void gsbase_load_fault(void) __asm(__STRING(gsbase_load_fault)); -/* Begin Isilon */ -#if 0 void dump_add_page(vm_paddr_t); void dump_drop_page(vm_paddr_t); -#else -static inline void -dump_add_page(vm_paddr_t pa) -{ - - (void)pa; -} - -static inline void -dump_drop_page(vm_paddr_t pa) -{ - - (void)pa; -} -#endif -/* End Isilon */ void initializecpu(void); void initializecpucache(void); void fillw(int /*u_short*/ pat, void *base, size_t cnt); @@ -134,11 +116,7 @@ void pagecopy(void *from, void *to); void pagezero(void *addr); void setidt(int idx, alias_for_inthand_t *func, int typ, int dpl, int ist); int user_dbreg_trap(void); -/* Begin Isilon */ -#if 0 void minidumpsys(struct dumperinfo *); -#endif -/* End Isilon */ struct savefpu *get_pcb_user_save_td(struct thread *td); struct savefpu *get_pcb_user_save_pcb(struct pcb *pcb); struct pcb *get_pcb_td(struct thread *td); diff --git a/sys/sys/kerneldump.h b/sys/sys/kerneldump.h index c06b31c..89041a5 100644 --- a/sys/sys/kerneldump.h +++ b/sys/sys/kerneldump.h @@ -74,12 +74,12 @@ struct kerneldumpheader { char architecture[11]; uint8_t isi_prioritized; uint16_t version; -#define KERNELDUMPVERSION_ISI_UNCOMPRESSED 1 -#define KERNELDUMPVERSION_ISI_COMPRESSED 2 +#define KERNELDUMPVERSION_ISI_UNCOMPRESSED 1 +#define KERNELDUMPVERSION_ISI_COMPRESSED 2 #define KERNELDUMPVERSION KERNELDUMPVERSION_ISI_COMPRESSED uint16_t isi_flags; -#define KERNELDUMPFLAGS_ISI_GZIPPED 1 -#define KERNELDUMPFLAGS_VALID (0 | KERNELDUMPFLAGS_ISI_GZIPPED) +#define KERNELDUMPFLAGS_ISI_GZIPPED 1 +#define KERNELDUMPFLAGS_VALID KERNELDUMPFLAGS_ISI_GZIPPED /* End Isilon */ uint32_t architectureversion; #define KERNELDUMP_ALPHA_VERSION 1 diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index 21bd97a..2af5cce 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -535,9 +535,6 @@ vm_page_startup(vm_offset_t vaddr) bzero((void *)mapped, end - new_end); uma_startup((void *)mapped, boot_pages); - /* Begin Isilon */ -#if 0 - /* End Isilon */ #if defined(__amd64__) || defined(__i386__) || defined(__arm__) || \ defined(__mips__) /* @@ -562,9 +559,6 @@ vm_page_startup(vm_offset_t vaddr) new_end + vm_page_dump_size, VM_PROT_READ | VM_PROT_WRITE); bzero((void *)vm_page_dump, vm_page_dump_size); #endif - /* Begin Isilon */ -#endif - /* End Isilon */ #ifdef __amd64__ /* * Request that the physical pages underlying the message buffer be diff --git a/sys/x86/x86/dump_machdep.c b/sys/x86/x86/dump_machdep.c index 7f582a7..0e2dda7 100644 --- a/sys/x86/x86/dump_machdep.c +++ b/sys/x86/x86/dump_machdep.c @@ -76,16 +76,13 @@ CTASSERT(sizeof(struct kerneldumpheader) == 512); /* Begin Isilon */ extern struct trapframe panic_frame; extern unsigned char __etext[]; -#if 0 -/* No reason to generate non-prioritized dumps. */ +int do_minidump = 0; /* End Isilon */ -int do_minidump = 1; TUNABLE_INT("debug.minidump", &do_minidump); SYSCTL_INT(_debug, OID_AUTO, minidump, CTLFLAG_RW, &do_minidump, 0, "Enable mini crash dumps"); -/* Begin Isilon */ -#endif +/* Begin Isilon */ int g_dump_free = 0; TUNABLE_INT("debug.dump_free", &g_dump_free); SYSCTL_INT(_debug, OID_AUTO, dump_free, CTLFLAG_RW, &g_dump_free, 0, @@ -715,12 +712,10 @@ dumpsys(struct dumperinfo *di) minidump_size = di->mediasize; else minidump_size = (g_dump_size * di->mediasize) / 100; -#if 0 if (do_minidump) { minidumpsys(di); - return; + return (0); } -#endif /* End Isilon */ bzero(&ehdr, sizeof(ehdr)); -- 2.10.1