Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/include/pmap.h
Show First 20 Lines • Show All 271 Lines • ▼ Show 20 Lines | |||||
#define pte_load_clear(ptep) atomic_swap_long(ptep, 0) | #define pte_load_clear(ptep) atomic_swap_long(ptep, 0) | ||||
#define pte_store(ptep, pte) do { \ | #define pte_store(ptep, pte) do { \ | ||||
*(u_long *)(ptep) = (u_long)(pte); \ | *(u_long *)(ptep) = (u_long)(pte); \ | ||||
} while (0) | } while (0) | ||||
#define pte_clear(ptep) pte_store(ptep, 0) | #define pte_clear(ptep) pte_store(ptep, 0) | ||||
#define pde_store(pdep, pde) pte_store(pdep, pde) | #define pde_store(pdep, pde) pte_store(pdep, pde) | ||||
extern pt_entry_t pg_nx; | extern pt_entry_t pg_nx, pg_g; | ||||
markj: It seems this change is not needed. | |||||
#endif /* _KERNEL */ | #endif /* _KERNEL */ | ||||
/* | /* | ||||
* Pmap stuff | * Pmap stuff | ||||
*/ | */ | ||||
struct pv_entry; | struct pv_entry; | ||||
struct pv_chunk; | struct pv_chunk; | ||||
Show All 21 Lines | |||||
/* | /* | ||||
* The kernel virtual address (KVA) of the level 4 page table page is always | * The kernel virtual address (KVA) of the level 4 page table page is always | ||||
* within the direct map (DMAP) region. | * within the direct map (DMAP) region. | ||||
*/ | */ | ||||
struct pmap { | struct pmap { | ||||
struct mtx pm_mtx; | struct mtx pm_mtx; | ||||
pml4_entry_t *pm_pml4; /* KVA of level 4 page table */ | pml4_entry_t *pm_pml4; /* KVA of level 4 page table */ | ||||
pml4_entry_t *pm_pml4u; /* KVA of user l4 page table */ | |||||
uint64_t pm_cr3; | uint64_t pm_cr3; | ||||
uint64_t pm_ucr3; | |||||
TAILQ_HEAD(,pv_chunk) pm_pvchunk; /* list of mappings in pmap */ | TAILQ_HEAD(,pv_chunk) pm_pvchunk; /* list of mappings in pmap */ | ||||
cpuset_t pm_active; /* active on cpus */ | cpuset_t pm_active; /* active on cpus */ | ||||
enum pmap_type pm_type; /* regular or nested tables */ | enum pmap_type pm_type; /* regular or nested tables */ | ||||
struct pmap_statistics pm_stats; /* pmap statistics */ | struct pmap_statistics pm_stats; /* pmap statistics */ | ||||
struct vm_radix pm_root; /* spare page table pages */ | struct vm_radix pm_root; /* spare page table pages */ | ||||
long pm_eptgen; /* EPT pmap generation id */ | long pm_eptgen; /* EPT pmap generation id */ | ||||
int pm_flags; | int pm_flags; | ||||
struct pmap_pcids pm_pcids[MAXCPU]; | struct pmap_pcids pm_pcids[MAXCPU]; | ||||
▲ Show 20 Lines • Show All 97 Lines • ▼ Show 20 Lines | |||||
void pmap_invalidate_all(pmap_t); | void pmap_invalidate_all(pmap_t); | ||||
void pmap_invalidate_cache(void); | void pmap_invalidate_cache(void); | ||||
void pmap_invalidate_cache_pages(vm_page_t *pages, int count); | void pmap_invalidate_cache_pages(vm_page_t *pages, int count); | ||||
void pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva, | void pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva, | ||||
boolean_t force); | boolean_t force); | ||||
void pmap_get_mapping(pmap_t pmap, vm_offset_t va, uint64_t *ptr, int *num); | void pmap_get_mapping(pmap_t pmap, vm_offset_t va, uint64_t *ptr, int *num); | ||||
boolean_t pmap_map_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t); | boolean_t pmap_map_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t); | ||||
void pmap_unmap_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t); | void pmap_unmap_io_transient(vm_page_t *, vm_offset_t *, int, boolean_t); | ||||
void pmap_pti_add_kva(vm_offset_t sva, vm_offset_t eva, bool exec); | |||||
void pmap_pti_remove_kva(vm_offset_t sva, vm_offset_t eva); | |||||
#endif /* _KERNEL */ | #endif /* _KERNEL */ | ||||
/* Return various clipped indexes for a given VA */ | /* Return various clipped indexes for a given VA */ | ||||
static __inline vm_pindex_t | static __inline vm_pindex_t | ||||
pmap_pte_index(vm_offset_t va) | pmap_pte_index(vm_offset_t va) | ||||
{ | { | ||||
return ((va >> PAGE_SHIFT) & ((1ul << NPTEPGSHIFT) - 1)); | return ((va >> PAGE_SHIFT) & ((1ul << NPTEPGSHIFT) - 1)); | ||||
Show All 26 Lines |
It seems this change is not needed.