From owner-p4-projects@FreeBSD.ORG Thu Jan 24 02:20:12 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9F29116A468; Thu, 24 Jan 2008 02:20:12 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4A2F116A41B for ; Thu, 24 Jan 2008 02:20:12 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 4B05B13C455 for ; Thu, 24 Jan 2008 02:20:12 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m0O2KCFS053695 for ; Thu, 24 Jan 2008 02:20:12 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m0O2KBG0053692 for perforce@freebsd.org; Thu, 24 Jan 2008 02:20:11 GMT (envelope-from kmacy@freebsd.org) Date: Thu, 24 Jan 2008 02:20:11 GMT Message-Id: <200801240220.m0O2KBG0053692@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to kmacy@freebsd.org using -f From: Kip Macy To: Perforce Change Reviews Cc: Subject: PERFORCE change 133967 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Jan 2008 02:20:13 -0000 http://perforce.freebsd.org/chv.cgi?CH=133967 Change 133967 by kmacy@pandemonium:kmacy:xen31 on 2008/01/24 02:19:51 don't build pmap.c with nowerror cleanup pmap_release don't reference pdptzone on xen builds Affected files ... .. //depot/projects/xen31/sys/conf/files.i386#13 edit .. //depot/projects/xen31/sys/i386/xen/pmap.c#31 edit Differences ... ==== //depot/projects/xen31/sys/conf/files.i386#13 (text+ko) ==== @@ -317,7 +317,7 @@ i386/i386/nexus.c standard i386/i386/perfmon.c optional perfmon i386/i386/pmap.c optional native -i386/xen/pmap.c optional xen nowerror +i386/xen/pmap.c optional xen i386/i386/ptrace_machdep.c standard i386/i386/stack_machdep.c optional ddb | stack i386/i386/support.s standard ==== //depot/projects/xen31/sys/i386/xen/pmap.c#31 (text+ko) ==== @@ -213,8 +213,10 @@ #ifdef PAE pt_entry_t pg_nx; +#if !defined(XEN) static uma_zone_t pdptzone; #endif +#endif /* * Data for the pv entry allocation mechanism @@ -292,7 +294,7 @@ static vm_offset_t pmap_kmem_choose(vm_offset_t addr); static boolean_t pmap_is_prefaultable_locked(pmap_t pmap, vm_offset_t addr); -#ifdef PAE +#if defined(PAE) && !defined(XEN) static void *pmap_pdpt_allocf(uma_zone_t zone, int bytes, u_int8_t *flags, int wait); #endif @@ -585,7 +587,7 @@ TAILQ_INIT(&m->md.pv_list); } -#ifdef PAE +#if defined(PAE) && !defined(XEN) static MALLOC_DEFINE(M_PMAPPDPT, "pmap", "pmap pdpt"); @@ -679,7 +681,7 @@ if (pv_chunkbase == NULL) panic("pmap_init: not enough kvm for pv chunks"); pmap_ptelist_init(&pv_vafree, pv_chunkbase, pv_maxchunks); -#ifdef PAE +#if defined(PAE) && !defined(XEN) pdptzone = uma_zcreate("PDPT", NPGPTD * sizeof(pdpt_entry_t), NULL, NULL, NULL, NULL, (NPGPTD * sizeof(pdpt_entry_t)) - 1, UMA_ZONE_VM | UMA_ZONE_NOFREE); @@ -1250,6 +1252,10 @@ } if (mclcount) HYPERVISOR_multicall(mcl, mclcount); +#ifdef INVARIANTS + for (pte = vtopte(sva), mclcount = 0; mclcount < count; mclcount++, pte++) + KASSERT(*pte, ("pte not set for va=0x%x\n", sva + mclcount*PAGE_SIZE)); +#endif } @@ -1710,37 +1716,40 @@ void pmap_release(pmap_t pmap) { - vm_page_t m, ptdpg[NPGPTD+1]; + vm_page_t m, ptdpg[2*NPGPTD+1]; vm_paddr_t ma; int i; +#ifdef XEN #ifdef PAE int npgptd = 2*NPGPTD + 1; #else int npgptd = 2*NPGPTD; #endif - +#else + int npgptd = NPGPTD; +#endif KASSERT(pmap->pm_stats.resident_count == 0, ("pmap_release: pmap resident count %ld != 0", pmap->pm_stats.resident_count)); + PT_UPDATES_FLUSH(); pmap_lazyfix(pmap); mtx_lock_spin(&allpmaps_lock); LIST_REMOVE(pmap, pm_list); mtx_unlock_spin(&allpmaps_lock); +#ifdef XEN for (i = 0; i < NPGPTD; i++) ptdpg[i] = PHYS_TO_VM_PAGE(vtophys(pmap->pm_pdir_shadow + (i*NPDEPG)) & PG_FRAME); + pmap_qremove((vm_offset_t)pmap->pm_pdir_shadow, NPGPTD); +#endif for (i = 0; i < NPGPTD; i++) ptdpg[NPGPTD + i] = PHYS_TO_VM_PAGE(vtophys(pmap->pm_pdir + (i*NPDEPG)) & PG_FRAME); - -#ifdef PAE + pmap_qremove((vm_offset_t)pmap->pm_pdir, NPGPTD); +#if defined(PAE) && defined(XEN) ptdpg[2*NPGPTD] = PHYS_TO_VM_PAGE(vtophys(pmap->pm_pdpt)); #endif - PT_UPDATES_FLUSH(); - pmap_qremove((vm_offset_t)pmap->pm_pdir, NPGPTD); - pmap_qremove((vm_offset_t)pmap->pm_pdir_shadow, NPGPTD); - for (i = 0; i < npgptd; i++) { m = ptdpg[i]; ma = xpmap_ptom(VM_PAGE_TO_PHYS(m)); @@ -2713,6 +2722,7 @@ *PMAP1 = 0; sched_unpin(); vm_page_unlock_queues(); + KASSERT(*vtopte(va), ("pte not set for va=0x%x\n", va)); PMAP_UNLOCK(pmap); }