parisc: Use SR_USER and SR_KERNEL in get_user() and put_user()
Instead of hardcoding the space registers as strings, use the SR_USER and SR_KERNEL constants to form the space register in the access functions. Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
Родитель
46b4016f7d
Коммит
5613a93085
|
@ -79,18 +79,18 @@ struct exception_table_entry {
|
||||||
|
|
||||||
#define __get_user(val, ptr) \
|
#define __get_user(val, ptr) \
|
||||||
({ \
|
({ \
|
||||||
__get_user_internal("%%sr3,", val, ptr); \
|
__get_user_internal(SR_USER, val, ptr); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __get_user_asm(sr, val, ldx, ptr) \
|
#define __get_user_asm(sr, val, ldx, ptr) \
|
||||||
{ \
|
{ \
|
||||||
register long __gu_val; \
|
register long __gu_val; \
|
||||||
\
|
\
|
||||||
__asm__("1: " ldx " 0(" sr "%2),%0\n" \
|
__asm__("1: " ldx " 0(%%sr%2,%3),%0\n" \
|
||||||
"9:\n" \
|
"9:\n" \
|
||||||
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
|
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
|
||||||
: "=r"(__gu_val), "+r"(__gu_err) \
|
: "=r"(__gu_val), "+r"(__gu_err) \
|
||||||
: "r"(ptr)); \
|
: "i"(sr), "r"(ptr)); \
|
||||||
\
|
\
|
||||||
(val) = (__force __typeof__(*(ptr))) __gu_val; \
|
(val) = (__force __typeof__(*(ptr))) __gu_val; \
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ struct exception_table_entry {
|
||||||
{ \
|
{ \
|
||||||
type __z; \
|
type __z; \
|
||||||
long __err; \
|
long __err; \
|
||||||
__err = __get_user_internal("%%sr0,", __z, (type *)(src)); \
|
__err = __get_user_internal(SR_KERNEL, __z, (type *)(src)); \
|
||||||
if (unlikely(__err)) \
|
if (unlikely(__err)) \
|
||||||
goto err_label; \
|
goto err_label; \
|
||||||
else \
|
else \
|
||||||
|
@ -118,13 +118,13 @@ struct exception_table_entry {
|
||||||
} __gu_tmp; \
|
} __gu_tmp; \
|
||||||
\
|
\
|
||||||
__asm__(" copy %%r0,%R0\n" \
|
__asm__(" copy %%r0,%R0\n" \
|
||||||
"1: ldw 0(" sr "%2),%0\n" \
|
"1: ldw 0(%%sr%2,%3),%0\n" \
|
||||||
"2: ldw 4(" sr "%2),%R0\n" \
|
"2: ldw 4(%%sr%2,%3),%R0\n" \
|
||||||
"9:\n" \
|
"9:\n" \
|
||||||
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
|
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
|
||||||
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(2b, 9b) \
|
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(2b, 9b) \
|
||||||
: "=&r"(__gu_tmp.l), "+r"(__gu_err) \
|
: "=&r"(__gu_tmp.l), "+r"(__gu_err) \
|
||||||
: "r"(ptr)); \
|
: "i"(sr), "r"(ptr)); \
|
||||||
\
|
\
|
||||||
(val) = __gu_tmp.t; \
|
(val) = __gu_tmp.t; \
|
||||||
}
|
}
|
||||||
|
@ -151,14 +151,14 @@ struct exception_table_entry {
|
||||||
({ \
|
({ \
|
||||||
__typeof__(&*(ptr)) __ptr = ptr; \
|
__typeof__(&*(ptr)) __ptr = ptr; \
|
||||||
__typeof__(*(__ptr)) __x = (__typeof__(*(__ptr)))(x); \
|
__typeof__(*(__ptr)) __x = (__typeof__(*(__ptr)))(x); \
|
||||||
__put_user_internal("%%sr3,", __x, __ptr); \
|
__put_user_internal(SR_USER, __x, __ptr); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __put_kernel_nofault(dst, src, type, err_label) \
|
#define __put_kernel_nofault(dst, src, type, err_label) \
|
||||||
{ \
|
{ \
|
||||||
type __z = *(type *)(src); \
|
type __z = *(type *)(src); \
|
||||||
long __err; \
|
long __err; \
|
||||||
__err = __put_user_internal("%%sr0,", __z, (type *)(dst)); \
|
__err = __put_user_internal(SR_KERNEL, __z, (type *)(dst)); \
|
||||||
if (unlikely(__err)) \
|
if (unlikely(__err)) \
|
||||||
goto err_label; \
|
goto err_label; \
|
||||||
}
|
}
|
||||||
|
@ -178,24 +178,24 @@ struct exception_table_entry {
|
||||||
|
|
||||||
#define __put_user_asm(sr, stx, x, ptr) \
|
#define __put_user_asm(sr, stx, x, ptr) \
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"1: " stx " %2,0(" sr "%1)\n" \
|
"1: " stx " %1,0(%%sr%2,%3)\n" \
|
||||||
"9:\n" \
|
"9:\n" \
|
||||||
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
|
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
|
||||||
: "+r"(__pu_err) \
|
: "+r"(__pu_err) \
|
||||||
: "r"(ptr), "r"(x))
|
: "r"(x), "i"(sr), "r"(ptr))
|
||||||
|
|
||||||
|
|
||||||
#if !defined(CONFIG_64BIT)
|
#if !defined(CONFIG_64BIT)
|
||||||
|
|
||||||
#define __put_user_asm64(sr, __val, ptr) do { \
|
#define __put_user_asm64(sr, __val, ptr) do { \
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"1: stw %2,0(" sr "%1)\n" \
|
"1: stw %1,0(%%sr%2,%3)\n" \
|
||||||
"2: stw %R2,4(" sr "%1)\n" \
|
"2: stw %R1,4(%%sr%2,%3)\n" \
|
||||||
"9:\n" \
|
"9:\n" \
|
||||||
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
|
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
|
||||||
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(2b, 9b) \
|
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(2b, 9b) \
|
||||||
: "+r"(__pu_err) \
|
: "+r"(__pu_err) \
|
||||||
: "r"(ptr), "r"(__val)); \
|
: "r"(__val), "i"(sr), "r"(ptr)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#endif /* !defined(CONFIG_64BIT) */
|
#endif /* !defined(CONFIG_64BIT) */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче