On Mon, Oct 13, 2008 at 04:18:04PM +0100, Maciej W. Rozycki wrote: > /* > + * To avoid the BCM1250 M3 erratum check whether EntryHi is consistent > + * with BadVAddr and return for the exception to retrigger if not. > + */ > +static void __cpuinit build_bcm1250_m3_war(u32 **p, struct uasm_reloc **r) > +{ > + uasm_i_dmfc0(p, K0, C0_BADVADDR); > + uasm_i_dmfc0(p, K1, C0_ENTRYHI); > + uasm_i_xor(p, K0, K0, K1); > + uasm_i_dsll(p, K1, K0, 24); > + uasm_i_dsrl32(p, K1, K1, (24 + PAGE_SHIFT + 1) - 32); > + uasm_i_dsrl32(p, K0, K0, 30); > + uasm_i_or(p, K0, K0, K1); > + uasm_il_bnez(p, r, K0, label_leave); The workaround is beginning to be relativly expensive. We're investing 8 instructions extra only to verify that the content of c0_entryhi is correct. I haven't tried yet but me seems by avoiding the use of c0_context entirely relying only on badvaddr we may be able to get away cheaper. Btw, adding linux-mips to the cc list. This really should be public. Ralf