NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: port-pmax/53611: NetBSD/pmax 8.0 RAMDISK kernel hang on 3MIN (5000/125)



The following reply was made to PR port-pmax/53611; it has been noted by GNATS.

From: Izumi Tsutsui <tsutsui%ceres.dti.ne.jp@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: tsutsui%ceres.dti.ne.jp@localhost
Subject: Re: port-pmax/53611: NetBSD/pmax 8.0 RAMDISK kernel hang on 3MIN (5000/125)
Date: Mon, 17 Sep 2018 05:32:11 +0900

 > NetBSD/pmax 8.0 RAMDISK kernel hangs during boot
  :
 > On gxemul-0.3.6.2 (which has partial 3MIN support)
 > it says there is a NULL pointer derference:
 > > [ warning: LOW reference: vaddr=0x00000000, exception TLBL, pc=0x00000000 <(no symbol)> ]
  :
 > According to gxemul -t (trace) output, it fails in ubc_init()?
 
 This was not correct, but maybe caused by random interrupts.
 
 After further investigation using gxemul -t, disabling framebuffer
 interrupts in the following line solves the hang on gxemul:
  https://nxr.netbsd.org/xref/src/sys/dev/tc/cfb.c?r=1.61#283
 
 According to dec_3min.c, 3MIN seems to have a quirk that
 interrups from each TC slot are directly connected to
 MIPS_INT_MASK_[012] lines, not via IOASIC as other PMAXen.
 
 It looks we had to remove spl adjustment code in dec_3min_intr_establish()
 function after mips interrupt reorganazation between netbsd-5 and -6.
 The following patch seems to solve the problem on my 3MIN
 (and vsync interrupts are accounted properly per systat(1) output),
 but I can't confirm if it's correct (I don't know about the mips
 interrupt handler changes).
 
 Index: pmax/dec_3min.c
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/pmax/pmax/dec_3min.c,v
 retrieving revision 1.73
 diff -u -p -d -r1.73 dec_3min.c
 --- pmax/dec_3min.c	24 Mar 2014 19:31:40 -0000	1.73
 +++ pmax/dec_3min.c	16 Sep 2018 20:12:04 -0000
 @@ -292,12 +292,7 @@ dec_3min_intr_establish(device_t dev, vo
  	case SYS_DEV_OPT0:
  	case SYS_DEV_OPT1:
  	case SYS_DEV_OPT2:
 -		/* it's an option slot */
 -		{
 -		int s = splhigh();
 -		s |= mask;
 -		splx(s);
 -		}
 +		/* it's an option slot and handled via MIPS_INT_MASK_[012] */
  		break;
  	default:
  		/* it's a baseboard device going via the IOASIC */
 


Home | Main Index | Thread Index | Old Index