Changeset View
Changeset View
Standalone View
Standalone View
sys/riscv/riscv/trap.c
Show First 20 Lines • Show All 220 Lines • ▼ Show 20 Lines | #endif | ||||
if (frame->tf_scause == SCAUSE_STORE_PAGE_FAULT) { | if (frame->tf_scause == SCAUSE_STORE_PAGE_FAULT) { | ||||
ftype = VM_PROT_WRITE; | ftype = VM_PROT_WRITE; | ||||
} else if (frame->tf_scause == SCAUSE_INST_PAGE_FAULT) { | } else if (frame->tf_scause == SCAUSE_INST_PAGE_FAULT) { | ||||
ftype = VM_PROT_EXECUTE; | ftype = VM_PROT_EXECUTE; | ||||
} else { | } else { | ||||
ftype = VM_PROT_READ; | ftype = VM_PROT_READ; | ||||
} | } | ||||
if (pmap_fault_fixup(map->pmap, va, ftype)) | if (pmap_fault(map->pmap, va, ftype)) | ||||
goto done; | goto done; | ||||
error = vm_fault_trap(map, va, ftype, VM_FAULT_NORMAL, &sig, &ucode); | error = vm_fault_trap(map, va, ftype, VM_FAULT_NORMAL, &sig, &ucode); | ||||
if (error != KERN_SUCCESS) { | if (error != KERN_SUCCESS) { | ||||
if (usermode) { | if (usermode) { | ||||
call_trapsignal(td, sig, ucode, (void *)stval, | call_trapsignal(td, sig, ucode, (void *)stval, | ||||
frame->tf_scause & SCAUSE_CODE); | frame->tf_scause & SCAUSE_CODE); | ||||
} else { | } else { | ||||
▲ Show 20 Lines • Show All 168 Lines • Show Last 20 Lines |