Changeset View
Changeset View
Standalone View
Standalone View
lib/libkvm/kvm_minidump_riscv.c
Show First 20 Lines • Show All 116 Lines • ▼ Show 20 Lines | _riscv_minidump_initvtop(kvm_t *kd) | ||||
vmst->hdr.dmapend = le64toh(vmst->hdr.dmapend); | vmst->hdr.dmapend = le64toh(vmst->hdr.dmapend); | ||||
/* Skip header and msgbuf */ | /* Skip header and msgbuf */ | ||||
off = RISCV_PAGE_SIZE + riscv_round_page(vmst->hdr.msgbufsize); | off = RISCV_PAGE_SIZE + riscv_round_page(vmst->hdr.msgbufsize); | ||||
/* build physical address lookup table for sparse pages */ | /* build physical address lookup table for sparse pages */ | ||||
sparse_off = off + riscv_round_page(vmst->hdr.bitmapsize) + | sparse_off = off + riscv_round_page(vmst->hdr.bitmapsize) + | ||||
riscv_round_page(vmst->hdr.pmapsize); | riscv_round_page(vmst->hdr.pmapsize); | ||||
if (_kvm_pt_init(kd, vmst->hdr.bitmapsize, off, sparse_off, | if (_kvm_pt_init(kd, sizeof(vmst->hdr), vmst->hdr.bitmapsize, off, | ||||
RISCV_PAGE_SIZE, sizeof(uint64_t)) == -1) { | sparse_off, RISCV_PAGE_SIZE, sizeof(uint64_t)) == -1) { | ||||
return (-1); | return (-1); | ||||
} | } | ||||
off += riscv_round_page(vmst->hdr.bitmapsize); | off += riscv_round_page(vmst->hdr.bitmapsize); | ||||
if (_kvm_pmap_init(kd, vmst->hdr.pmapsize, off) == -1) { | if (_kvm_pmap_init(kd, vmst->hdr.pmapsize, off) == -1) { | ||||
return (-1); | return (-1); | ||||
} | } | ||||
off += riscv_round_page(vmst->hdr.pmapsize); | off += riscv_round_page(vmst->hdr.pmapsize); | ||||
▲ Show 20 Lines • Show All 118 Lines • ▼ Show 20 Lines | for (pteindex = 0; pteindex < nptes; pteindex++) { | ||||
dva = vm->hdr.dmapbase + pa; | dva = vm->hdr.dmapbase + pa; | ||||
if (!_kvm_visit_cb(kd, cb, arg, pa, va, dva, | if (!_kvm_visit_cb(kd, cb, arg, pa, va, dva, | ||||
_riscv_entry_to_prot(pte), RISCV_PAGE_SIZE, 0)) { | _riscv_entry_to_prot(pte), RISCV_PAGE_SIZE, 0)) { | ||||
goto out; | goto out; | ||||
} | } | ||||
} | } | ||||
while (_kvm_bitmap_next(&bm, &bmindex)) { | while (_kvm_bitmap_next(&bm, &bmindex)) { | ||||
pa = bmindex * RISCV_PAGE_SIZE; | pa = _kvm_bit_id_pa(kd, bmindex, RISCV_PAGE_SIZE); | ||||
dva = vm->hdr.dmapbase + pa; | dva = vm->hdr.dmapbase + pa; | ||||
if (vm->hdr.dmapend < (dva + RISCV_PAGE_SIZE)) | if (vm->hdr.dmapend < (dva + RISCV_PAGE_SIZE)) | ||||
break; | break; | ||||
va = 0; | va = 0; | ||||
prot = VM_PROT_READ | VM_PROT_WRITE; | prot = VM_PROT_READ | VM_PROT_WRITE; | ||||
if (!_kvm_visit_cb(kd, cb, arg, pa, va, dva, | if (!_kvm_visit_cb(kd, cb, arg, pa, va, dva, | ||||
prot, RISCV_PAGE_SIZE, 0)) { | prot, RISCV_PAGE_SIZE, 0)) { | ||||
goto out; | goto out; | ||||
Show All 19 Lines |