Changeset View
Changeset View
Standalone View
Standalone View
sys/riscv/riscv/pmap.c
Show First 20 Lines • Show All 1,225 Lines • ▼ Show 20 Lines | pmap_pinit(pmap_t pmap) | ||||
l1phys = VM_PAGE_TO_PHYS(l1pt); | l1phys = VM_PAGE_TO_PHYS(l1pt); | ||||
pmap->pm_l1 = (pd_entry_t *)PHYS_TO_DMAP(l1phys); | pmap->pm_l1 = (pd_entry_t *)PHYS_TO_DMAP(l1phys); | ||||
pmap->pm_satp = SATP_MODE_SV39 | (l1phys >> PAGE_SHIFT); | pmap->pm_satp = SATP_MODE_SV39 | (l1phys >> PAGE_SHIFT); | ||||
bzero(&pmap->pm_stats, sizeof(pmap->pm_stats)); | bzero(&pmap->pm_stats, sizeof(pmap->pm_stats)); | ||||
CPU_ZERO(&pmap->pm_active); | CPU_ZERO(&pmap->pm_active); | ||||
/* Install kernel pagetables */ | |||||
memcpy(pmap->pm_l1, kernel_pmap->pm_l1, PAGE_SIZE); | |||||
/* Add to the list of all user pmaps */ | |||||
mtx_lock(&allpmaps_lock); | mtx_lock(&allpmaps_lock); | ||||
LIST_INSERT_HEAD(&allpmaps, pmap, pm_list); | LIST_INSERT_HEAD(&allpmaps, pmap, pm_list); | ||||
mtx_unlock(&allpmaps_lock); | mtx_unlock(&allpmaps_lock); | ||||
memcpy(pmap->pm_l1, kernel_pmap->pm_l1, PAGE_SIZE); | |||||
vm_radix_init(&pmap->pm_root); | vm_radix_init(&pmap->pm_root); | ||||
return (1); | return (1); | ||||
} | } | ||||
/* | /* | ||||
* This routine is called if the desired page table page does not exist. | * This routine is called if the desired page table page does not exist. | ||||
▲ Show 20 Lines • Show All 3,530 Lines • Show Last 20 Lines |