From owner-p4-projects@FreeBSD.ORG Tue Sep 26 20:50:34 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 06F5516A546; Tue, 26 Sep 2006 20:50:34 +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 5C3CF16A412 for ; Tue, 26 Sep 2006 20:50:33 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id E2CB143D5C for ; Tue, 26 Sep 2006 20:50:32 +0000 (GMT) (envelope-from gonzo@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k8QKoWrT081650 for ; Tue, 26 Sep 2006 20:50:32 GMT (envelope-from gonzo@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k8QKoW6O081645 for perforce@freebsd.org; Tue, 26 Sep 2006 20:50:32 GMT (envelope-from gonzo@FreeBSD.org) Date: Tue, 26 Sep 2006 20:50:32 GMT Message-Id: <200609262050.k8QKoW6O081645@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gonzo@FreeBSD.org using -f From: Oleksandr Tymoshenko To: Perforce Change Reviews Cc: Subject: PERFORCE change 106744 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, 26 Sep 2006 20:50:34 -0000 http://perforce.freebsd.org/chv.cgi?CH=106744 Change 106744 by gonzo@gonzo_hq on 2006/09/26 20:50:17 o Make tlb_update and tlb_invalidate_page ASID-aware. o Add some *very* initial ASID initialization. Affected files ... .. //depot/projects/mips2/src/sys/mips/include/tlb.h#5 edit .. //depot/projects/mips2/src/sys/mips/mips/pmap.c#11 edit .. //depot/projects/mips2/src/sys/mips/mips/tlb.c#9 edit .. //depot/projects/mips2/src/sys/mips/mips/trap.c#8 edit Differences ... ==== //depot/projects/mips2/src/sys/mips/include/tlb.h#5 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $P4: //depot/projects/mips2/src/sys/mips/include/tlb.h#4 $ + * $P4: //depot/projects/mips2/src/sys/mips/include/tlb.h#5 $ */ #ifndef _MACHINE_TLB_H_ @@ -39,11 +39,11 @@ void tlb_enter(pmap_t, vm_offset_t, vm_paddr_t, pt_entry_t); void tlb_invalidate_all(void); void tlb_invalidate_one(int); -void tlb_invalidate_page(vm_offset_t); +void tlb_invalidate_page(vm_offset_t, uint32_t); void tlb_modified(pmap_t, void *); void tlb_remove(pmap_t, vm_offset_t); void tlb_remove_pages(pmap_t, vm_offset_t, int); void tlb_remove_range(pmap_t, vm_offset_t, vm_offset_t); -void tlb_update(vm_offset_t, pt_entry_t, pt_entry_t); +void tlb_update(vm_offset_t, uint32_t, pt_entry_t, pt_entry_t); #endif /* _MACHINE_TLB_H_ */ ==== //depot/projects/mips2/src/sys/mips/mips/pmap.c#11 (text+ko) ==== @@ -455,7 +455,7 @@ { if (pmap->pm_active) { - tlb_invalidate_page(va); + tlb_invalidate_page(va, pmap->pm_asid); /* XXX ensure coherency? */ } else { pmap_invalidate_asid(pmap); @@ -758,8 +758,9 @@ pmap->pm_ptphint = NULL; pmap->pm_active = 0; - pmap->pm_asid = 0; - pmap->pm_asidgen = 0; + /* XXXMIPS: put proper asid generation here */ + pmap->pm_asid = 1; + pmap->pm_asidgen = 1; TAILQ_INIT(&pmap->pm_pvlist); bzero(&pmap->pm_stats, sizeof pmap->pm_stats); mtx_lock_spin(&allpmaps_lock); ==== //depot/projects/mips2/src/sys/mips/mips/tlb.c#9 (text+ko) ==== @@ -136,7 +136,7 @@ pte = pmap_pte(pmap, va); if (pte_valid(pte)) - tlb_invalidate_page(va); + tlb_invalidate_page(va, pmap->pm_asid); else mips_dcache_wbinv_range_index(va, PAGE_SIZE); if ((bits & PG_V) == 0) @@ -147,9 +147,9 @@ *pte |= PG_C_UNCACHED; if ((va >> PAGE_SHIFT) & 1) - tlb_update(va, pte[-1], pte[0]); + tlb_update(va, pmap->pm_asid, pte[-1], pte[0]); else - tlb_update(va, pte[0], pte[1]); + tlb_update(va, pmap->pm_asid, pte[0], pte[1]); } void @@ -161,7 +161,7 @@ pte = pmap_pte(pmap, va); pte_clear(pte, PG_V); - tlb_invalidate_page(va); + tlb_invalidate_page(va, pmap->pm_asid); } void @@ -181,13 +181,13 @@ } void -tlb_update(vm_offset_t va, pt_entry_t pte0, pt_entry_t pte1) +tlb_update(vm_offset_t va, uint32_t asid, pt_entry_t pte0, pt_entry_t pte1) { u_long ehi; int i; va &= ~PAGE_MASK; - ehi = MIPS_HI_ENTRY(va, /*asid*/0); + ehi = MIPS_HI_ENTRY(va, asid); mips_wr_entryhi(ehi); mips_tlbp(); i = mips_rd_index(); @@ -227,13 +227,13 @@ } void -tlb_invalidate_page(vm_offset_t va) +tlb_invalidate_page(vm_offset_t va, uint32_t asid) { u_long ehi; int i; va &= ~PAGE_MASK; - ehi = MIPS_HI_ENTRY(va, /*asid*/0); + ehi = MIPS_HI_ENTRY(va, asid); mips_wr_entryhi(ehi); mips_tlbp(); i = mips_rd_index(); @@ -270,8 +270,8 @@ *pte |= PG_D; if ((va >> PAGE_SHIFT) & 1) { - tlb_update(va, pte[-1], pte[0]); + tlb_update(va, pmap->pm_asid, pte[-1], pte[0]); } else { - tlb_update(va, pte[0], pte[1]); + tlb_update(va, pmap->pm_asid, pte[0], pte[1]); } } ==== //depot/projects/mips2/src/sys/mips/mips/trap.c#8 (text+ko) ==== @@ -144,9 +144,11 @@ } if ((va >> PAGE_SHIFT) & 1) - tlb_update(va, pte[-1], pte[0]); + tlb_update(va, kernel_pmap->pm_asid, + pte[-1], pte[0]); else - tlb_update(va, pte[0], pte[1]); + tlb_update(va, kernel_pmap->pm_asid, + pte[0], pte[1]); goto done; } else map = &td->td_proc->p_vmspace->vm_map;