diff options
Diffstat (limited to 'arch/s390/kernel/uprobes.c')
-rw-r--r-- | arch/s390/kernel/uprobes.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/arch/s390/kernel/uprobes.c b/arch/s390/kernel/uprobes.c index b88345ef8bd9..18591ca40ae7 100644 --- a/arch/s390/kernel/uprobes.c +++ b/arch/s390/kernel/uprobes.c @@ -11,6 +11,7 @@ #include <linux/compat.h> #include <linux/kdebug.h> #include <linux/sched/task_stack.h> +#include <linux/non-atomic/xchg.h> #include <asm/switch_to.h> #include <asm/facility.h> @@ -144,11 +145,7 @@ void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs) unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline, struct pt_regs *regs) { - unsigned long orig; - - orig = regs->gprs[14]; - regs->gprs[14] = trampoline; - return orig; + return __xchg(®s->gprs[14], trampoline); } bool arch_uretprobe_is_alive(struct return_instance *ret, enum rp_check ctx, |