s390/uaccess: fix __put_get_user_asm define
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Mon, 20 Jun 2016 08:35:20 +0000 (10:35 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 28 Jun 2016 07:32:27 +0000 (09:32 +0200)
commitdc4aace160165bd15400a79f9f5ab97405278f48
treeb9bda648dbb6be08deea6af9fd4e6061e16a1797
parent109ab954713bd07c96f65ceddab4886069a110ab
s390/uaccess: fix __put_get_user_asm define

The __put_get_user_asm defines an inline assmembly which makes use of
the asm register construct. The parameters passed to that define may
also contain function calls.

It is a gcc restriction that between register asm statements and the
use of any such annotated variables function calls may clobber the
register / variable contents. Or in other words: gcc would generate
broken code.

This can be achieved e.g. with the following code:

    get_user(x, func() ? a : b);

where the call of func would clobber register zero which is used by
the __put_get_user_asm define.
To avoid this add two static inline functions which don't have these
side effects.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/uaccess.h