From a849fa015809c24c7b7034b519c35bb60a21cc2e Mon Sep 17 00:00:00 2001 From: pk Date: Tue, 20 Jun 2000 12:04:22 +0000 Subject: [PATCH] region_free: use correct index to invalidate a MMU region cookie in a pmap. Remove work-around in pmap_enter(); the sun4/3-level MMU now works. --- sys/arch/sparc/sparc/pmap.c | 29 ++--------------------------- 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/sys/arch/sparc/sparc/pmap.c b/sys/arch/sparc/sparc/pmap.c index 2ae2f392bf9a..4dc6f58fbc65 100644 --- a/sys/arch/sparc/sparc/pmap.c +++ b/sys/arch/sparc/sparc/pmap.c @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.169 2000/06/19 21:06:32 pk Exp $ */ +/* $NetBSD: pmap.c,v 1.170 2000/06/20 12:04:22 pk Exp $ */ /* * Copyright (c) 1996 @@ -1545,7 +1545,7 @@ region_free(pm, smeg) /* take mmu entry off pmap chain */ TAILQ_REMOVE(&pm->pm_reglist, me, me_pmchain); /* ... and remove from segment map */ - pm->pm_regmap[smeg].rg_smeg = reginval; + pm->pm_regmap[me->me_vreg].rg_smeg = reginval; /* off LRU or lock chain */ if (pm == pmap_kernel()) { @@ -1593,11 +1593,6 @@ mmu_pagein(pm, va, prot) if (pm == pmap_kernel()) printf("mmu_pagein: kernel wants map at va 0x%lx, vr %d, vs %d\n", (u_long)va, vr, vs); -#endif -#if 0 -#if defined(SUN4_MMU3L) -printf("mmu_pagein: pm=%p, va 0x%x, vr %d, vs %d, rp=%p, segmap=%p\n", pm, va, vr, vs, rp, rp->rg_segmap); -#endif #endif /* return 0 if we have no PMEGs to load */ @@ -5369,26 +5364,6 @@ printf("pmap_enter: segment filled during sleep\n"); /* can this happen? */ rp->rg_nsegmap = 0; for (i = NSEGRG; --i >= 0;) sp++->sg_pmeg = seginval; - -#if defined(SUN4_MMU3L) -/* - * XXX - preallocate the region MMU cookies. - * XXX - Doing this keeps the machine running for a while - * XXX - Remove or alter this after dealing with the bugs... - */ - if (HASSUN4_MMU3L) { - vaddr_t tva; - rp->rg_smeg = region_alloc(®ion_lru, pm, vr)->me_cookie; - setregmap(va, rp->rg_smeg); - - tva = VA_ROUNDDOWNTOREG(va); - for (i = 0; i < NSEGRG; i++) { - setsegmap(tva, seginval); - tva += NBPSG; - }; - } -/* XXX - end of work-around */ -#endif } sp = &rp->rg_segmap[vs];