forked from Minki/linux
ARM: Use a definition for the userspace cmpxchg emulation syscall
Use a definition for the cmpxchg SWI instead of hard-coding the number. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Acked-by: Nicolas Pitre <nico@fluxnic.net>
This commit is contained in:
parent
bfd2e29f04
commit
cc20d42986
@ -402,6 +402,15 @@
|
||||
#define __ARM_NR_usr32 (__ARM_NR_BASE+4)
|
||||
#define __ARM_NR_set_tls (__ARM_NR_BASE+5)
|
||||
|
||||
/*
|
||||
* *NOTE*: This is a ghost syscall private to the kernel. Only the
|
||||
* __kuser_cmpxchg code in entry-armv.S should be aware of its
|
||||
* existence. Don't ever use this from user code.
|
||||
*/
|
||||
#ifdef __KERNEL__
|
||||
#define __ARM_NR_cmpxchg (__ARM_NR_BASE+0x00fff0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following syscalls are obsolete and no longer available for EABI.
|
||||
*/
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <mach/entry-macro.S>
|
||||
#include <asm/thread_notify.h>
|
||||
#include <asm/unwind.h>
|
||||
#include <asm/unistd.h>
|
||||
|
||||
#include "entry-header.S"
|
||||
|
||||
@ -908,10 +909,10 @@ __kuser_cmpxchg: @ 0xffff0fc0
|
||||
* A special ghost syscall is used for that (see traps.c).
|
||||
*/
|
||||
stmfd sp!, {r7, lr}
|
||||
mov r7, #0xff00 @ 0xfff0 into r7 for EABI
|
||||
orr r7, r7, #0xf0
|
||||
swi #0x9ffff0
|
||||
ldr r7, =1f @ it's 20 bits
|
||||
swi __ARM_NR_cmpxchg
|
||||
ldmfd sp!, {r7, pc}
|
||||
1: .word __ARM_NR_cmpxchg
|
||||
|
||||
#elif __LINUX_ARM_ARCH__ < 6
|
||||
|
||||
|
@ -528,7 +528,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
|
||||
* __kuser_cmpxchg code in entry-armv.S should be aware of its
|
||||
* existence. Don't ever use this from user code.
|
||||
*/
|
||||
case 0xfff0:
|
||||
case NR(cmpxchg):
|
||||
for (;;) {
|
||||
extern void do_DataAbort(unsigned long addr, unsigned int fsr,
|
||||
struct pt_regs *regs);
|
||||
|
Loading…
Reference in New Issue
Block a user