xtensa: add fixup for double exception raised in window overflow
authorMax Filippov <jcmvbkbc@gmail.com>
Sat, 24 May 2014 17:48:28 +0000 (21:48 +0400)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 9 Jun 2014 00:46:00 +0000 (04:46 +0400)
There are two FIXMEs in the double exception handler 'for the extremely
unlikely case'. This case gets hit by gcc during kernel build once in
a few hours, resulting in an unrecoverable exception condition.

Provide missing fixup routine to handle this case. Double exception
literals now need 8 more bytes, add them to the linker script.

Also replace bbsi instructions with bbsi.l as we're branching depending
on 8th and 7th LSB-based bits of exception address.

This may be tested by adding the explicit DTLB invalidation to window
overflow handlers, like the following:

    --- a/arch/xtensa/kernel/vectors.S
    +++ b/arch/xtensa/kernel/vectors.S
    @@ -592,6 +592,14 @@ ENDPROC(_WindowUnderflow4)
     ENTRY_ALIGN64(_WindowOverflow8)

     s32e a0, a9, -16
    + bbsi.l a9, 31, 1f
    + rsr a0, ccount
    + bbsi.l a0, 4, 1f
    + pdtlb a0, a9
    + idtlb a0
    + movi a0, 9
    + idtlb a0
    +1:
     l32e    a0, a1, -12
     s32e    a2, a9,  -8
     s32e    a1, a9, -12

Cc: stable@vger.kernel.org
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>

No differences found