Port-sun2 archive

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

Re: anyone booted sun2 or sun3 kernels in the last 3 months?



mrg%eterna.com.au@localhost wrote:

> this seems grody but seems to work..

If we can't get the real fix soon, I'll commit the attached patch
(based on yours, but a bit modified) for workaround.

> perhaps the right fix is to just
> redefine IPL_SOFT* back to the _IPL_SOFT_LEVEL_* constants?

It won't work because IPL_SOFT{CLOCK,NET,SERIAL} is refered
in <sys/spl.h> for splraiseipl() (which is defined as _splraise())
and MI softintr_establish() also takes the same IPL_* values.
---
Izumi Tsutsui


Index: sys/arch/sun68k/include/intr.h
===================================================================
RCS file: /cvsroot/src/sys/arch/sun68k/include/intr.h,v
retrieving revision 1.7
diff -u -r1.7 intr.h
--- sys/arch/sun68k/include/intr.h      29 Mar 2006 08:55:40 -0000      1.7
+++ sys/arch/sun68k/include/intr.h      2 Aug 2006 14:04:36 -0000
@@ -48,11 +48,14 @@
 #define _IPL_SOFT_LEVEL_MAX    3
 
 #define        IPL_NONE        0
-#define        IPL_SOFTCLOCK   (PSL_S|PSL_IPL1)
-#define        IPL_SOFTNET     (PSL_S|PSL_IPL1)
+#define        IPL_SOFT_LEVEL1 (PSL_S|PSL_IPL1)
+#define        IPL_SOFT_LEVEL2 (PSL_S|PSL_IPL2)
+#define        IPL_SOFT_LEVEL3 (PSL_S|PSL_IPL3)
+#define        IPL_SOFTCLOCK   IPL_SOFT_LEVEL1
+#define        IPL_SOFTNET     IPL_SOFT_LEVEL1
 #define        IPL_BIO         (PSL_S|PSL_IPL2)
 #define        IPL_NET         (PSL_S|PSL_IPL3)
-#define        IPL_SOFTSERIAL  (PSL_S|PSL_IPL3)
+#define        IPL_SOFTSERIAL  IPL_SOFT_LEVEL3
 #define        IPL_TTY         (PSL_S|PSL_IPL4)
 #define        IPL_VM          (PSL_S|PSL_IPL4)
 /* Intersil or Am9513 clock hardware interrupts (hard-wired at 5) */
Index: sys/arch/sun68k/sun68k/isr.c
===================================================================
RCS file: /cvsroot/src/sys/arch/sun68k/sun68k/isr.c,v
retrieving revision 1.8
diff -u -r1.8 isr.c
--- sys/arch/sun68k/sun68k/isr.c        29 Mar 2006 08:55:40 -0000      1.8
+++ sys/arch/sun68k/sun68k/isr.c        2 Aug 2006 14:04:37 -0000
@@ -305,13 +305,18 @@
 {
        struct softintr_handler *sh;
        struct softintr_head *shd;
+       int level;
 
-       ipl &= ~PSL_S;
-       if (ipl < _IPL_SOFT_LEVEL_MIN || ipl > _IPL_SOFT_LEVEL_MAX)
+       if (ipl == IPL_SOFT_LEVEL1)
+               level = _IPL_SOFT_LEVEL1;
+       else if (ipl == IPL_SOFT_LEVEL2)
+               level = _IPL_SOFT_LEVEL2;
+       else if (ipl == IPL_SOFT_LEVEL3)
+               level = _IPL_SOFT_LEVEL3;
+       else
                panic("softintr_establish: unsupported soft IPL");
 
-       shd = &soft_level_heads[ipl - _IPL_SOFT_LEVEL_MIN];
-
+       shd = &soft_level_heads[level - _IPL_SOFT_LEVEL_MIN];
        sh = malloc(sizeof(*sh), M_SOFTINTR, M_NOWAIT);
        if (sh == NULL)
                return NULL;



Home | Main Index | Thread Index | Old Index