Commit 35506a3e authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/uaccess: Move get_user_instr helpers in asm/inst.h



Those helpers use get_user helpers but they don't participate
in their implementation, so they do not belong to asm/uaccess.h

Move them in asm/inst.h

Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/2c6e83581b4fa434aa7cf2fa7714c41e98f57007.1615398265.git.christophe.leroy@csgroup.eu
parent bad956b8
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -4,6 +4,40 @@

#include <asm/ppc-opcode.h>

#ifdef CONFIG_PPC64

#define ___get_user_instr(gu_op, dest, ptr)				\
({									\
	long __gui_ret = 0;						\
	unsigned long __gui_ptr = (unsigned long)ptr;			\
	struct ppc_inst __gui_inst;					\
	unsigned int __prefix, __suffix;				\
	__gui_ret = gu_op(__prefix, (unsigned int __user *)__gui_ptr);	\
	if (__gui_ret == 0) {						\
		if ((__prefix >> 26) == OP_PREFIX) {			\
			__gui_ret = gu_op(__suffix,			\
				(unsigned int __user *)__gui_ptr + 1);	\
			__gui_inst = ppc_inst_prefix(__prefix,		\
						     __suffix);		\
		} else {						\
			__gui_inst = ppc_inst(__prefix);		\
		}							\
		if (__gui_ret == 0)					\
			(dest) = __gui_inst;				\
	}								\
	__gui_ret;							\
})
#else /* !CONFIG_PPC64 */
#define ___get_user_instr(gu_op, dest, ptr)				\
	gu_op((dest).val, (u32 __user *)(ptr))
#endif /* CONFIG_PPC64 */

#define get_user_instr(x, ptr) \
	___get_user_instr(get_user, x, ptr)

#define __get_user_instr(x, ptr) \
	___get_user_instr(__get_user, x, ptr)

/*
 * Instruction data type for POWER
 */
+0 −34
Original line number Diff line number Diff line
@@ -53,40 +53,6 @@ static inline bool __access_ok(unsigned long addr, unsigned long size)
#define __put_user(x, ptr) \
	__put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))

#ifdef CONFIG_PPC64

#define ___get_user_instr(gu_op, dest, ptr)				\
({									\
	long __gui_ret = 0;						\
	unsigned long __gui_ptr = (unsigned long)ptr;			\
	struct ppc_inst __gui_inst;					\
	unsigned int __prefix, __suffix;				\
	__gui_ret = gu_op(__prefix, (unsigned int __user *)__gui_ptr);	\
	if (__gui_ret == 0) {						\
		if ((__prefix >> 26) == OP_PREFIX) {			\
			__gui_ret = gu_op(__suffix,			\
				(unsigned int __user *)__gui_ptr + 1);	\
			__gui_inst = ppc_inst_prefix(__prefix,		\
						     __suffix);		\
		} else {						\
			__gui_inst = ppc_inst(__prefix);		\
		}							\
		if (__gui_ret == 0)					\
			(dest) = __gui_inst;				\
	}								\
	__gui_ret;							\
})
#else /* !CONFIG_PPC64 */
#define ___get_user_instr(gu_op, dest, ptr)				\
	gu_op((dest).val, (u32 __user *)(ptr))
#endif /* CONFIG_PPC64 */

#define get_user_instr(x, ptr) \
	___get_user_instr(get_user, x, ptr)

#define __get_user_instr(x, ptr) \
	___get_user_instr(__get_user, x, ptr)

extern long __put_user_bad(void);

#define __put_user_size(x, ptr, size, retval)			\