• Al Viro's avatar
    sparc32: fix a braino in fault handling in csum_and_copy_..._user() · 1f36cd05
    Al Viro authored
    Fault handler used to make non-trivial calls, so it needed
    to set a stack frame up.  Used to be
    	save ... - grab a stack frame, old %o... become %i...
    	....
    	ret	- go back to address originally in %o7, currently %i7
    	 restore - switch to previous stack frame, in delay slot
    Non-trivial calls had been gone since ab5e8b33 and that code should
    have become
    	retl	- go back to address in %o7
    	 clr %o0 - have return value set to 0
    What it had become instead was
    	ret	- go back to address in %i7 - return address of *caller*
    	 clr %o0 - have return value set to 0
    which is not good, to put it mildly - we forcibly return 0 from
    csum_and_copy_{from,to}_iter() (which is what the call of that
    thing had been inlined into) and do that without dropping the
    stack frame of said csum_and_copy_..._iter().  Confuses the
    hell out of the caller of csum_and_copy_..._iter(), obviously...
    Reviewed-by: default avatarSam Ravnborg <sam@ravnborg.org>
    Fixes: ab5e8b33 "sparc32: propagate the calling conventions change down to __csum_partial_copy_sparc_generic()"
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    1f36cd05
checksum_32.S 14 KB