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