Changeset View
Changeset View
Standalone View
Standalone View
sys/riscv/riscv/minidump_machdep.c
Show First 20 Lines • Show All 207 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
int | int | ||||
minidumpsys(struct dumperinfo *di) | minidumpsys(struct dumperinfo *di) | ||||
{ | { | ||||
pd_entry_t *l1, *l2; | pd_entry_t *l1, *l2; | ||||
pt_entry_t *l3; | pt_entry_t *l3; | ||||
struct minidumphdr mdhdr; | struct minidumphdr mdhdr; | ||||
kpaddr_t *dump_avail_out; | |||||
uint32_t pmapsize; | uint32_t pmapsize; | ||||
vm_offset_t va; | vm_offset_t va; | ||||
vm_paddr_t pa; | vm_paddr_t pa; | ||||
int error; | int error; | ||||
int i, bit; | int i, bit; | ||||
int retry_count; | int retry_count; | ||||
retry_count = 0; | retry_count = 0; | ||||
▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | retry: | ||||
progress = dumpsize; | progress = dumpsize; | ||||
/* Initialize mdhdr */ | /* Initialize mdhdr */ | ||||
bzero(&mdhdr, sizeof(mdhdr)); | bzero(&mdhdr, sizeof(mdhdr)); | ||||
strcpy(mdhdr.magic, MINIDUMP_MAGIC); | strcpy(mdhdr.magic, MINIDUMP_MAGIC); | ||||
mdhdr.version = MINIDUMP_VERSION; | mdhdr.version = MINIDUMP_VERSION; | ||||
mdhdr.msgbufsize = msgbufp->msg_size; | mdhdr.msgbufsize = msgbufp->msg_size; | ||||
mdhdr.bitmapsize = BITSET_SIZE(vm_page_dump_pages); | mdhdr.bitmapsize = round_page(BITSET_SIZE(vm_page_dump_pages)); | ||||
mdhdr.pmapsize = pmapsize; | mdhdr.pmapsize = pmapsize; | ||||
mdhdr.kernbase = KERNBASE; | mdhdr.kernbase = KERNBASE; | ||||
mdhdr.dmapphys = DMAP_MIN_PHYSADDR; | mdhdr.dmapphys = DMAP_MIN_PHYSADDR; | ||||
mdhdr.dmapbase = DMAP_MIN_ADDRESS; | mdhdr.dmapbase = DMAP_MIN_ADDRESS; | ||||
mdhdr.dmapend = DMAP_MAX_ADDRESS; | mdhdr.dmapend = DMAP_MAX_ADDRESS; | ||||
dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_RISCV_VERSION, | dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_RISCV_VERSION, | ||||
dumpsize); | dumpsize); | ||||
error = dump_start(di, &kdh); | error = dump_start(di, &kdh); | ||||
if (error != 0) | if (error != 0) | ||||
goto fail; | goto fail; | ||||
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); | ||||
/* Dump minidump header */ | /* Dump minidump header */ | ||||
bzero(&tmpbuffer, sizeof(tmpbuffer)); | bzero(&tmpbuffer, sizeof(tmpbuffer)); | ||||
bcopy(&mdhdr, &tmpbuffer, sizeof(mdhdr)); | bcopy(&mdhdr, &tmpbuffer, sizeof(mdhdr)); | ||||
dump_avail_out = (kpaddr_t *)((char *)tmpbuffer + sizeof(mdhdr)); | |||||
for (i = 0; dump_avail[i + 1] != 0; i += 2) { | |||||
dump_avail_out[i] = dump_avail[i]; | |||||
dump_avail_out[i + 1] = dump_avail[i + 1]; | |||||
} | |||||
dump_avail_out[i] = dump_avail_out[i + 1] = 0; | |||||
error = blk_write(di, (char *)&tmpbuffer, 0, PAGE_SIZE); | error = blk_write(di, (char *)&tmpbuffer, 0, PAGE_SIZE); | ||||
if (error) | if (error) | ||||
goto fail; | goto fail; | ||||
/* Dump msgbuf up front */ | /* Dump msgbuf up front */ | ||||
error = blk_write(di, (char *)msgbufp->msg_ptr, 0, | error = blk_write(di, (char *)msgbufp->msg_ptr, 0, | ||||
round_page(msgbufp->msg_size)); | round_page(msgbufp->msg_size)); | ||||
if (error) | if (error) | ||||
▲ Show 20 Lines • Show All 85 Lines • Show Last 20 Lines |