Subject: Re: Interrupt fixes committed
To: Jonathan Stone <jonathan@DSG.Stanford.EDU>
From: Ted Lemon <mellon@vix.com>
List: port-pmax
Date: 05/04/1995 23:55:24
> That aside, if someone with a 3min or xine could build a new kernel
> and let me know if it boots, I'd appreciate it.  (The symptoms of
> failure are that the kernel hangs very, very early on in the boot
> process; it's hard to miss.)

Blah.  I started on this this afternoon.   Here it is, midnight, and
my kernel is working again.   I'd blame it on you, except that that
would be sort of like blaming the collapse of the original Tacoma
Narrows bridge on the last person to drive onto it.

I made a few changes which make things work again, but I wouldn't
describe my changes as a definitive solution.   I believe this code to
be royally broken.   However, I would be interested to know what
effect changes similar to the ones I've shown below would have on a
DS5000/240.   What's shown below isn't a complete list of the changes
I just checked in, but it does represent what's relevant.

If you could try this out on your 5000/240, I'd appreciate it.

Thanks!

			       _MelloN_

toccata% cvs diff -c machdep.c
Index: machdep.c
===================================================================
RCS file: /a/cvsroot/src/sys/arch/pmax/pmax/machdep.c,v
retrieving revision 1.28
diff -c -r1.28 machdep.c
***************
*** 1854,1859 ****
--- 1670,1676 ----
                xine_tc3_imask |= mask;
        else
                xine_tc3_imask &= ~mask;
+       *(u_int *)ASIC_REG_IMSK(asic_base) = xine_tc3_imask;
  }
  
  #ifdef DS5000_240
toccata% cvs diff -c trap.c
Index: trap.c
===================================================================
RCS file: /a/cvsroot/src/sys/arch/pmax/pmax/trap.c,v
retrieving revision 1.17
diff -c -r1.17 trap.c
*** trap.c      1995/05/02 19:51:52     1.17
--- trap.c      1995/05/05 06:46:58
***************
*** 1080,1087 ****
        int temp;
  
        old_mask = *imaskp & xine_tc3_imask;
!       *imaskp = xine_tc3_imask |
!                (XINE_IM0 & ~(XINE_INTR_TC_0|XINE_INTR_TC_1));
  
        if (mask & MACH_INT_MASK_4)
                (*callv->_halt)((int *)0, 0);
--- 1082,1088 ----
        int temp;
  
        old_mask = *imaskp & xine_tc3_imask;
!       *imaskp = xine_tc3_imask;
  
        if (mask & MACH_INT_MASK_4)
                (*callv->_halt)((int *)0, 0);