Changeset View
Changeset View
Standalone View
Standalone View
sys/mips/mips/minidump_machdep.c
Show First 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | |||||
#include <machine/cache.h> | #include <machine/cache.h> | ||||
CTASSERT(sizeof(struct kerneldumpheader) == 512); | CTASSERT(sizeof(struct kerneldumpheader) == 512); | ||||
uint32_t *vm_page_dump; | uint32_t *vm_page_dump; | ||||
int vm_page_dump_size; | int vm_page_dump_size; | ||||
static struct kerneldumpheader kdh; | static struct kerneldumpheader kdh; | ||||
static off_t dumplo; | |||||
/* Handle chunked writes. */ | /* Handle chunked writes. */ | ||||
static uint64_t counter, progress, dumpsize; | static uint64_t counter, progress, dumpsize; | ||||
/* Just auxiliary bufffer */ | /* Just auxiliary bufffer */ | ||||
static char tmpbuffer[PAGE_SIZE]; | static char tmpbuffer[PAGE_SIZE]; | ||||
extern pd_entry_t *kernel_segmap; | extern pd_entry_t *kernel_segmap; | ||||
▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | while (sz) { | ||||
if (counter >> 22) { | if (counter >> 22) { | ||||
report_progress(progress, dumpsize); | report_progress(progress, dumpsize); | ||||
counter &= (1<<22) - 1; | counter &= (1<<22) - 1; | ||||
} | } | ||||
wdog_kern_pat(WD_LASTVAL); | wdog_kern_pat(WD_LASTVAL); | ||||
if (ptr) { | if (ptr) { | ||||
error = dump_write(di, ptr, 0, dumplo, len); | error = dump_write(di, ptr, 0, len); | ||||
if (error) | if (error) | ||||
return (error); | return (error); | ||||
dumplo += len; | |||||
ptr += len; | ptr += len; | ||||
sz -= len; | sz -= len; | ||||
} else { | } else { | ||||
panic("pa is not supported"); | panic("pa is not supported"); | ||||
} | } | ||||
/* Check for user abort. */ | /* Check for user abort. */ | ||||
c = cncheckc(); | c = cncheckc(); | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | minidumpsys(struct dumperinfo *di) | ||||
mdhdr.kernbase = VM_MIN_KERNEL_ADDRESS; | mdhdr.kernbase = VM_MIN_KERNEL_ADDRESS; | ||||
mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_MIPS_VERSION, dumpsize, | mkdumpheader(&kdh, KERNELDUMPMAGIC, KERNELDUMP_MIPS_VERSION, dumpsize, | ||||
di->blocksize); | di->blocksize); | ||||
printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, | printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, | ||||
ptoa((uintmax_t)physmem) / 1048576); | ptoa((uintmax_t)physmem) / 1048576); | ||||
error = dump_start(di, &kdh, &dumplo); | error = dump_start(di, &kdh); | ||||
if (error != 0) | if (error != 0) | ||||
goto fail; | goto fail; | ||||
/* Dump my header */ | /* Dump my header */ | ||||
bzero(tmpbuffer, sizeof(tmpbuffer)); | bzero(tmpbuffer, sizeof(tmpbuffer)); | ||||
bcopy(&mdhdr, tmpbuffer, sizeof(mdhdr)); | bcopy(&mdhdr, tmpbuffer, sizeof(mdhdr)); | ||||
error = write_buffer(di, tmpbuffer, PAGE_SIZE); | error = write_buffer(di, tmpbuffer, PAGE_SIZE); | ||||
if (error) | if (error) | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | while (bits) { | ||||
error = write_buffer(di, dump_va, PAGE_SIZE); | error = write_buffer(di, dump_va, PAGE_SIZE); | ||||
if (error) | if (error) | ||||
goto fail; | goto fail; | ||||
pmap_kenter_temporary_free(pa); | pmap_kenter_temporary_free(pa); | ||||
bits &= ~(1ul << bit); | bits &= ~(1ul << bit); | ||||
} | } | ||||
} | } | ||||
error = dump_finish(di, &kdh, dumplo); | error = dump_finish(di, &kdh); | ||||
if (error != 0) | if (error != 0) | ||||
goto fail; | goto fail; | ||||
printf("\nDump complete\n"); | printf("\nDump complete\n"); | ||||
return (0); | return (0); | ||||
fail: | fail: | ||||
if (error < 0) | if (error < 0) | ||||
Show All 10 Lines |