diff options
author | Mark Johnston <markj@FreeBSD.org> | 2018-07-15 22:18:31 +0000 |
---|---|---|
committer | Mark Johnston <markj@FreeBSD.org> | 2018-07-15 22:18:31 +0000 |
commit | 697be9a3bd28132aa3df17ba9c42eb8c6ab2ec1b (patch) | |
tree | 1aaf5d653a5c6e42e005f09d439c9af799bc8bdb | |
parent | 4600b569bb04e0dfe11e7728c40ddc7b5b3b2716 (diff) | |
download | src-697be9a3bd28132aa3df17ba9c42eb8c6ab2ec1b.tar.gz src-697be9a3bd28132aa3df17ba9c42eb8c6ab2ec1b.zip |
Restore the check for the page size extension after r332489.
Without this, the support for transparent superpage promotion on i386
was left disabled.
Reviewed by: alc, kib
Differential Revision: https://reviews.freebsd.org/D16279
Notes
Notes:
svn path=/head/; revision=336321
-rw-r--r-- | sys/i386/i386/pmap.c | 9 | ||||
-rw-r--r-- | sys/i386/include/pmap.h | 2 |
2 files changed, 5 insertions, 6 deletions
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index a8f843b8bae9..b31edf2d8207 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -201,8 +201,8 @@ struct pmap kernel_pmap_store; vm_offset_t virtual_avail; /* VA of first avail page (after kernel bss) */ vm_offset_t virtual_end; /* VA of last avail page (end of kernel AS) */ -int pgeflag = 0; /* PG_G or-in */ -int pseflag = 0; /* PG_PS or-in */ +static int pgeflag = 0; /* PG_G or-in */ +static int pseflag = 0; /* PG_PS or-in */ static int nkpt = NKPT; vm_offset_t kernel_vm_end = /* 0 + */ NKPT * NBPDR; @@ -518,6 +518,7 @@ pmap_cold(void) ncr4 = 0; if ((cpu_feature & CPUID_PSE) != 0) { ncr4 |= CR4_PSE; + pseflag = PG_PS; /* * Superpage mapping of the kernel text. Existing 4k * page table pages are wasted. @@ -1791,7 +1792,7 @@ pmap_map(vm_offset_t *virt, vm_paddr_t start, vm_paddr_t end, int prot) sva = va; while (start < end) { if ((start & PDRMASK) == 0 && end - start >= NBPDR && - pseflag) { + pseflag != 0) { KASSERT((va & PDRMASK) == 0, ("pmap_map: misaligned va %#x", va)); newpde = start | PG_PS | PG_RW | PG_V; @@ -4175,7 +4176,7 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, VM_OBJECT_ASSERT_WLOCKED(object); KASSERT(object->type == OBJT_DEVICE || object->type == OBJT_SG, ("pmap_object_init_pt: non-device object")); - if (pseflag && + if (pg_ps_enabled && (addr & (NBPDR - 1)) == 0 && (size & (NBPDR - 1)) == 0) { if (!vm_object_populate(object, pindex, pindex + atop(size))) return; diff --git a/sys/i386/include/pmap.h b/sys/i386/include/pmap.h index e0aa44fc8c60..c8f906f15d23 100644 --- a/sys/i386/include/pmap.h +++ b/sys/i386/include/pmap.h @@ -360,8 +360,6 @@ extern caddr_t CADDR3; extern pt_entry_t *CMAP3; extern vm_paddr_t phys_avail[]; extern vm_paddr_t dump_avail[]; -extern int pseflag; -extern int pgeflag; extern char *ptvmmap; /* poor name! */ extern vm_offset_t virtual_avail; extern vm_offset_t virtual_end; |