Skip to content
  • Max Filippov's avatar
    xtensa: add fixup for double exception raised in window overflow · 17290231
    Max Filippov authored
    
    
    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: default avatarMax Filippov <jcmvbkbc@gmail.com>
    17290231