Date: Mon, 28 Jun 1999 04:50:02 +0800 From: Peter Wemm <peter@netplex.com.au> To: Dmitrij Tejblum <tejblum@arc.hq.cti.ru> Cc: Doug Rabson <dfr@nlsystems.com>, alpha@FreeBSD.ORG Subject: Re: Hmm!! Message-ID: <19990627205002.0C7CB81@overcee.netplex.com.au> In-Reply-To: Your message of "Sun, 27 Jun 1999 20:44:08 %2B0400." <199906271644.UAA00502@tejblum.dnttm.rssi.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
Dmitrij Tejblum wrote: > I once noticed that our pmap miss some calls to alpha_pal_imb(). I did > suspect it may cause problems like the ones you see. Unfortunately, I > did almost nothing to fix that, but still have plans :-(. At that time, > I made this change to pmap.c (cut & pasted) > > @@ -2176,6 +2183,8 @@ > *pte = newpte; > if (origpte) > pmap_invalidate_page(pmap, va); > + if (prot & VM_PROT_EXECUTE) > + alpha_pal_imb(); > } > } > > and probably didn't see such gremlins since that, but it may be > coincidence. (I got a feeling that the weird things I seen in a > nightmare, not in reality...) > > (I suspect a little it may be 164sx specific.) > > Dima I went a bit further and it seems to have fixed my mystery problems: Index: pmap.c =================================================================== RCS file: /home/ncvs/src/sys/alpha/alpha/pmap.c,v retrieving revision 1.26 diff -c -r1.26 pmap.c *** pmap.c 1999/06/10 20:40:55 1.26 --- pmap.c 1999/06/27 20:41:52 *************** *** 728,745 **** static void pmap_invalidate_page(pmap_t pmap, vm_offset_t va) { ! if (pmap_isactive(pmap)) ALPHA_TBIS(va); ! else pmap_invalidate_asn(pmap); } static void pmap_invalidate_all(pmap_t pmap) { ! if (pmap_isactive(pmap)) ALPHA_TBIA(); ! else pmap_invalidate_asn(pmap); } --- 728,747 ---- static void pmap_invalidate_page(pmap_t pmap, vm_offset_t va) { ! if (pmap_isactive(pmap)) { ALPHA_TBIS(va); ! alpha_pal_imb(); ! } else pmap_invalidate_asn(pmap); } static void pmap_invalidate_all(pmap_t pmap) { ! if (pmap_isactive(pmap)) { ALPHA_TBIA(); ! alpha_pal_imb(); ! } else pmap_invalidate_asn(pmap); } *************** *** 2176,2181 **** --- 2178,2185 ---- *pte = newpte; if (origpte) pmap_invalidate_page(pmap, va); + if (prot & VM_PROT_EXECUTE) + alpha_pal_imb(); } } I'm pretty sure this is overkill, but it doesn't seem to hurt so far. I have not tried your single patch though, I got out the sledgehammer to see if I could get some sanity. I'm not sure if the alpha_pal_tbi() functions do an implied imb as well or not. If so, then the first chunks are irrelevant. Cheers, -Peter -- Peter Wemm - peter@FreeBSD.org; peter@yahoo-inc.com; peter@netplex.com.au To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-alpha" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19990627205002.0C7CB81>