Subject: anyone booted sun2 or sun3 kernels in the last 3 months?
To: None <port-sun2@netbsd.org, port-sun3@netbsd.org, yamt@netbsd.org>
From: matthew green <mrg@eterna.com.au>
List: port-sun3
Date: 06/24/2006 12:28:04
hi folks.


i'm trying to run sun2 kernel with GCC4 and the kernel is not booting
in tme.  it's losing early in MD code setting up softintr's.  i think
the problem was introduced in march by yamt with this change (i
haven't really looked at the previous code at all to verify the
original source of the bug):

Modified Files:
        src/sys/arch/sun3/include: intr.h
	src/sys/arch/sun68k/include: intr.h
	src/sys/arch/sun68k/sun68k: isr.c

Log Message:
implement splraiseipl() for sun2 and sun3.  reviewed by Izumi Tsutsui.

To generate a diff of this commit:
cvs rdiff -r1.6 -r1.7 src/sys/arch/sun3/include/intr.h
cvs rdiff -r1.6 -r1.7 src/sys/arch/sun68k/include/intr.h
cvs rdiff -r1.7 -r1.8 src/sys/arch/sun68k/sun68k/isr.c


what happens is that we have:

#define _IPL_SOFT_LEVEL_MIN     1
#define _IPL_SOFT_LEVEL_MAX     3

but

#define IPL_SOFTNET     (PSL_S|PSL_IPL1)

and 

#define PSL_IPL1        0x0100          /* interrupt priority level 1 */
#define PSL_S           0x2000          /* supervisor enable bit */

and then in sun68k/isr.c we have:

softintr_establish(int ipl, void (*func)(void *), void *arg)
...
        ipl &= ~PSL_S;
	if (ipl < _IPL_SOFT_LEVEL_MIN || ipl > _IPL_SOFT_LEVEL_MAX)
		panic("softintr_establish: unsupported soft IPL %d", ipl);

ipl = PSL_IPL1 at this point. the caller is just a few lines above
this in softintr_init():

        softnet_cookie = softintr_establish(IPL_SOFTNET,
					    (void (*)(void *)) netintr, NULL);

what's the right fix here?

thanks.


.mrg.