From owner-svn-src-user@FreeBSD.ORG Tue Jun 2 00:21:47 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 917F3106567E; Tue, 2 Jun 2009 00:21:47 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7792E8FC5E; Tue, 2 Jun 2009 00:21:47 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n520Llu6097078; Tue, 2 Jun 2009 00:21:47 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n520LlYP097075; Tue, 2 Jun 2009 00:21:47 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906020021.n520LlYP097075@svn.freebsd.org> From: Kip Macy Date: Tue, 2 Jun 2009 00:21:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r193290 - in user/kmacy/releng_7_2_xen/sys/i386: include xen X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Jun 2009 00:21:52 -0000 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) {