Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site astrovax.UUCP
Path: utzoo!watmath!clyde!burl!we13!ihnp4!astrovax!wls
From: wls@astrovax.UUCP (William L. Sebok)
Newsgroups: net.bugs.4bsd,net.unix-wizards
Subject: Oops, bug in bugfix for VAX 750 4.2BSD hard vs. soft memory error
Message-ID: <232@astrovax.UUCP>
Date: Tue, 6-Mar-84 12:10:36 EST
Article-I.D.: astrovax.232
Posted: Tue Mar  6 12:10:36 1984
Date-Received: Wed, 7-Mar-84 07:41:57 EST
References: <230@astrovax.UUCP>
Organization: Princeton Univ. Astrophysics
Lines: 64

One bug of my own slipped out.  In the final line M750_SYS(&mcr) should be
replaced by M750_SYS(&amcr).  I am reposting the rest of the fix. This fix was
based on a similar fix to BSD 4.1 in which mcr was used everywhere instead
of &amcr.  I guess I partially missed one of them.
Bill Sebok			Princeton University, Astrophysics
{allegra,akgua,burl,cbosgd,decvax,ihnp4,kpno,princeton,vax135}!astrovax!wls

Index:	/sys/vax/machdep.c 4.2BSD

Description:
	In memerr() in /sys/vax/machdep.c  no test is ever done to check
	whether memory errors on a VAX 750 are correctible or not.  Thus
	strange panics and such may occur with no indication on the console
	that there was a hard error.
	  The fix below fixes the problem for a VAX 750.  I suspect that the
	same problem is also present in the VAX 780 and 730 support code, as
	I have not seen any tests for the uncorrectable memory error condition.

	This bug was also present in BSD 4.1.

Repeat-By:
	Get yourself a bad memory board with hard errors.  The system may do
	all sorts of strange things because of memory errors yet only
	"soft ecc" messages will appear on the console. 

Fix:
	Here are the diffs to /sys/vax/machdep.c.  The line numbers of the new
	machdep.c may vary as there have been other fixes necessary.

*** machdep.c.ORIG	Tue Feb 28 11:27:04 1984
--- machdep.c.		Mon Mar  5 15:30:39 1984
***************
*** 481,488
  			if (M750_ERR(mcr)) {
  				struct mcr amcr;
  				amcr.mc_reg[0] = mcr->mc_reg[0];
! 				printf("mcr%d: soft ecc addr %x syn %x\n",
! 				    m, M750_ADDR(&amcr), M750_SYN(&amcr));
  				M750_INH(mcr);
  			}
  			break;

--- 481,497 -----
  			if (M750_ERR(mcr)) {
  				struct mcr amcr;
  				amcr.mc_reg[0] = mcr->mc_reg[0];
! 				/*
! 				 * modified to distinguish hard and soft errors
! 				 * (W. Sebok astrovax!wls 3/7/83)
! 				 */
! 				if (M750_ERR(mcr)&M750_UNCORR) {
! 					printf("mcr%d: hard error",m);
! 				} else {
! 					printf("mcr%d: soft ecc",m);
! 				}
! 				printf(" addr %x syn %x\n",
! 				    M750_ADDR(&amcr), M750_SYN(&amcr));
  				M750_INH(mcr);
  			}
  			break;
***************
-- 
Bill Sebok			Princeton University, Astrophysics
{allegra,akgua,burl,cbosgd,decvax,ihnp4,kpno,princeton,vax135}!astrovax!wls