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