svn commit: r199779 - in user/kmacy/releng_8_fcs_buf_xen/sys/i386:
i386 include xen
Kip Macy
kmacy at FreeBSD.org
Wed Nov 25 02:39:12 UTC 2009
Author: kmacy
Date: Wed Nov 25 02:39:11 2009
New Revision: 199779
URL: http://svn.freebsd.org/changeset/base/199779
Log:
fix compile for i386 and i386-xen builds
Modified:
user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c
user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c
user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h
user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c
Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c
==============================================================================
--- user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c Wed Nov 25 02:38:20 2009 (r199778)
+++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/minidump_machdep.c Wed Nov 25 02:39:11 2009 (r199779)
@@ -54,6 +54,7 @@ CTASSERT(sizeof(struct kerneldumpheader)
#define DEV_ALIGN(x) (((off_t)(x) + (DEV_BSIZE-1)) & ~(DEV_BSIZE-1))
uint32_t *vm_page_dump;
+uint32_t *vm_page_dump_exclude;
int vm_page_dump_size;
static struct kerneldumpheader kdh;
Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c
==============================================================================
--- user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c Wed Nov 25 02:38:20 2009 (r199778)
+++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/i386/pmap.c Wed Nov 25 02:39:11 2009 (r199779)
@@ -1245,17 +1245,25 @@ 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) | pgeflag |
- pmap_cache_bits((*ma)->md.pat_mode, 0) | PG_RW | PG_V);
+ pmap_cache_bits((*ma)->md.pat_mode, 0) | flags | PG_V);
+ if (prot & VM_PROT_EXCLUDE)
+ dump_exclude_page(VM_PAGE_TO_PHYS(*ma));
pte++;
ma++;
}
@@ -1264,6 +1272,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.
Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h
==============================================================================
--- user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h Wed Nov 25 02:38:20 2009 (r199778)
+++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/include/md_var.h Wed Nov 25 02:39:11 2009 (r199779)
@@ -72,6 +72,7 @@ extern int szfreebsd4_sigcode;
extern int szosigcode;
#endif
extern uint32_t *vm_page_dump;
+extern uint32_t *vm_page_dump_exclude;
extern int vm_page_dump_size;
typedef void alias_for_inthand_t(u_int cs, u_int ef, u_int esp, u_int ss);
Modified: user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c
==============================================================================
--- user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Wed Nov 25 02:38:20 2009 (r199778)
+++ user/kmacy/releng_8_fcs_buf_xen/sys/i386/xen/pmap.c Wed Nov 25 02:39:11 2009 (r199779)
@@ -1323,7 +1323,7 @@ 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, *pte;
vm_paddr_t pa;
@@ -1332,12 +1332,22 @@ pmap_qenter(vm_offset_t sva, vm_page_t *
multicall_entry_t mcl[16];
multicall_entry_t *mclp = mcl;
int error;
+#ifdef PAE
+ uint64_t flags = PG_V;
+ if ((prot & VM_PROT_EXECUTE) == 0)
+ flags |= PG_NX;
+#else
+ uint32_t flags = 0;
+#endif
+
+ if (prot & VM_PROT_WRITE)
+ flags |= PG_RW;
CTR2(KTR_PMAP, "pmap_qenter:sva=0x%x count=%d", va, count);
pte = vtopte(sva);
endpte = pte + count;
while (pte < endpte) {
- pa = xpmap_ptom(VM_PAGE_TO_PHYS(*ma)) | pgeflag | PG_RW | PG_V | PG_M | PG_A;
+ pa = xpmap_ptom(VM_PAGE_TO_PHYS(*ma)) | pgeflag | flags | PG_V | PG_M | PG_A;
mclp->op = __HYPERVISOR_update_va_mapping;
mclp->args[0] = va;
@@ -1368,6 +1378,14 @@ pmap_qenter(vm_offset_t sva, vm_page_t *
#endif
}
+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
More information about the svn-src-user
mailing list