Subject: Re: panic: MMU fault
To: None <Ian.Dall@dsto.defence.gov.au>
From: Gordon W. Ross <gwr@mc.com>
List: port-sun3
Date: 04/04/1996 23:30:36
> Date: Fri, 5 Apr 1996 19:09:31 +0930
> From: Ian.Dall@dsto.defence.gov.au

> I have attempted to build an up to date kernel. On March 29, I fetched
> everything which looked like it had changed. (I know there is sup for
> this, but sup is not one of the protocols which is transparent through
> our firewall).
> 
> Anyway, I think I got everything, and I definitely got all of sys/arch/sun3
> and sys/arch/m68k. The system repeatably crashes when I do a heavy ppp
> transfer. Here is the stack trace (modulo transcription errors):
> 
>     _trap(8,145,ec)
>     sun3_mmu_specific(?)
>     _dumpmem(ed2fca8,80,0,e06875b,e089980) + 38
>     _regdump(ed2fcf8,80,2304,e505800,0) + 196
>     _trap(8,105,e0797b6) + 202
>     sun3_mmu_specific(?)
>     _zsoverrun(e512000,e0797b6) + 38
>     _zstty_softint(e505864,1,3,118,e50dfa0) + 4a
...

Oh. (blush)  I don't know why I didn't notice a warning on this.
The function _zsoverrun is defined with three arguments, not two.
Here is a patch for src/sys/dev/ic/z8530tty.c:

*** z8530tty.c.~3~	Thu Mar 21 16:49:14 1996
--- z8530tty.c	Thu Apr  4 23:24:29 1996
***************
*** 1,4 ****
! /*	$NetBSD: z8530tty.c,v 1.5 1996/03/18 23:06:02 gwr Exp $	*/
  
  /*
   * Copyright (c) 1994 Gordon W. Ross
--- 1,4 ----
! </*	$NetBSD: z8530tty.c,v 1.5 1996/03/18 23:06:02 gwr Exp $	*/
  
  /*
   * Copyright (c) 1994 Gordon W. Ross
***************
*** 929,935 ****
  	if (intr_flags & INTR_RX_OVERRUN) {
  		/* May turn this on again below. */
  		intr_flags &= ~INTR_RX_OVERRUN;
! 		zsoverrun(zst, "ring");
  	}
  
  	/*
--- 929,935 ----
  	if (intr_flags & INTR_RX_OVERRUN) {
  		/* May turn this on again below. */
  		intr_flags &= ~INTR_RX_OVERRUN;
! 		zsoverrun(zst, &zst->zst_rotime, "ring");
  	}
  
  	/*
***************
*** 955,961 ****
  
  	/* If set, it is from the loop above. */
  	if (intr_flags & INTR_RX_OVERRUN) {
! 		zsoverrun(zst, "fifo");
  	}
  
  	if (intr_flags & INTR_TX_EMPTY) {
--- 955,961 ----
  
  	/* If set, it is from the loop above. */
  	if (intr_flags & INTR_RX_OVERRUN) {
! 		zsoverrun(zst, &zst->zst_fotime, "fifo");
  	}
  
  	if (intr_flags & INTR_TX_EMPTY) {