Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b64d1f66 authored by Russell King's avatar Russell King
Browse files

ARM: uaccess: simplify user access assembly



The user assembly for byte and word accesses was virtually identical.
Rather than duplicating this, use a macro instead.

Acked-by: default avatarWill Deacon <will.deacon@arm.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent d770e558
Loading
Loading
Loading
Loading
+12 −35
Original line number Diff line number Diff line
@@ -311,9 +311,9 @@ do { \
	(x) = (__typeof__(*(ptr)))__gu_val;				\
} while (0)

#define __get_user_asm_byte(x, addr, err)			\
#define __get_user_asm(x, addr, err, instr)			\
	__asm__ __volatile__(					\
	"1:	" TUSER(ldrb) "	%1,[%2],#0\n"			\
	"1:	" TUSER(instr) " %1, [%2], #0\n"		\
	"2:\n"							\
	"	.pushsection .text.fixup,\"ax\"\n"		\
	"	.align	2\n"					\
@@ -329,6 +329,9 @@ do { \
	: "r" (addr), "i" (-EFAULT)				\
	: "cc")

#define __get_user_asm_byte(x, addr, err)			\
	__get_user_asm(x, addr, err, ldrb)

#ifndef __ARMEB__
#define __get_user_asm_half(x, __gu_addr, err)			\
({								\
@@ -348,22 +351,7 @@ do { \
#endif

#define __get_user_asm_word(x, addr, err)			\
	__asm__ __volatile__(					\
	"1:	" TUSER(ldr) "	%1,[%2],#0\n"			\
	"2:\n"							\
	"	.pushsection .text.fixup,\"ax\"\n"		\
	"	.align	2\n"					\
	"3:	mov	%0, %3\n"				\
	"	mov	%1, #0\n"				\
	"	b	2b\n"					\
	"	.popsection\n"					\
	"	.pushsection __ex_table,\"a\"\n"		\
	"	.align	3\n"					\
	"	.long	1b, 3b\n"				\
	"	.popsection"					\
	: "+r" (err), "=&r" (x)					\
	: "r" (addr), "i" (-EFAULT)				\
	: "cc")
	__get_user_asm(x, addr, err, ldr)

#define __put_user(x, ptr)						\
({									\
@@ -393,9 +381,9 @@ do { \
	}								\
} while (0)

#define __put_user_asm_byte(x, __pu_addr, err)			\
#define __put_user_asm(x, __pu_addr, err, instr)		\
	__asm__ __volatile__(					\
	"1:	" TUSER(strb) "	%1,[%2],#0\n"			\
	"1:	" TUSER(instr) " %1, [%2], #0\n"		\
	"2:\n"							\
	"	.pushsection .text.fixup,\"ax\"\n"		\
	"	.align	2\n"					\
@@ -410,6 +398,9 @@ do { \
	: "r" (x), "r" (__pu_addr), "i" (-EFAULT)		\
	: "cc")

#define __put_user_asm_byte(x, __pu_addr, err)			\
	__put_user_asm(x, __pu_addr, err, strb)

#ifndef __ARMEB__
#define __put_user_asm_half(x, __pu_addr, err)			\
({								\
@@ -427,21 +418,7 @@ do { \
#endif

#define __put_user_asm_word(x, __pu_addr, err)			\
	__asm__ __volatile__(					\
	"1:	" TUSER(str) "	%1,[%2],#0\n"			\
	"2:\n"							\
	"	.pushsection .text.fixup,\"ax\"\n"		\
	"	.align	2\n"					\
	"3:	mov	%0, %3\n"				\
	"	b	2b\n"					\
	"	.popsection\n"					\
	"	.pushsection __ex_table,\"a\"\n"		\
	"	.align	3\n"					\
	"	.long	1b, 3b\n"				\
	"	.popsection"					\
	: "+r" (err)						\
	: "r" (x), "r" (__pu_addr), "i" (-EFAULT)		\
	: "cc")
	__put_user_asm(x, __pu_addr, err, str)

#ifndef __ARMEB__
#define	__reg_oper0	"%R2"