NetBSD-Bugs archive

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

Re: port-hpcmips/38139: hpcmips 4.99.55: mutex_vector_enter: locking against myself



> >Synopsis:       hpcmips 4.99.55: mutex_vector_enter: locking against myself

Try the attached patch.
---
Izumi Tsutsui


Index: hpcmips/interrupt.c
===================================================================
RCS file: /cvsroot/src/sys/arch/hpcmips/hpcmips/interrupt.c,v
retrieving revision 1.11
diff -u -r1.11 interrupt.c
--- hpcmips/interrupt.c 3 Dec 2007 15:33:43 -0000       1.11
+++ hpcmips/interrupt.c 22 Mar 2008 17:58:15 -0000
@@ -73,11 +73,7 @@
 void
 cpu_intr(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending)
 {
-       struct cpu_info *ci;
 
-       ci = curcpu();
-       ci->ci_idepth++;
        (*platform.cpu_intr)(status, cause, pc, ipending);
-       ci->ci_idepth--;
 }
 #endif /* VR41XX && TX39XX */
Index: tx/tx39icu.c
===================================================================
RCS file: /cvsroot/src/sys/arch/hpcmips/tx/tx39icu.c,v
retrieving revision 1.23
diff -u -r1.23 tx39icu.c
--- tx/tx39icu.c        3 Dec 2007 15:33:44 -0000       1.23
+++ tx/tx39icu.c        22 Mar 2008 17:58:15 -0000
@@ -315,9 +315,12 @@
 {
        struct tx39icu_softc *sc;
        tx_chipset_tag_t tc;
+       struct cpu_info *ci;
        txreg_t reg, pend, *regs;
        int i, j;
 
+       ci = curcpu();
+       ci->ci_idepth++;
        uvmexp.intrs++;
 
 #ifdef __HAVE_FAST_SOFTINTS
@@ -417,6 +420,9 @@
 
 #ifdef __HAVE_FAST_SOFTINTS
  softintr:
+#endif
+       ci->ci_idepth--;
+#ifdef __HAVE_FAST_SOFTINTS
        _splset((status & ~cause & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
        softintr(ipending);
 #endif
Index: vr/vr.c
===================================================================
RCS file: /cvsroot/src/sys/arch/hpcmips/vr/vr.c,v
retrieving revision 1.50
diff -u -r1.50 vr.c
--- vr/vr.c     4 Jan 2008 22:13:57 -0000       1.50
+++ vr/vr.c     22 Mar 2008 17:58:15 -0000
@@ -532,6 +532,10 @@
 void
 VR_INTR(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending)
 {
+       struct cpu_info *ci;
+
+       ci = curcpu();
+       ci->ci_idepth++;
        uvmexp.intrs++;
 
        /* Deal with unneded compare interrupts occasionally so that we can
@@ -553,6 +557,7 @@
                _splset(MIPS_INT_MASK_1|MIPS_SR_INT_IE);
                (*vr_intr_handler[0])(vr_intr_arg[0], pc, status);
        }
+       ci->ci_idepth--;
 
 #ifdef __HAVE_FAST_SOFTINTS
        if (ipending & MIPS_SOFT_INT_MASK_1) {


Home | Main Index | Thread Index | Old Index