diff options
Diffstat (limited to 'arch/arm/kernel/traps.c')
-rw-r--r-- | arch/arm/kernel/traps.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index f838f36eb702..3f361a783f43 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/arm/kernel/traps.c | 2 | * linux/arch/arm/kernel/traps.c |
3 | * | 3 | * |
4 | * Copyright (C) 1995-2002 Russell King | 4 | * Copyright (C) 1995-2009 Russell King |
5 | * Fragments that appear the same as linux/arch/i386/kernel/traps.c (C) Linus Torvalds | 5 | * Fragments that appear the same as linux/arch/i386/kernel/traps.c (C) Linus Torvalds |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify | 7 | * This program is free software; you can redistribute it and/or modify |
@@ -528,7 +528,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs) | |||
528 | * __kuser_cmpxchg code in entry-armv.S should be aware of its | 528 | * __kuser_cmpxchg code in entry-armv.S should be aware of its |
529 | * existence. Don't ever use this from user code. | 529 | * existence. Don't ever use this from user code. |
530 | */ | 530 | */ |
531 | case 0xfff0: | 531 | case NR(cmpxchg): |
532 | for (;;) { | 532 | for (;;) { |
533 | extern void do_DataAbort(unsigned long addr, unsigned int fsr, | 533 | extern void do_DataAbort(unsigned long addr, unsigned int fsr, |
534 | struct pt_regs *regs); | 534 | struct pt_regs *regs); |
@@ -573,7 +573,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs) | |||
573 | if not implemented, rather than raising SIGILL. This | 573 | if not implemented, rather than raising SIGILL. This |
574 | way the calling program can gracefully determine whether | 574 | way the calling program can gracefully determine whether |
575 | a feature is supported. */ | 575 | a feature is supported. */ |
576 | if (no <= 0x7ff) | 576 | if ((no & 0xffff) <= 0x7ff) |
577 | return -ENOSYS; | 577 | return -ENOSYS; |
578 | break; | 578 | break; |
579 | } | 579 | } |
@@ -751,6 +751,8 @@ void __init early_trap_init(void) | |||
751 | */ | 751 | */ |
752 | memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes, | 752 | memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes, |
753 | sizeof(sigreturn_codes)); | 753 | sizeof(sigreturn_codes)); |
754 | memcpy((void *)KERN_RESTART_CODE, syscall_restart_code, | ||
755 | sizeof(syscall_restart_code)); | ||
754 | 756 | ||
755 | flush_icache_range(vectors, vectors + PAGE_SIZE); | 757 | flush_icache_range(vectors, vectors + PAGE_SIZE); |
756 | modify_domain(DOMAIN_USER, DOMAIN_CLIENT); | 758 | modify_domain(DOMAIN_USER, DOMAIN_CLIENT); |