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 2,104 Lines • ▼ Show 20 Lines | pmap_init_pat(void) | ||||
/* Restore caches and PGE. */ | /* Restore caches and PGE. */ | ||||
load_cr0(cr0); | load_cr0(cr0); | ||||
load_cr4(cr4); | load_cr4(cr4); | ||||
} | } | ||||
vm_page_t | vm_page_t | ||||
pmap_page_alloc_below_4g(bool zeroed) | pmap_page_alloc_below_4g(bool zeroed) | ||||
{ | { | ||||
vm_page_t m; | return (vm_page_alloc_noobj_contig((zeroed ? VM_ALLOC_ZERO : 0) | | ||||
VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY, 1, 0, (1ULL << 32), PAGE_SIZE, 0, | |||||
m = vm_page_alloc_contig(NULL, 0, (zeroed ? VM_ALLOC_ZERO : 0) | | VM_MEMATTR_DEFAULT)); | ||||
VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY | VM_ALLOC_NOOBJ, | |||||
1, 0, (1ULL << 32), PAGE_SIZE, 0, VM_MEMATTR_DEFAULT); | |||||
if (m != NULL && zeroed && (m->flags & PG_ZERO) == 0) | |||||
pmap_zero_page(m); | |||||
return (m); | |||||
} | } | ||||
extern const char la57_trampoline[], la57_trampoline_gdt_desc[], | extern const char la57_trampoline[], la57_trampoline_gdt_desc[], | ||||
la57_trampoline_gdt[], la57_trampoline_end[]; | la57_trampoline_gdt[], la57_trampoline_end[]; | ||||
static void | static void | ||||
pmap_bootstrap_la57(void *arg __unused) | pmap_bootstrap_la57(void *arg __unused) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 9,263 Lines • ▼ Show 20 Lines | pmap_kasan_enter_alloc_4k(void) | ||||
if (m == NULL) | if (m == NULL) | ||||
panic("%s: no memory to grow shadow map", __func__); | panic("%s: no memory to grow shadow map", __func__); | ||||
return (m); | return (m); | ||||
} | } | ||||
static vm_page_t | static vm_page_t | ||||
pmap_kasan_enter_alloc_2m(void) | pmap_kasan_enter_alloc_2m(void) | ||||
{ | { | ||||
vm_page_t m; | return (vm_page_alloc_noobj_contig(VM_ALLOC_NORMAL | VM_ALLOC_WIRED | | ||||
VM_ALLOC_ZERO, NPTEPG, 0, ~0ul, NBPDR, 0, VM_MEMATTR_DEFAULT)); | |||||
m = vm_page_alloc_contig(NULL, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | | |||||
VM_ALLOC_WIRED, NPTEPG, 0, ~0ul, NBPDR, 0, VM_MEMATTR_DEFAULT); | |||||
if (m != NULL) | |||||
memset((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), 0, NBPDR); | |||||
return (m); | |||||
} | } | ||||
/* | /* | ||||
* Grow the shadow map by at least one 4KB page at the specified address. Use | * Grow the shadow map by at least one 4KB page at the specified address. Use | ||||
* 2MB pages when possible. | * 2MB pages when possible. | ||||
*/ | */ | ||||
void | void | ||||
pmap_kasan_enter(vm_offset_t va) | pmap_kasan_enter(vm_offset_t va) | ||||
▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | pmap_kmsan_enter_alloc_4k(void) | ||||
if (m == NULL) | if (m == NULL) | ||||
panic("%s: no memory to grow shadow map", __func__); | panic("%s: no memory to grow shadow map", __func__); | ||||
return (m); | return (m); | ||||
} | } | ||||
static vm_page_t | static vm_page_t | ||||
pmap_kmsan_enter_alloc_2m(void) | pmap_kmsan_enter_alloc_2m(void) | ||||
{ | { | ||||
vm_page_t m; | return (vm_page_alloc_noobj_contig(VM_ALLOC_NORMAL | VM_ALLOC_ZERO | | ||||
VM_ALLOC_WIRED, NPTEPG, 0, ~0ul, NBPDR, 0, VM_MEMATTR_DEFAULT)); | |||||
m = vm_page_alloc_contig(NULL, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | | |||||
VM_ALLOC_WIRED, NPTEPG, 0, ~0ul, NBPDR, 0, VM_MEMATTR_DEFAULT); | |||||
if (m != NULL) | |||||
memset((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)), 0, NBPDR); | |||||
return (m); | |||||
} | } | ||||
/* | /* | ||||
* Grow the shadow or origin maps by at least one 4KB page at the specified | * Grow the shadow or origin maps by at least one 4KB page at the specified | ||||
* address. Use 2MB pages when possible. | * address. Use 2MB pages when possible. | ||||
*/ | */ | ||||
void | void | ||||
pmap_kmsan_enter(vm_offset_t va) | pmap_kmsan_enter(vm_offset_t va) | ||||
▲ Show 20 Lines • Show All 491 Lines • Show Last 20 Lines |