Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/amd64/pmap.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 3,891 Lines • ▼ Show 20 Lines | |||||
* Note: not SMP coherent. | * Note: not SMP coherent. | ||||
*/ | */ | ||||
PMAP_INLINE void | PMAP_INLINE void | ||||
pmap_kenter(vm_offset_t va, vm_paddr_t pa) | pmap_kenter(vm_offset_t va, vm_paddr_t pa) | ||||
{ | { | ||||
pt_entry_t *pte; | pt_entry_t *pte; | ||||
pte = vtopte(va); | pte = vtopte(va); | ||||
pte_store(pte, pa | X86_PG_RW | X86_PG_V | pg_g | pg_nx); | pte_store(pte, pa | pg_g | pg_nx | X86_PG_A | X86_PG_M | | ||||
X86_PG_RW | X86_PG_V); | |||||
alc: Here too? | |||||
} | } | ||||
static __inline void | static __inline void | ||||
pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int mode) | pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int mode) | ||||
{ | { | ||||
pt_entry_t *pte; | pt_entry_t *pte; | ||||
int cache_bits; | int cache_bits; | ||||
pte = vtopte(va); | pte = vtopte(va); | ||||
cache_bits = pmap_cache_bits(kernel_pmap, mode, 0); | cache_bits = pmap_cache_bits(kernel_pmap, mode, 0); | ||||
pte_store(pte, pa | X86_PG_RW | X86_PG_V | pg_g | pg_nx | cache_bits); | pte_store(pte, pa | pg_g | pg_nx | X86_PG_A | X86_PG_M | | ||||
X86_PG_RW | X86_PG_V | cache_bits); | |||||
Done Inline ActionsHere too? P.S. If you decide to update pmap_kenter{,_attr}(), please pick one ordering for the flags and use it consistently. alc: Here too?
P.S. If you decide to update pmap_kenter{,_attr}(), please pick one ordering for the… | |||||
} | } | ||||
/* | /* | ||||
* Remove a page from the kernel pagetables. | * Remove a page from the kernel pagetables. | ||||
* Note: not SMP coherent. | * Note: not SMP coherent. | ||||
*/ | */ | ||||
PMAP_INLINE void | PMAP_INLINE void | ||||
pmap_kremove(vm_offset_t va) | pmap_kremove(vm_offset_t va) | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) | ||||
pte = vtopte(sva); | pte = vtopte(sva); | ||||
endpte = pte + count; | endpte = pte + count; | ||||
while (pte < endpte) { | while (pte < endpte) { | ||||
m = *ma++; | m = *ma++; | ||||
cache_bits = pmap_cache_bits(kernel_pmap, m->md.pat_mode, 0); | cache_bits = pmap_cache_bits(kernel_pmap, m->md.pat_mode, 0); | ||||
pa = VM_PAGE_TO_PHYS(m) | cache_bits; | pa = VM_PAGE_TO_PHYS(m) | cache_bits; | ||||
if ((*pte & (PG_FRAME | X86_PG_PTE_CACHE)) != pa) { | if ((*pte & (PG_FRAME | X86_PG_PTE_CACHE)) != pa) { | ||||
oldpte |= *pte; | oldpte |= *pte; | ||||
pte_store(pte, pa | pg_g | pg_nx | X86_PG_RW | X86_PG_V); | pte_store(pte, pa | pg_g | pg_nx | X86_PG_A | | ||||
X86_PG_M | X86_PG_RW | X86_PG_V); | |||||
} | } | ||||
pte++; | pte++; | ||||
} | } | ||||
if (__predict_false((oldpte & X86_PG_V) != 0)) | if (__predict_false((oldpte & X86_PG_V) != 0)) | ||||
pmap_invalidate_range(kernel_pmap, sva, sva + count * | pmap_invalidate_range(kernel_pmap, sva, sva + count * | ||||
PAGE_SIZE); | PAGE_SIZE); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 7,970 Lines • Show Last 20 Lines |
Here too?