svn commit: r193290 - in user/kmacy/releng_7_2_xen/sys/i386: include xen

Kip Macy kmacy at FreeBSD.org
Tue Jun 2 00:21:52 UTC 2009


Author: kmacy
Date: Tue Jun  2 00:21:47 2009
New Revision: 193290
URL: http://svn.freebsd.org/changeset/base/193290

Log:
  fix pmap compile & link post integrate

Modified:
  user/kmacy/releng_7_2_xen/sys/i386/include/pmap.h
  user/kmacy/releng_7_2_xen/sys/i386/xen/mp_machdep.c
  user/kmacy/releng_7_2_xen/sys/i386/xen/pmap.c

Modified: user/kmacy/releng_7_2_xen/sys/i386/include/pmap.h
==============================================================================
--- user/kmacy/releng_7_2_xen/sys/i386/include/pmap.h	Tue Jun  2 00:21:30 2009	(r193289)
+++ user/kmacy/releng_7_2_xen/sys/i386/include/pmap.h	Tue Jun  2 00:21:47 2009	(r193290)
@@ -185,9 +185,7 @@ extern pd_entry_t PTDpde[];
 extern pdpt_entry_t *IdlePDPT;
 #endif
 extern pd_entry_t *IdlePTD;	/* physical address of "Idle" state directory */
-#endif
 
-#ifdef _KERNEL
 /*
  * virtual address to page table entry and
  * to physical address.
@@ -283,7 +281,10 @@ pmap_kextract(vm_offset_t va)
 	return pa;
 }
 
-#ifdef PAE
+#define PT_UPDATES_FLUSH()
+#endif
+
+#if defined(PAE) && !defined(XEN)
 
 #define	pde_cmpset(pdep, old, new) \
 				atomic_cmpset_64((pdep), (old), (new))

Modified: user/kmacy/releng_7_2_xen/sys/i386/xen/mp_machdep.c
==============================================================================
--- user/kmacy/releng_7_2_xen/sys/i386/xen/mp_machdep.c	Tue Jun  2 00:21:30 2009	(r193289)
+++ user/kmacy/releng_7_2_xen/sys/i386/xen/mp_machdep.c	Tue Jun  2 00:21:47 2009	(r193290)
@@ -535,7 +535,7 @@ init_secondary(void)
 		invlpg(addr);
 
 	/* set up FPU state on the AP */
-	npxinit(__INITIAL_NPXCW__);
+	npxinit();
 #if 0
 	
 	/* set up SSE registers */

Modified: user/kmacy/releng_7_2_xen/sys/i386/xen/pmap.c
==============================================================================
--- user/kmacy/releng_7_2_xen/sys/i386/xen/pmap.c	Tue Jun  2 00:21:30 2009	(r193289)
+++ user/kmacy/releng_7_2_xen/sys/i386/xen/pmap.c	Tue Jun  2 00:21:47 2009	(r193290)
@@ -2630,7 +2630,7 @@ retry:
  *	insert this page into the given map NOW.
  */
 void
-pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m,
+pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
     vm_prot_t prot, boolean_t wired)
 {
 	vm_paddr_t pa;
@@ -2796,7 +2796,9 @@ validate:
 	 * to update the pte.
 	 */
 	if ((origpte & ~(PG_M|PG_A)) != newpte) {
-		if (origpte) {
+		if ((access & VM_PROT_WRITE) != 0)
+			newpte |= PG_M;
+		if (origpte & PG_V) {
 			invlva = FALSE;
 			origpte = *pte;
 			PT_SET_VA(pte, newpte | PG_A, FALSE);
@@ -3434,6 +3436,25 @@ pmap_page_exists_quick(pmap_t pmap, vm_p
 }
 
 /*
+ * Returns TRUE if the given page is mapped individually or as part of
+ * a 4mpage.  Otherwise, returns FALSE.
+ */
+boolean_t
+pmap_page_is_mapped(vm_page_t m)
+{
+	struct md_page *pvh;
+
+	if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) != 0)
+		return (FALSE);
+	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+	if (TAILQ_EMPTY(&m->md.pv_list)) {
+		pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m));
+		return (!TAILQ_EMPTY(&pvh->pv_list));
+	} else
+		return (TRUE);
+}
+
+/*
  * Remove all pages from specified address space
  * this aids process exit speeds.  Also, this code
  * is special cased for current process only, but
@@ -4041,6 +4062,30 @@ pmap_addr_hint(vm_object_t obj, vm_offse
 	return addr;
 }
 
+/*
+ *	Increase the starting virtual address of the given mapping if a
+ *	different alignment might result in more superpage mappings.
+ */
+void
+pmap_align_superpage(vm_object_t object, vm_ooffset_t offset,
+    vm_offset_t *addr, vm_size_t size)
+{
+	vm_offset_t superpage_offset;
+
+	if (size < NBPDR)
+		return;
+	if (object != NULL && (object->flags & OBJ_COLORED) != 0)
+		offset += ptoa(object->pg_color);
+	superpage_offset = offset & PDRMASK;
+	if (size - ((NBPDR - superpage_offset) & PDRMASK) < NBPDR ||
+	    (*addr & PDRMASK) == superpage_offset)
+		return;
+	if ((*addr & PDRMASK) < superpage_offset)
+		*addr = (*addr & ~PDRMASK) + superpage_offset;
+	else
+		*addr = ((*addr + PDRMASK) & ~PDRMASK) + superpage_offset;
+}
+
 #if defined(PMAP_DEBUG)
 pmap_pid_dump(int pid)
 {


More information about the svn-src-user mailing list