tbuf par errors, once more
rees at apollo.UUCP
rees at apollo.UUCP
Mon Jun 4 22:23:32 AEST 1984
Maybe this should go in the list of most-often asked questions about Unix?
Thanks to Dennis Ritchie, Sam Leffler, Andy Tannenbaum, and all the
other people who helped straighten this out.
The translation buffer helps translate virtual addresses to real. A
tbuf par err is a parity error in the translation buffer. The original
4.1bsd code didn't handle these errors correctly. There is an ECO
from DEC that reduces the number of these errors, but Unix should still
be able to handle them correctly.
There are some bogus versions of this fix floating around. They have
mc5_mcesr&0xf instead of mc5_mcesr&0xe. Make sure you have the right one.
I have not looked at the 4.2 code to see if this fix made it in. This code
is for 4.1bsd.
Here is the correct code, from sys/machdep.c, to handle tbuf par errs:
***************
*** 579,584
};
#endif
#if defined(VAX750)
char *mc750[] = {
0, "ctrl str par", "memory error", "cp cache par",
"write bus err","corr data", "ucode lost", "bad ird",
--- 634,640 -----
};
#endif
#if defined(VAX750)
+ #define MC750_tbpar 4
char *mc750[] = {
0, "ctrl str par", "memory error", "cp cache par",
"write bus err","corr data", "ucode lost", "bad ird",
--- about line 730 ---
#if VAX750
case VAX_750: {
register struct mc750frame *mcf = (struct mc750frame *)cmcf;
printf("\tva %x errpc %x mdr %x smr %x rdtimo %x tbgpar %x cacherr %x\n",
mcf->mc5_va, mcf->mc5_errpc, mcf->mc5_mdr, mcf->mc5_svmode,
mcf->mc5_rdtimo, mcf->mc5_tbgpar, mcf->mc5_cacherr);
printf("\tbuserr %x mcesr %x pc %x psl %x mcsr %x\n",
mcf->mc5_buserr, mcf->mc5_mcesr, mcf->mc5_pc, mcf->mc5_psl,
mfpr(MCSR));
mtpr(MCESR, 0xf);
if ((mcf->mc5_mcesr&0xe) == MC750_tbpar) {
printf("tbuf par: flushing and returning\n");
mtpr(TBIA, 0);
return;
}
break;
}
#endif
More information about the Comp.unix.wizards
mailing list