TI-Davinci 6446 oops on interrupts

Thomas Gleixner tglx at linutronix.de
Mon Jun 6 17:30:29 EDT 2011


On Mon, 6 Jun 2011, Russell King - ARM Linux wrote:

> On Mon, Jun 06, 2011 at 04:49:59PM +0200, Thomas Gleixner wrote:
> > 0000014c <irq_gc_mask_clr_bit>:
> >  14c:   e5903014        ldr     r3, [r0, #20]
> >  150:   e590c000        ldr     ip, [r0]
> >  154:   e5932004        ldr     r2, [r3, #4]
> >  158:   e593100c        ldr     r1, [r3, #12]
> >  15c:   e062200c        rsb     r2, r2, ip
> >  160:   e3a0c001        mov     ip, #1
> >  164:   e1c1221c        bic     r2, r1, ip, lsl r2
> >  168:   e583200c        str     r2, [r3, #12]
> >  16c:   e590000c        ldr     r0, [r0, #12]
> >  170:   e5931000        ldr     r1, [r3]
> >  174:   e5903064        ldr     r3, [r0, #100]  ; 0x64
> >  178:   e7812003        str     r2, [r1, r3]
> >  17c:   e12fff1e        bx      lr
> > 
> > So it's the "str r2, [r1, r3]" and obviously r1 is pointing into
> > nirwana. r3 makes me wonder as well. We write 0x18 into ct->regs.mask
> > because we add 0x04 to the base pointer. So where comes the 0x1c from?
> 
> Beware - I don't think you can build the file and work out what went
> wrong in this manner.  Compilers like to change their register
> allocation for even the slightest difference of compiler options
> and preceding _unrelated_ code.

Just for fun I tried 5 different compilers and they all come up with the 

     str     r2, [r1, r3]

which is the only possible culprit for the register content combo in
this particular case.

> Unless we have the Code: line we don't know what the code being executed
> was.  It's important that folk always report the entire oops dump, not
> extracts from it that they _think_ may be relevant.

No argument.




More information about the linux-arm-kernel mailing list