From owner-p4-projects@FreeBSD.ORG Tue Mar 21 04:23:18 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 04A2616A422; Tue, 21 Mar 2006 04:23:18 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B899616A41F for ; Tue, 21 Mar 2006 04:23:17 +0000 (UTC) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1D3FD43D6D for ; Tue, 21 Mar 2006 04:23:11 +0000 (GMT) (envelope-from kmacy@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id k2L4NAuZ097724 for ; Tue, 21 Mar 2006 04:23:10 GMT (envelope-from kmacy@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k2L4N9Vf097721 for perforce@freebsd.org; Tue, 21 Mar 2006 04:23:09 GMT (envelope-from kmacy@freebsd.org) Date: Tue, 21 Mar 2006 04:23:09 GMT Message-Id: <200603210423.k2L4N9Vf097721@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 93686 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: Tue, 21 Mar 2006 04:23:18 -0000 http://perforce.freebsd.org/chv.cgi?CH=93686 Change 93686 by kmacy@kmacy_storage:sun4vtmp on 2006/03/21 04:23:06 implement pmap_zero_page_area remove pmap_qenter hack remove tsb_set_tte call from pmap_kenter call invltlb in pmap_invalidate_range() to work around bug evidenced with sf_buf_alloc make DPRINTF a runtime conditional Affected files ... .. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#32 edit Differences ... ==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#32 (text+ko) ==== @@ -125,6 +125,7 @@ static uma_zone_t pvzone; static struct vm_object pvzone_obj; static int pv_entry_count = 0, pv_entry_max = 0, pv_entry_high_water = 0; +int pmap_debug = 0; /* * Kernel pmap. @@ -169,7 +170,7 @@ #define UNIMPLEMENTED panic("%s not implemented", __FUNCTION__) #define IMPLEMENTME printf("don't forget %s not implemented\n", __FUNCTION__) #ifdef PMAP_DEBUG -#define DPRINTF printf +#define DPRINTF if (pmap_debug) printf #else #define DPRINTF(...) #endif @@ -587,10 +588,14 @@ if (error != H_EOK) panic("map_perm_addr returned error=%ld", error); continue; - } else if (translations[i].om_start < VM_MIN_PROM_ADDRESS || + } +#if 1 + else if (translations[i].om_start < VM_MIN_PROM_ADDRESS || translations[i].om_start > VM_MAX_PROM_ADDRESS) { continue; - } else { + } +#endif + else { for (off = 0; off < translations[i].om_size; off += PAGE_SIZE) { va = translations[i].om_start + off; @@ -633,9 +638,11 @@ pm->pm_hashscratch = tte_hash_set_scratchpad_kernel(pm->pm_hash); for (i = 0; i < sz; i++) { +#if 1 if (translations[i].om_start < VM_MIN_PROM_ADDRESS || translations[i].om_start > VM_MAX_PROM_ADDRESS) continue; +#endif for (off = 0; off < translations[i].om_size; off += PAGE_SIZE) { va = translations[i].om_start + off; pa = TTE_GET_PA(translations[i].om_tte) + off; @@ -705,7 +712,6 @@ { vm_offset_t addr, end_addr; - return; end_addr = src_addr + len; @@ -1065,6 +1071,9 @@ pmap_invalidate_range(pmap_t pmap, vm_offset_t sva, vm_offset_t eva) { vm_offset_t tva; + /* XXX */ + invltlb(); + if (pmap != kernel_pmap) DPRINTF("pmap_invalidate_range(sva=%lx, eva=%lx)\n", sva, eva); /* XXX SUN4V_FIXME - oversimplified logic */ @@ -1122,8 +1131,6 @@ void pmap_kenter(vm_offset_t va, vm_paddr_t pa) { - tsb_set_tte(&kernel_pmap->pm_tsb, va, pa | TTE_KERNEL | VTD_8K, - kernel_pmap->pm_context); tte_hash_insert(kernel_pmap->pm_hash, va, pa | TTE_KERNEL | VTD_8K); } @@ -1154,7 +1161,6 @@ void pmap_kremove(vm_offset_t va) { - tte_hash_delete(kernel_pmap->pm_hash, va); } @@ -1200,6 +1206,7 @@ pmap_object_init_pt(pmap_t pmap, vm_offset_t addr, vm_object_t object, vm_pindex_t index, vm_size_t size) { + printf("pmap_object_init_pt\n"); return; } @@ -1371,36 +1378,14 @@ pmap_qenter(vm_offset_t sva, vm_page_t *m, int count) { vm_offset_t va; - int tcount; - vm_page_t *tm; - - tm = m; - tcount = count; va = sva; - while (tcount-- > 0) { - pmap_kenter(va, VM_PAGE_TO_PHYS(*tm)); + while (count-- > 0) { + pmap_kenter(va, VM_PAGE_TO_PHYS(*m)); va += PAGE_SIZE; - tm++; + m++; } pmap_invalidate_range(kernel_pmap, sva, va); - - /* disgusting hack to avoid TSB misses on kernel pages - * this will need to be fixed some time soon - */ -#if 0 - tm = m; - tcount = count; - - va = sva; - while (tcount-- > 0) { - tsb_set_tte(&kernel_pmap->pm_tsb, va, - VM_PAGE_TO_PHYS(*tm) | TTE_KERNEL | VTD_8K, - kernel_pmap->pm_context); - va += PAGE_SIZE; - tm++; - } -#endif } /* @@ -1711,7 +1696,14 @@ void pmap_zero_page_area(vm_page_t m, int off, int size) { - UNIMPLEMENTED; + vm_paddr_t pa; + vm_offset_t va; + + pa = VM_PAGE_TO_PHYS(m); + va = TLB_PHYS_TO_DIRECT(pa); + + bzero((char *)(va + off), size); + } void