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