From owner-p4-projects@FreeBSD.ORG Mon Jan 21 22:58:34 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 05C0816A41B; Mon, 21 Jan 2008 22:58:34 +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 BFC8E16A419 for ; Mon, 21 Jan 2008 22:58:33 +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 B07ED13C43E for ; Mon, 21 Jan 2008 22:58:33 +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 m0LMwXDf020579 for ; Mon, 21 Jan 2008 22:58:33 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m0LMwXIZ020576 for perforce@freebsd.org; Mon, 21 Jan 2008 22:58:33 GMT (envelope-from kmacy@freebsd.org) Date: Mon, 21 Jan 2008 22:58:33 GMT Message-Id: <200801212258.m0LMwXIZ020576@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 133825 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: Mon, 21 Jan 2008 22:58:34 -0000 http://perforce.freebsd.org/chv.cgi?CH=133825 Change 133825 by kmacy@pandemonium:kmacy:xen31 on 2008/01/21 22:58:13 enable pmap_is_prefaultable change places where there is substantial opportunity for batching back to using the mmu hypercalls Affected files ... .. //depot/projects/xen31/sys/i386/xen/pmap.c#25 edit Differences ... ==== //depot/projects/xen31/sys/i386/xen/pmap.c#25 (text+ko) ==== @@ -1173,7 +1173,7 @@ pt_entry_t *pte; pte = vtopte(va); - pte_clear(pte); + PT_CLEAR_VA(pte, FALSE); } /* @@ -1224,13 +1224,15 @@ endpte = pte + count; while (pte < endpte) { oldpte |= *pte; - pte_store(pte, VM_PAGE_TO_PHYS(*ma) | pgeflag | PG_RW | PG_V); + PT_SET_VA(pte, VM_PAGE_TO_PHYS(*ma) | pgeflag | PG_RW | PG_V, FALSE); pte++; ma++; } if ((oldpte & PG_V) != 0) pmap_invalidate_range(kernel_pmap, sva, sva + count * PAGE_SIZE); + else + PT_UPDATES_FLUSH(); } /* @@ -3056,8 +3058,7 @@ * accessed (referenced) bits * during the copy. */ - *dst_pte = ptetemp & ~(PG_W | PG_M | - PG_A); + PT_SET_VA_MA(dst_pte, ptetemp & ~(PG_W | PG_M | PG_A), FALSE); dst_pmap->pm_stats.resident_count++; } else { free = NULL; @@ -3077,6 +3078,7 @@ } if (*PMAP1) *PMAP1 = 0; + PT_UPDATES_FLUSH(); sched_unpin(); vm_page_unlock_queues(); PMAP_UNLOCK(src_pmap); @@ -3319,8 +3321,8 @@ (uintmax_t)tpte)); - pte_clear(pte); - + PT_CLEAR_VA(pte, FALSE); + /* * Update the vm_page_t clean/reference bits. */ @@ -3342,6 +3344,7 @@ pmap->pm_stats.resident_count--; } } + PT_UPDATES_FLUSH(); if (allfree) { PV_STAT(pv_entry_spare -= _NPCPV); PV_STAT(pc_chunk_count--); @@ -3408,16 +3411,8 @@ pmap_is_prefaultable(pmap_t pmap, vm_offset_t addr) { pt_entry_t *pte; - boolean_t rv; + boolean_t rv = FALSE; - rv = FALSE; - /* XXX - * in order for writable pagetables to help, - * this has to work - check if we aren't doing - * an invlpg on the page tables linear mappings - */ - return (rv); - PMAP_LOCK(pmap); if (*pmap_pde(pmap, addr)) { pte = vtopte(addr);