NetBSD-Bugs archive

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

port-evbppc/40288: ci_idepth{++,--} is needed in ext_intr() for ibm4xx



>Number:         40288
>Category:       port-evbppc
>Synopsis:       ci_idepth{++,--} seems to be needed in ext_intr() for ibm4xx
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    port-evbppc-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Dec 29 13:25:00 +0000 2008
>Originator:     FUKAUMI Naoki
>Release:        NetBSD 5.0_BETA
>Organization:
        FUKAUMI Naoki
>Environment:
NetBSD 5.0_BETA (OPENBLOCKS266) #0: Sun Dec 28 20:35:53 JST 2008
>Description:
        OPENBLOCKS266 kernel panics while using wd(4) attached at
        hptide(4).

  :
hptide0 at pci0 dev 3 function 0
hptide0: Triones/Highpoint HPT371 IDE Controller
hptide0: using irq 30 for native-PCI interrupt
atabus0 at hptide0 channel 0
atabus1 at hptide0 channel 1
wd0 at atabus1 drive 0: <TRANSCEND>
wd0: 1911 MB, 3884 cyl, 16 head, 63 sec, 512 bytes/sect x 3915072 sectors
root device: wd0c
dump device (default wd0b): 
file system (default generic): 
root on wd0c dumps on wd0b
  :
init path (default /sbin/init): 
init: copying out path `/sbin/init' 11
Mutex error: mutex_vector_enter: locking against myself

lock address : 0x0000000007de3200
current cpu  :                  0
current lwp  : 0x0000000007f2d900
owner field  : 0x0000000007f2d900 wait/spin:                0/0

panic: lock error
Stopped in pid 2.1 (init) at    netbsd:cpu_Debugger+0x10:       lwz     r0, r1, 0
x14
db> bt
0x003f3d30: at panic+0x21c
0x003f3d80: at lockdebug_abort+0x48
0x003f3da0: at mutex_abort+0x54
0x003f3db0: at mutex_vector_enter+0x1b0
0x003f3de0: at biodone2+0x3c
0x003f3e00: at wddone+0x84
0x003f3e20: at wdc_ata_bio_done+0xa8
0x003f3e40: at wdc_ata_bio_intr+0x33c
0x003f3e70: at wdcintr+0xb4
0x003f3e90: at hpt_pci_intr+0x84
0x003f3ec0: at ext_intr+0xfc
0x003f3f00: at emptyidlespin+0x4d8
0x003f3f60: at ext_intr+0xfc
0x003f3fa0: at emptyidlespin+0x4d8
0x89653d60: at 0xfffffffc
0x89653d70: at pmap_enter+0x3d4
0x89653db0: at uvm_fault_internal+0xc1c
0x89653ee0: at trap+0xfc
0x89653f40: user trap 0x1200 by 0x4191a880: srr1=0xc030
            r1=0xfffeab60 cr=0x44000042 xer=0 ctr=0x4191a878 esr=0 pid=0x4

>How-To-Repeat:
        access wd(4) on OPENBLOCKS266 kernel.
>Fix:
        I'm not sure this is correct.

Index: sys/arch/powerpc/ibm4xx/intr.c
===================================================================
RCS file: /home/fun/cvsroot/NetBSD/src/sys/arch/powerpc/ibm4xx/intr.c,v
retrieving revision 1.20
diff -u -p -r1.20 intr.c
--- sys/arch/powerpc/ibm4xx/intr.c      2 Jan 2008 11:48:27 -0000       1.20
+++ sys/arch/powerpc/ibm4xx/intr.c      26 Dec 2008 07:36:33 -0000
@@ -234,6 +234,11 @@ ext_intr(void)
        int pcpl;
        u_long int_state;
 
+#ifdef __HAVE_FAST_SOFTINTS
+#error don't count soft interrupts
+#else
+       ci->ci_idepth++;
+#endif
        pcpl = ci->ci_cpl;
        msr = mfmsr();
 
@@ -279,6 +284,7 @@ ext_intr(void)
        wrteei(1);
        splx(pcpl);
        mtmsr(msr);
+       ci->ci_idepth--;
 }
 
 static inline void



Home | Main Index | Thread Index | Old Index