Changeset View
Changeset View
Standalone View
Standalone View
head/sys/powerpc/powerpc/minidump_machdep.c
Show First 20 Lines • Show All 264 Lines • ▼ Show 20 Lines | retry: | ||||
if (pmapsize % PAGE_SIZE != 0) { | if (pmapsize % PAGE_SIZE != 0) { | ||||
printf("pmapsize not page aligned: 0x%x\n", pmapsize); | printf("pmapsize not page aligned: 0x%x\n", pmapsize); | ||||
return (EINVAL); | return (EINVAL); | ||||
} | } | ||||
/* Calculate dump size */ | /* Calculate dump size */ | ||||
dumpsize = PAGE_SIZE; /* header */ | dumpsize = PAGE_SIZE; /* header */ | ||||
dumpsize += round_page(msgbufp->msg_size); | dumpsize += round_page(msgbufp->msg_size); | ||||
dumpsize += round_page(sizeof(dump_avail)); | |||||
dumpsize += round_page(BITSET_SIZE(vm_page_dump_pages)); | dumpsize += round_page(BITSET_SIZE(vm_page_dump_pages)); | ||||
dumpsize += pmapsize; | dumpsize += pmapsize; | ||||
VM_PAGE_DUMP_FOREACH(pa) { | VM_PAGE_DUMP_FOREACH(pa) { | ||||
/* Clear out undumpable pages now if needed */ | /* Clear out undumpable pages now if needed */ | ||||
if (is_dumpable(pa)) | if (is_dumpable(pa)) | ||||
dumpsize += PAGE_SIZE; | dumpsize += PAGE_SIZE; | ||||
else | else | ||||
dump_drop_page(pa); | dump_drop_page(pa); | ||||
Show All 10 Lines | retry: | ||||
mdhdr.pmapsize = pmapsize; | mdhdr.pmapsize = pmapsize; | ||||
mdhdr.kernbase = VM_MIN_KERNEL_ADDRESS; | mdhdr.kernbase = VM_MIN_KERNEL_ADDRESS; | ||||
mdhdr.kernend = VM_MAX_SAFE_KERNEL_ADDRESS; | mdhdr.kernend = VM_MAX_SAFE_KERNEL_ADDRESS; | ||||
mdhdr.dmapbase = DMAP_BASE_ADDRESS; | mdhdr.dmapbase = DMAP_BASE_ADDRESS; | ||||
mdhdr.dmapend = DMAP_MAX_ADDRESS; | mdhdr.dmapend = DMAP_MAX_ADDRESS; | ||||
mdhdr.hw_direct_map = hw_direct_map; | mdhdr.hw_direct_map = hw_direct_map; | ||||
mdhdr.startkernel = __startkernel; | mdhdr.startkernel = __startkernel; | ||||
mdhdr.endkernel = __endkernel; | mdhdr.endkernel = __endkernel; | ||||
mdhdr.dumpavailsize = round_page(sizeof(dump_avail)); | |||||
dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_POWERPC_VERSION, | dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_POWERPC_VERSION, | ||||
dumpsize); | dumpsize); | ||||
error = dump_start(di, &kdh); | error = dump_start(di, &kdh); | ||||
if (error) | if (error) | ||||
goto fail; | goto fail; | ||||
printf("Dumping %lu out of %ju MB:", dumpsize >> 20, | printf("Dumping %lu out of %ju MB:", dumpsize >> 20, | ||||
ptoa((uintmax_t)physmem) / 1048576); | ptoa((uintmax_t)physmem) / 1048576); | ||||
/* Dump minidump header */ | /* Dump minidump header */ | ||||
bzero(pgbuf, sizeof(pgbuf)); | bzero(pgbuf, sizeof(pgbuf)); | ||||
memcpy(pgbuf, &mdhdr, sizeof(mdhdr)); | memcpy(pgbuf, &mdhdr, sizeof(mdhdr)); | ||||
error = blk_write(di, pgbuf, 0, PAGE_SIZE); | error = blk_write(di, pgbuf, 0, PAGE_SIZE); | ||||
if (error) | if (error) | ||||
goto fail; | goto fail; | ||||
dump_total("header", PAGE_SIZE); | dump_total("header", PAGE_SIZE); | ||||
/* 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)); | ||||
dump_total("msgbuf", round_page(msgbufp->msg_size)); | dump_total("msgbuf", round_page(msgbufp->msg_size)); | ||||
/* Dump dump_avail */ | |||||
_Static_assert(sizeof(dump_avail) <= sizeof(pgbuf), | |||||
"Large dump_avail not handled"); | |||||
bzero(pgbuf, sizeof(mdhdr)); | |||||
memcpy(pgbuf, dump_avail, sizeof(dump_avail)); | |||||
error = blk_write(di, pgbuf, 0, PAGE_SIZE); | |||||
if (error) | |||||
goto fail; | |||||
dump_total("dump_avail", round_page(sizeof(dump_avail))); | |||||
/* Dump bitmap */ | /* Dump bitmap */ | ||||
error = blk_write(di, (char *)vm_page_dump, 0, | error = blk_write(di, (char *)vm_page_dump, 0, | ||||
round_page(BITSET_SIZE(vm_page_dump_pages))); | round_page(BITSET_SIZE(vm_page_dump_pages))); | ||||
if (error) | if (error) | ||||
goto fail; | goto fail; | ||||
dump_total("bitmap", round_page(BITSET_SIZE(vm_page_dump_pages))); | dump_total("bitmap", round_page(BITSET_SIZE(vm_page_dump_pages))); | ||||
▲ Show 20 Lines • Show All 55 Lines • Show Last 20 Lines |