diff options
| author | Dmitrij Tejblum <dt@FreeBSD.org> | 1999-08-25 15:11:19 +0000 |
|---|---|---|
| committer | Dmitrij Tejblum <dt@FreeBSD.org> | 1999-08-25 15:11:19 +0000 |
| commit | 7f8474578cabeed0eca13263dec2516af02bb8d1 (patch) | |
| tree | d9c726c54df68bac4641dce040ad0f1bbaaebe71 | |
| parent | cab08dfcac7549cf4f3673f42fadf27111991dd2 (diff) | |
Notes
| -rw-r--r-- | sys/alpha/alpha/pmap.c | 25 |
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; } |
