svn commit: r326793 - stable/11/sys/amd64/amd64
Konstantin Belousov
kib at FreeBSD.org
Tue Dec 12 11:09:47 UTC 2017
Author: kib
Date: Tue Dec 12 11:09:46 2017
New Revision: 326793
URL: https://svnweb.freebsd.org/changeset/base/326793
Log:
MFC r326311:
Fix index calculation for the page table pages for efirt 1:1 map.
Modified:
stable/11/sys/amd64/amd64/efirt.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/amd64/amd64/efirt.c
==============================================================================
--- stable/11/sys/amd64/amd64/efirt.c Tue Dec 12 09:46:53 2017 (r326792)
+++ stable/11/sys/amd64/amd64/efirt.c Tue Dec 12 11:09:46 2017 (r326793)
@@ -104,6 +104,7 @@ static struct mtx efi_lock;
static pml4_entry_t *efi_pml4;
static vm_object_t obj_1t1_pt;
static vm_page_t efi_pml4_page;
+static vm_pindex_t efi_1t1_idx;
static void
efi_destroy_1t1_map(void)
@@ -126,10 +127,10 @@ efi_destroy_1t1_map(void)
}
static vm_page_t
-efi_1t1_page(vm_pindex_t idx)
+efi_1t1_page(void)
{
- return (vm_page_grab(obj_1t1_pt, idx, VM_ALLOC_NOBUSY |
+ return (vm_page_grab(obj_1t1_pt, efi_1t1_idx++, VM_ALLOC_NOBUSY |
VM_ALLOC_WIRED | VM_ALLOC_ZERO));
}
@@ -147,7 +148,7 @@ efi_1t1_pte(vm_offset_t va)
pml4_idx = pmap_pml4e_index(va);
pml4e = &efi_pml4[pml4_idx];
if (*pml4e == 0) {
- m = efi_1t1_page(1 + pml4_idx);
+ m = efi_1t1_page();
mphys = VM_PAGE_TO_PHYS(m);
*pml4e = mphys | X86_PG_RW | X86_PG_V;
} else {
@@ -158,7 +159,7 @@ efi_1t1_pte(vm_offset_t va)
pdp_idx = pmap_pdpe_index(va);
pdpe += pdp_idx;
if (*pdpe == 0) {
- m = efi_1t1_page(1 + NPML4EPG + (pml4_idx + 1) * (pdp_idx + 1));
+ m = efi_1t1_page();
mphys = VM_PAGE_TO_PHYS(m);
*pdpe = mphys | X86_PG_RW | X86_PG_V;
} else {
@@ -169,8 +170,7 @@ efi_1t1_pte(vm_offset_t va)
pd_idx = pmap_pde_index(va);
pde += pd_idx;
if (*pde == 0) {
- m = efi_1t1_page(1 + NPML4EPG + NPML4EPG * NPDPEPG +
- (pml4_idx + 1) * (pdp_idx + 1) * (pd_idx + 1));
+ m = efi_1t1_page();
mphys = VM_PAGE_TO_PHYS(m);
*pde = mphys | X86_PG_RW | X86_PG_V;
} else {
@@ -196,8 +196,9 @@ efi_create_1t1_map(struct efi_md *map, int ndesc, int
obj_1t1_pt = vm_pager_allocate(OBJT_PHYS, NULL, ptoa(1 +
NPML4EPG + NPML4EPG * NPDPEPG + NPML4EPG * NPDPEPG * NPDEPG),
VM_PROT_ALL, 0, NULL);
+ efi_1t1_idx = 0;
VM_OBJECT_WLOCK(obj_1t1_pt);
- efi_pml4_page = efi_1t1_page(0);
+ efi_pml4_page = efi_1t1_page();
VM_OBJECT_WUNLOCK(obj_1t1_pt);
efi_pml4 = (pml4_entry_t *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(efi_pml4_page));
pmap_pinit_pml4(efi_pml4_page);
More information about the svn-src-stable
mailing list