Module Name: src Committed By: maxv Date: Fri Jul 1 11:10:48 UTC 2016
Modified Files: src/sys/arch/x86/include: pmap.h src/sys/arch/x86/x86: pmap.c Log Message: Define pmap_pg_nx globally. Will be used soon. To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 src/sys/arch/x86/include/pmap.h cvs rdiff -u -r1.197 -r1.198 src/sys/arch/x86/x86/pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/include/pmap.h diff -u src/sys/arch/x86/include/pmap.h:1.57 src/sys/arch/x86/include/pmap.h:1.58 --- src/sys/arch/x86/include/pmap.h:1.57 Wed Nov 11 08:20:22 2015 +++ src/sys/arch/x86/include/pmap.h Fri Jul 1 11:10:48 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.57 2015/11/11 08:20:22 skrll Exp $ */ +/* $NetBSD: pmap.h,v 1.58 2016/07/01 11:10:48 maxv Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -208,7 +208,7 @@ struct pmap { */ extern u_long PDPpaddr; -extern int pmap_pg_g; /* do we support PG_G? */ +extern pd_entry_t pmap_pg_g; /* do we support PG_G? */ extern long nkptp[PTP_LEVELS]; /* Index: src/sys/arch/x86/x86/pmap.c diff -u src/sys/arch/x86/x86/pmap.c:1.197 src/sys/arch/x86/x86/pmap.c:1.198 --- src/sys/arch/x86/x86/pmap.c:1.197 Fri Jul 1 10:20:10 2016 +++ src/sys/arch/x86/x86/pmap.c Fri Jul 1 11:10:48 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.197 2016/07/01 10:20:10 maxv Exp $ */ +/* $NetBSD: pmap.c,v 1.198 2016/07/01 11:10:48 maxv Exp $ */ /*- * Copyright (c) 2008, 2010 The NetBSD Foundation, Inc. @@ -171,7 +171,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.197 2016/07/01 10:20:10 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.198 2016/07/01 11:10:48 maxv Exp $"); #include "opt_user_ldt.h" #include "opt_lockdebug.h" @@ -373,17 +373,21 @@ static struct pmap kernel_pmap_store; /* struct pmap *const kernel_pmap_ptr = &kernel_pmap_store; /* + * pmap_pg_nx: if our processor supports PG_NX in the PTE then we + * set pmap_pg_nx to PG_NX (otherwise it is zero). + */ +pd_entry_t pmap_pg_nx __read_mostly = 0; + +/* * pmap_pg_g: if our processor supports PG_G in the PTE then we * set pmap_pg_g to PG_G (otherwise it is zero). */ - -int pmap_pg_g __read_mostly = 0; +pd_entry_t pmap_pg_g __read_mostly = 0; /* * pmap_largepages: if our processor supports PG_PS and we are * using it, this is set to true. */ - int pmap_largepages __read_mostly; /* @@ -1199,7 +1203,7 @@ pmap_bootstrap(vaddr_t kva_start) vaddr_t tmpva; #endif - pt_entry_t pg_nx = (cpu_feature[2] & CPUID_NOX ? PG_NX : 0); + pmap_pg_nx = (cpu_feature[2] & CPUID_NOX ? PG_NX : 0); /* * set up our local static global vars that keep track of the @@ -1215,13 +1219,13 @@ pmap_bootstrap(vaddr_t kva_start) * we can jam into a i386 PTE. */ - protection_codes[VM_PROT_NONE] = pg_nx; /* --- */ + protection_codes[VM_PROT_NONE] = pmap_pg_nx; /* --- */ protection_codes[VM_PROT_EXECUTE] = PG_RO | PG_X; /* --x */ - protection_codes[VM_PROT_READ] = PG_RO | pg_nx; /* -r- */ + protection_codes[VM_PROT_READ] = PG_RO | pmap_pg_nx; /* -r- */ protection_codes[VM_PROT_READ|VM_PROT_EXECUTE] = PG_RO | PG_X;/* -rx */ - protection_codes[VM_PROT_WRITE] = PG_RW | pg_nx; /* w-- */ + protection_codes[VM_PROT_WRITE] = PG_RW | pmap_pg_nx; /* w-- */ protection_codes[VM_PROT_WRITE|VM_PROT_EXECUTE] = PG_RW | PG_X;/* w-x */ - protection_codes[VM_PROT_WRITE|VM_PROT_READ] = PG_RW | pg_nx; + protection_codes[VM_PROT_WRITE|VM_PROT_READ] = PG_RW | pmap_pg_nx; /* wr- */ protection_codes[VM_PROT_ALL] = PG_RW | PG_X; /* wrx */ @@ -1338,7 +1342,7 @@ pmap_bootstrap(vaddr_t kva_start) for (/* */; kva + NBPD_L2 <= kva_end; kva += NBPD_L2, pa += NBPD_L2) { pde = &L2_BASE[pl2_i(kva)]; - *pde = pa | pmap_pg_g | PG_PS | pg_nx | PG_KR | PG_V; + *pde = pa | pmap_pg_g | PG_PS | pmap_pg_nx | PG_KR | PG_V; tlbflushg(); } @@ -1349,7 +1353,7 @@ pmap_bootstrap(vaddr_t kva_start) for (/* */; kva + NBPD_L2 <= kva_end; kva += NBPD_L2, pa += NBPD_L2) { pde = &L2_BASE[pl2_i(kva)]; - *pde = pa | pmap_pg_g | PG_PS | pg_nx | PG_KW | PG_V; + *pde = pa | pmap_pg_g | PG_PS | pmap_pg_nx | PG_KW | PG_V; tlbflushg(); } } @@ -1377,18 +1381,18 @@ pmap_bootstrap(vaddr_t kva_start) ndmpdp = (lastpa + NBPD_L3 - 1) >> L3_SHIFT; dmpdp = avail_start; avail_start += PAGE_SIZE; - *pte = dmpdp | PG_V | PG_RW | pg_nx; + *pte = dmpdp | PG_V | PG_RW | pmap_pg_nx; pmap_update_pg(tmpva); memset((void *)tmpva, 0, PAGE_SIZE); if (cpu_feature[2] & CPUID_P1GB) { for (i = 0; i < ndmpdp; i++) { pdp = (paddr_t)&(((pd_entry_t *)dmpdp)[i]); - *pte = (pdp & PG_FRAME) | PG_V | PG_RW | pg_nx; + *pte = (pdp & PG_FRAME) | PG_V | PG_RW | pmap_pg_nx; pmap_update_pg(tmpva); pde = (pd_entry_t *)(tmpva + (pdp & ~PG_FRAME)); - *pde = ((paddr_t)i << L3_SHIFT) | PG_RW | pg_nx | + *pde = ((paddr_t)i << L3_SHIFT) | PG_RW | pmap_pg_nx | PG_V | PG_U | PG_PS | PG_G; } } else { @@ -1396,32 +1400,32 @@ pmap_bootstrap(vaddr_t kva_start) for (i = 0; i < ndmpdp; i++) { pdp = dmpd + i * PAGE_SIZE; - *pte = (pdp & PG_FRAME) | PG_V | PG_RW | pg_nx; + *pte = (pdp & PG_FRAME) | PG_V | PG_RW | pmap_pg_nx; pmap_update_pg(tmpva); memset((void *)tmpva, 0, PAGE_SIZE); } for (i = 0; i < NPDPG * ndmpdp; i++) { pdp = (paddr_t)&(((pd_entry_t *)dmpd)[i]); - *pte = (pdp & PG_FRAME) | PG_V | PG_RW | pg_nx; + *pte = (pdp & PG_FRAME) | PG_V | PG_RW | pmap_pg_nx; pmap_update_pg(tmpva); pde = (pd_entry_t *)(tmpva + (pdp & ~PG_FRAME)); - *pde = ((paddr_t)i << L2_SHIFT) | PG_RW | pg_nx | + *pde = ((paddr_t)i << L2_SHIFT) | PG_RW | pmap_pg_nx | PG_V | PG_U | PG_PS | PG_G; } for (i = 0; i < ndmpdp; i++) { pdp = (paddr_t)&(((pd_entry_t *)dmpdp)[i]); - *pte = (pdp & PG_FRAME) | PG_V | PG_RW | pg_nx; + *pte = (pdp & PG_FRAME) | PG_V | PG_RW | pmap_pg_nx; pmap_update_pg((vaddr_t)tmpva); pde = (pd_entry_t *)(tmpva + (pdp & ~PG_FRAME)); - *pde = (dmpd + (i << PAGE_SHIFT)) | PG_RW | pg_nx | + *pde = (dmpd + (i << PAGE_SHIFT)) | PG_RW | pmap_pg_nx | PG_V | PG_U; } } - kpm->pm_pdir[PDIR_SLOT_DIRECT] = dmpdp | PG_KW | pg_nx | PG_V | PG_U; + kpm->pm_pdir[PDIR_SLOT_DIRECT] = dmpdp | PG_KW | pmap_pg_nx | PG_V | PG_U; tlbflush();