summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitrij Tejblum <dt@FreeBSD.org>1999-08-25 15:11:19 +0000
committerDmitrij Tejblum <dt@FreeBSD.org>1999-08-25 15:11:19 +0000
commit7f8474578cabeed0eca13263dec2516af02bb8d1 (patch)
treed9c726c54df68bac4641dce040ad0f1bbaaebe71
parentcab08dfcac7549cf4f3673f42fadf27111991dd2 (diff)
Notes
-rw-r--r--sys/alpha/alpha/pmap.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c
index 3fb0b7243cd6..15b7e01f14cc 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.12 1998/10/28 13:36:49 dg Exp $
+ * $Id$
*/
/*
@@ -736,18 +736,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);
}
@@ -793,7 +795,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;
@@ -1061,6 +1063,13 @@ pmap_swapout_proc(p)
vm_object_t upobj;
vm_page_t m;
+ if (p == fpcurproc) {
+ alpha_pal_wrfen(1);
+ savefpstate(&fpcurproc->p_addr->u_pcb.pcb_fp);
+ fpcurproc = NULL;
+ alpha_pal_wrfen(0);
+ }
+
upobj = p->p_upages_obj;
/*
* let the upages be paged
@@ -2193,6 +2202,8 @@ validate:
*pte = newpte;
if (origpte)
pmap_invalidate_page(pmap, va);
+ if (prot & VM_PROT_EXECUTE)
+ alpha_pal_imb();
}
}
@@ -2267,6 +2278,7 @@ retry:
if (*pte) {
if (mpte)
pmap_unwire_pte_hold(pmap, va, mpte);
+ alpha_pal_imb(); /* XXX overkill? */
return 0;
}
@@ -2288,6 +2300,7 @@ retry:
*/
*pte = pmap_phys_to_pte(pa) | PG_V | PG_KRE | PG_URE | PG_MANAGED;
+ alpha_pal_imb(); /* XXX overkill? */
return mpte;
}