mirror of https://gitee.com/openkylin/linux.git
powerpc/uaccess: Remove __get/put_user_inatomic()
Powerpc is the only architecture having _inatomic variants of __get_user() and __put_user() accessors. They were introduced by commite68c825bb0
("[POWERPC] Add inatomic versions of __get_user and __put_user"). Those variants expand to the _nosleep macros instead of expanding to the _nocheck macros. The only difference between the _nocheck and the _nosleep macros is the call to might_fault(). Since commit662bbcb274
("mm, sched: Allow uaccess in atomic with pagefault_disable()"), __get/put_user() can be used in atomic parts of the code, therefore __get/put_user_inatomic() have become useless. Remove __get_user_inatomic() and __put_user_inatomic(). Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Reviewed-by: Daniel Axtens <dja@axtens.net> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/1e5c895669e8d54a7810b62dc61eb111f33c2c37.1615398265.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
3fa3db3295
commit
bad956b8fe
|
@ -53,11 +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)))
|
||||
|
||||
#define __get_user_inatomic(x, ptr) \
|
||||
__get_user_nosleep((x), (ptr), sizeof(*(ptr)))
|
||||
#define __put_user_inatomic(x, ptr) \
|
||||
__put_user_nosleep((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
|
||||
#define ___get_user_instr(gu_op, dest, ptr) \
|
||||
|
@ -92,9 +87,6 @@ static inline bool __access_ok(unsigned long addr, unsigned long size)
|
|||
#define __get_user_instr(x, ptr) \
|
||||
___get_user_instr(__get_user, x, ptr)
|
||||
|
||||
#define __get_user_instr_inatomic(x, ptr) \
|
||||
___get_user_instr(__get_user_inatomic, x, ptr)
|
||||
|
||||
extern long __put_user_bad(void);
|
||||
|
||||
#define __put_user_size(x, ptr, size, retval) \
|
||||
|
@ -141,20 +133,6 @@ __pu_failed: \
|
|||
__pu_err; \
|
||||
})
|
||||
|
||||
#define __put_user_nosleep(x, ptr, size) \
|
||||
({ \
|
||||
long __pu_err; \
|
||||
__typeof__(*(ptr)) __user *__pu_addr = (ptr); \
|
||||
__typeof__(*(ptr)) __pu_val = (x); \
|
||||
__typeof__(size) __pu_size = (size); \
|
||||
\
|
||||
__chk_user_ptr(__pu_addr); \
|
||||
__put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \
|
||||
\
|
||||
__pu_err; \
|
||||
})
|
||||
|
||||
|
||||
/*
|
||||
* We don't tell gcc that we are accessing memory, but this is OK
|
||||
* because we do not write to any memory gcc knows about, so there
|
||||
|
@ -320,21 +298,6 @@ do { \
|
|||
__gu_err; \
|
||||
})
|
||||
|
||||
#define __get_user_nosleep(x, ptr, size) \
|
||||
({ \
|
||||
long __gu_err; \
|
||||
__long_type(*(ptr)) __gu_val; \
|
||||
__typeof__(*(ptr)) __user *__gu_addr = (ptr); \
|
||||
__typeof__(size) __gu_size = (size); \
|
||||
\
|
||||
__chk_user_ptr(__gu_addr); \
|
||||
__get_user_size(__gu_val, __gu_addr, __gu_size, __gu_err); \
|
||||
(x) = (__force __typeof__(*(ptr)))__gu_val; \
|
||||
\
|
||||
__gu_err; \
|
||||
})
|
||||
|
||||
|
||||
/* more complex routines */
|
||||
|
||||
extern unsigned long __copy_tofrom_user(void __user *to,
|
||||
|
|
|
@ -141,7 +141,7 @@ void wp_get_instr_detail(struct pt_regs *regs, struct ppc_inst *instr,
|
|||
{
|
||||
struct instruction_op op;
|
||||
|
||||
if (__get_user_instr_inatomic(*instr, (void __user *)regs->nip))
|
||||
if (__get_user_instr(*instr, (void __user *)regs->nip))
|
||||
return;
|
||||
|
||||
analyse_instr(&op, regs, *instr);
|
||||
|
|
|
@ -863,7 +863,7 @@ static void p9_hmi_special_emu(struct pt_regs *regs)
|
|||
unsigned long ea, msr, msr_mask;
|
||||
bool swap;
|
||||
|
||||
if (__get_user_inatomic(instr, (unsigned int __user *)regs->nip))
|
||||
if (__get_user(instr, (unsigned int __user *)regs->nip))
|
||||
return;
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue