rees@apollo.UUCP (06/04/84)
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