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

Commit ec56b1d4 authored by Markos Chandras's avatar Markos Chandras Committed by Ralf Baechle
Browse files

MIPS: asm: uaccess: Move duplicated code to common function



Similar to __get_user_* functions, move common code to
__put_user_*_common so it can be shared among similar users.

Signed-off-by: default avatarMarkos Chandras <markos.chandras@imgtec.com>
parent d84869a1
Loading
Loading
Loading
Loading
+29 −32
Original line number Diff line number Diff line
@@ -326,13 +326,8 @@ do { \
#define __PUT_USER_DW(insn, ptr) __put_user_asm("sd", ptr)
#endif

#define __put_user_nocheck(x, ptr, size)				\
({									\
	__typeof__(*(ptr)) __pu_val;					\
	int __pu_err = 0;						\
									\
	__chk_user_ptr(ptr);						\
	__pu_val = (x);							\
#define __put_user_common(ptr, size)					\
do {									\
	switch (size) {							\
	case 1: __put_user_asm("sb", ptr); break;			\
	case 2: __put_user_asm("sh", ptr); break;			\
@@ -340,6 +335,16 @@ do { \
	case 8: __PUT_USER_DW("sw", ptr); break;			\
	default: __put_user_unknown(); break;				\
	}								\
} while (0)

#define __put_user_nocheck(x, ptr, size)				\
({									\
	__typeof__(*(ptr)) __pu_val;					\
	int __pu_err = 0;						\
									\
	__chk_user_ptr(ptr);						\
	__pu_val = (x);							\
	__put_user_common(ptr, size);					\
	__pu_err;							\
})

@@ -350,15 +355,9 @@ do { \
	int __pu_err = -EFAULT;						\
									\
	might_fault();							\
	if (likely(access_ok(VERIFY_WRITE,  __pu_addr, size))) {	\
		switch (size) {						\
		case 1: __put_user_asm("sb", __pu_addr); break;		\
		case 2: __put_user_asm("sh", __pu_addr); break;		\
		case 4: __put_user_asm("sw", __pu_addr); break;		\
		case 8: __PUT_USER_DW("sw", __pu_addr); break;		\
		default: __put_user_unknown(); break;			\
		}							\
	}								\
	if (likely(access_ok(VERIFY_WRITE,  __pu_addr, size)))		\
		__put_user_common(__pu_addr, size);			\
									\
	__pu_err;							\
})

@@ -594,19 +593,23 @@ do { \
#define __PUT_USER_UNALIGNED_DW(ptr) __put_user_unaligned_asm("usd", ptr)
#endif

#define __put_user_unaligned_nocheck(x,ptr,size)			\
({									\
	__typeof__(*(ptr)) __pu_val;					\
	int __pu_err = 0;						\
									\
	__pu_val = (x);							\
#define __put_user_unaligned_common(ptr, size)				\
do {									\
	switch (size) {							\
	case 1: __put_user_asm("sb", ptr); break;			\
	case 2: __put_user_unaligned_asm("ush", ptr); break;		\
	case 4: __put_user_unaligned_asm("usw", ptr); break;		\
	case 8: __PUT_USER_UNALIGNED_DW(ptr); break;			\
	default: __put_user_unaligned_unknown(); break;			\
	}								\
} while (0)

#define __put_user_unaligned_nocheck(x,ptr,size)			\
({									\
	__typeof__(*(ptr)) __pu_val;					\
	int __pu_err = 0;						\
									\
	__pu_val = (x);							\
	__put_user_unaligned_common(ptr, size);				\
	__pu_err;							\
})

@@ -616,15 +619,9 @@ do { \
	__typeof__(*(ptr)) __pu_val = (x);				\
	int __pu_err = -EFAULT;						\
									\
	if (likely(access_ok(VERIFY_WRITE,  __pu_addr, size))) {	\
		switch (size) {						\
		case 1: __put_user_asm("sb", __pu_addr); break;		\
		case 2: __put_user_unaligned_asm("ush", __pu_addr); break; \
		case 4: __put_user_unaligned_asm("usw", __pu_addr); break; \
		case 8: __PUT_USER_UNALGINED_DW(__pu_addr); break;	\
		default: __put_user_unaligned_unknown(); break;		\
		}							\
	}								\
	if (likely(access_ok(VERIFY_WRITE,  __pu_addr, size)))		\
		__put_user_unaligned_common(__pu_addr, size);		\
									\
	__pu_err;							\
})