svn commit: r195604 - user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64
Kip Macy
kmacy at FreeBSD.org
Sat Jul 11 02:58:36 UTC 2009
Author: kmacy
Date: Sat Jul 11 02:58:36 2009
New Revision: 195604
URL: http://svn.freebsd.org/changeset/base/195604
Log:
implement pmap_qenter_prot for "amd64"
Modified:
user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64/pmap.c
Modified: user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64/pmap.c
==============================================================================
--- user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64/pmap.c Sat Jul 11 02:58:09 2009 (r195603)
+++ user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64/pmap.c Sat Jul 11 02:58:36 2009 (r195604)
@@ -1204,16 +1204,24 @@ pmap_map(vm_offset_t *virt, vm_paddr_t s
* Note: SMP coherent. Uses a ranged shootdown IPI.
*/
void
-pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count)
+pmap_qenter_prot(vm_offset_t sva, vm_page_t *ma, int count, vm_prot_t prot)
{
pt_entry_t *endpte, oldpte, *pte;
+ uint64_t flags = PG_V;
+ if (prot & VM_PROT_WRITE)
+ flags |= PG_RW;
+ if ((prot & VM_PROT_EXECUTE) == 0)
+ flags |= PG_NX;
+
oldpte = 0;
pte = vtopte(sva);
endpte = pte + count;
while (pte < endpte) {
oldpte |= *pte;
- pte_store(pte, VM_PAGE_TO_PHYS(*ma) | PG_G | PG_RW | PG_V);
+ pte_store(pte, VM_PAGE_TO_PHYS(*ma) | PG_G | flags);
+ if (prot & VM_PROT_EXCLUDE)
+ dump_exclude_page(VM_PAGE_TO_PHYS(*ma));
pte++;
ma++;
}
@@ -1222,6 +1230,16 @@ pmap_qenter(vm_offset_t sva, vm_page_t *
PAGE_SIZE);
}
+void
+pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count)
+{
+
+ pmap_qenter_prot(sva, ma, count,
+ VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
+
+}
+
+
/*
* This routine tears out page mappings from the
* kernel -- it is meant only for temporary mappings.
@@ -1234,6 +1252,7 @@ pmap_qremove(vm_offset_t sva, int count)
va = sva;
while (count-- > 0) {
+ dump_unexclude_page(pmap_kextract(va));
pmap_kremove(va);
va += PAGE_SIZE;
}
More information about the svn-src-user
mailing list