x86/xen: Remove .fixup usage
Employ the fancy new EX_TYPE_IMM_REG to store -EFAULT in the return register and use this to remove some Xen .fixup usage. All callers of these functions only test for 0 return, so the actual return value change from -1 to -EFAULT is immaterial. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Juergen Gross <jgross@suse.com> Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com> Link: https://lore.kernel.org/r/20211110101325.545019822@infradead.org
This commit is contained in:
parent
99641e094d
commit
e2b48e4328
@ -96,11 +96,7 @@ static inline int xen_safe_write_ulong(unsigned long *addr, unsigned long val)
|
||||
|
||||
asm volatile("1: mov %[val], %[ptr]\n"
|
||||
"2:\n"
|
||||
".section .fixup, \"ax\"\n"
|
||||
"3: sub $1, %[ret]\n"
|
||||
" jmp 2b\n"
|
||||
".previous\n"
|
||||
_ASM_EXTABLE(1b, 3b)
|
||||
_ASM_EXTABLE_TYPE_REG(1b, 2b, EX_TYPE_EFAULT_REG, %[ret])
|
||||
: [ret] "+r" (ret), [ptr] "=m" (*addr)
|
||||
: [val] "r" (val));
|
||||
|
||||
@ -110,16 +106,12 @@ static inline int xen_safe_write_ulong(unsigned long *addr, unsigned long val)
|
||||
static inline int xen_safe_read_ulong(const unsigned long *addr,
|
||||
unsigned long *val)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned long rval = ~0ul;
|
||||
int ret = 0;
|
||||
|
||||
asm volatile("1: mov %[ptr], %[rval]\n"
|
||||
"2:\n"
|
||||
".section .fixup, \"ax\"\n"
|
||||
"3: sub $1, %[ret]\n"
|
||||
" jmp 2b\n"
|
||||
".previous\n"
|
||||
_ASM_EXTABLE(1b, 3b)
|
||||
_ASM_EXTABLE_TYPE_REG(1b, 2b, EX_TYPE_EFAULT_REG, %[ret])
|
||||
: [ret] "+r" (ret), [rval] "+r" (rval)
|
||||
: [ptr] "m" (*addr));
|
||||
*val = rval;
|
||||
|
Loading…
x
Reference in New Issue
Block a user