• Max Filippov's avatar
    xtensa: add fixup for double exception raised in window overflow · e0a37035
    Max Filippov authored
    commit 17290231 upstream.
    
    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
    Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
    Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
    e0a37035
vectors.S 21.6 KB