Changeset View
Changeset View
Standalone View
Standalone View
head/sys/sparc64/sparc64/pmap.c
Show First 20 Lines • Show All 1,494 Lines • ▼ Show 20 Lines | pmap_enter_locked(pmap_t pm, vm_offset_t va, vm_page_t m, vm_prot_t prot, | ||||
struct tte *tp; | struct tte *tp; | ||||
vm_paddr_t pa; | vm_paddr_t pa; | ||||
vm_page_t real; | vm_page_t real; | ||||
u_long data; | u_long data; | ||||
boolean_t wired; | boolean_t wired; | ||||
rw_assert(&tte_list_global_lock, RA_WLOCKED); | rw_assert(&tte_list_global_lock, RA_WLOCKED); | ||||
PMAP_LOCK_ASSERT(pm, MA_OWNED); | PMAP_LOCK_ASSERT(pm, MA_OWNED); | ||||
if ((m->oflags & VPO_UNMANAGED) == 0) | if ((m->oflags & VPO_UNMANAGED) == 0) { | ||||
if ((flags & PMAP_ENTER_QUICK_LOCKED) == 0) | |||||
VM_PAGE_OBJECT_BUSY_ASSERT(m); | VM_PAGE_OBJECT_BUSY_ASSERT(m); | ||||
else | |||||
VM_OBJECT_ASSERT_LOCKED(m->object); | |||||
} | |||||
PMAP_STATS_INC(pmap_nenter); | PMAP_STATS_INC(pmap_nenter); | ||||
pa = VM_PAGE_TO_PHYS(m); | pa = VM_PAGE_TO_PHYS(m); | ||||
wired = (flags & PMAP_ENTER_WIRED) != 0; | wired = (flags & PMAP_ENTER_WIRED) != 0; | ||||
/* | /* | ||||
* If this is a fake page from the device_pager, but it covers actual | * If this is a fake page from the device_pager, but it covers actual | ||||
* physical memory, convert to the real backing page. | * physical memory, convert to the real backing page. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 131 Lines • ▼ Show 20 Lines | pmap_enter_object(pmap_t pm, vm_offset_t start, vm_offset_t end, | ||||
VM_OBJECT_ASSERT_LOCKED(m_start->object); | VM_OBJECT_ASSERT_LOCKED(m_start->object); | ||||
psize = atop(end - start); | psize = atop(end - start); | ||||
m = m_start; | m = m_start; | ||||
rw_wlock(&tte_list_global_lock); | rw_wlock(&tte_list_global_lock); | ||||
PMAP_LOCK(pm); | PMAP_LOCK(pm); | ||||
while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { | while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { | ||||
pmap_enter_locked(pm, start + ptoa(diff), m, prot & | pmap_enter_locked(pm, start + ptoa(diff), m, prot & | ||||
(VM_PROT_READ | VM_PROT_EXECUTE), 0, 0); | (VM_PROT_READ | VM_PROT_EXECUTE), | ||||
PMAP_ENTER_QUICK_LOCKED, 0); | |||||
m = TAILQ_NEXT(m, listq); | m = TAILQ_NEXT(m, listq); | ||||
} | } | ||||
rw_wunlock(&tte_list_global_lock); | rw_wunlock(&tte_list_global_lock); | ||||
PMAP_UNLOCK(pm); | PMAP_UNLOCK(pm); | ||||
} | } | ||||
void | void | ||||
pmap_enter_quick(pmap_t pm, vm_offset_t va, vm_page_t m, vm_prot_t prot) | pmap_enter_quick(pmap_t pm, vm_offset_t va, vm_page_t m, vm_prot_t prot) | ||||
{ | { | ||||
rw_wlock(&tte_list_global_lock); | rw_wlock(&tte_list_global_lock); | ||||
PMAP_LOCK(pm); | PMAP_LOCK(pm); | ||||
pmap_enter_locked(pm, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), | pmap_enter_locked(pm, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), | ||||
0, 0); | PMAP_ENTER_QUICK_LOCKED, 0); | ||||
rw_wunlock(&tte_list_global_lock); | rw_wunlock(&tte_list_global_lock); | ||||
PMAP_UNLOCK(pm); | PMAP_UNLOCK(pm); | ||||
} | } | ||||
void | void | ||||
pmap_object_init_pt(pmap_t pm, vm_offset_t addr, vm_object_t object, | pmap_object_init_pt(pmap_t pm, vm_offset_t addr, vm_object_t object, | ||||
vm_pindex_t pindex, vm_size_t size) | vm_pindex_t pindex, vm_size_t size) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 633 Lines • Show Last 20 Lines |