Changeset View
Changeset View
Standalone View
Standalone View
head/sys/riscv/riscv/pmap.c
Show First 20 Lines • Show All 3,296 Lines • ▼ Show 20 Lines | pmap_activate(struct thread *td) | ||||
uint64_t reg; | uint64_t reg; | ||||
critical_enter(); | critical_enter(); | ||||
pmap = vmspace_pmap(td->td_proc->p_vmspace); | pmap = vmspace_pmap(td->td_proc->p_vmspace); | ||||
td->td_pcb->pcb_l1addr = vtophys(pmap->pm_l1); | td->td_pcb->pcb_l1addr = vtophys(pmap->pm_l1); | ||||
reg = SATP_MODE_SV39; | reg = SATP_MODE_SV39; | ||||
reg |= (td->td_pcb->pcb_l1addr >> PAGE_SHIFT); | reg |= (td->td_pcb->pcb_l1addr >> PAGE_SHIFT); | ||||
__asm __volatile("csrw sptbr, %0" :: "r"(reg)); | load_satp(reg); | ||||
pmap_invalidate_all(pmap); | pmap_invalidate_all(pmap); | ||||
critical_exit(); | critical_exit(); | ||||
} | } | ||||
void | void | ||||
pmap_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz) | pmap_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 110 Lines • Show Last 20 Lines |