summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1999-06-28 09:38:09 +0000
committerpeter <peter@FreeBSD.org>1999-06-28 09:38:09 +0000
commit9a460a1161cdb29d62c4bb61a7cd61acb99f778e (patch)
tree67d023146e2cc8020e1a0657501171882e2a0e88 /sys/alpha
parentb86772ac109ea7fce28171edeac05dde01f498b3 (diff)
downloadFreeBSD-src-9a460a1161cdb29d62c4bb61a7cd61acb99f778e.zip
FreeBSD-src-9a460a1161cdb29d62c4bb61a7cd61acb99f778e.tar.gz
Add some extra alpha_pal_imb()'s in overkill mode. This makes this PC164SX
run quite reliably now. I've explicitly tagged them as /* XXX overkill? */ although one does actually check for VM_PROT_EXECUTE. Based on a suggestion by: Dmitrij Tejblum <tejblum@arc.hq.cti.ru>
Diffstat (limited to 'sys/alpha')
-rw-r--r--sys/alpha/alpha/pmap.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c
index abc565c..75eb9d0 100644
--- a/sys/alpha/alpha/pmap.c
+++ b/sys/alpha/alpha/pmap.c
@@ -43,7 +43,7 @@
* from: @(#)pmap.c 7.7 (Berkeley) 5/12/91
* from: i386 Id: pmap.c,v 1.193 1998/04/19 15:22:48 bde Exp
* with some ideas from NetBSD's alpha pmap
- * $Id: pmap.c,v 1.25 1999/06/08 17:14:07 dt Exp $
+ * $Id: pmap.c,v 1.26 1999/06/10 20:40:55 dt Exp $
*/
/*
@@ -728,18 +728,20 @@ pmap_invalidate_asn(pmap_t pmap)
static void
pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
{
- if (pmap_isactive(pmap))
+ if (pmap_isactive(pmap)) {
ALPHA_TBIS(va);
- else
+ alpha_pal_imb(); /* XXX overkill? */
+ } else
pmap_invalidate_asn(pmap);
}
static void
pmap_invalidate_all(pmap_t pmap)
{
- if (pmap_isactive(pmap))
+ if (pmap_isactive(pmap)) {
ALPHA_TBIA();
- else
+ alpha_pal_imb(); /* XXX overkill? */
+ } else
pmap_invalidate_asn(pmap);
}
@@ -785,7 +787,7 @@ pmap_get_asn(pmap_t pmap)
* with the ASN.
*/
ALPHA_TBIAP();
- alpha_pal_imb();
+ alpha_pal_imb(); /* XXX overkill? */
}
pmap->pm_asn = pmap_nextasn++;
pmap->pm_asngen = pmap_current_asngen;
@@ -2176,6 +2178,8 @@ validate:
*pte = newpte;
if (origpte)
pmap_invalidate_page(pmap, va);
+ if (prot & VM_PROT_EXECUTE)
+ alpha_pal_imb();
}
}
@@ -2250,6 +2254,7 @@ retry:
if (*pte) {
if (mpte)
pmap_unwire_pte_hold(pmap, va, mpte);
+ alpha_pal_imb(); /* XXX overkill? */
return 0;
}
@@ -2271,6 +2276,7 @@ retry:
*/
*pte = pmap_phys_to_pte(pa) | PG_V | PG_KRE | PG_URE | PG_MANAGED;
+ alpha_pal_imb(); /* XXX overkill? */
return mpte;
}
OpenPOWER on IntegriCloud