From 01d69a82e1d3c938da16bf55aab000672243aa24 Mon Sep 17 00:00:00 2001 From: Tony Luck Date: Fri, 13 Aug 2010 16:41:07 -0700 Subject: [PATCH 1/2] [IA64] Fix 64-bit atomic routines to return "long" These have been broken (returning "int") since the dawn of time. But there were no users that needed the whole value until commit 424acaaeb3a3932d64a9b4bd59df6cf72c22d8f3 rwsem: wake queued readers when writer blocks on active read lock made this change: - (rwsem_atomic_update(0, sem) & RWSEM_ACTIVE_MASK)) - /* Someone grabbed the sem already */ + rwsem_atomic_update(0, sem) < RWSEM_WAITING_BIAS) + /* Someone grabbed the sem for write already */ RWSEM_ACTIVE_MASK is 0xffffffffL, so the old code only looked at the low order 32-bits. The new code needs to see all 64 bits. Signed-off-by: Tony Luck --- arch/ia64/include/asm/atomic.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/ia64/include/asm/atomic.h b/arch/ia64/include/asm/atomic.h index 4e1948447a00..446881439675 100644 --- a/arch/ia64/include/asm/atomic.h +++ b/arch/ia64/include/asm/atomic.h @@ -41,7 +41,7 @@ ia64_atomic_add (int i, atomic_t *v) return new; } -static __inline__ int +static __inline__ long ia64_atomic64_add (__s64 i, atomic64_t *v) { __s64 old, new; @@ -69,7 +69,7 @@ ia64_atomic_sub (int i, atomic_t *v) return new; } -static __inline__ int +static __inline__ long ia64_atomic64_sub (__s64 i, atomic64_t *v) { __s64 old, new; @@ -107,7 +107,7 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) -static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u) +static __inline__ long atomic64_add_unless(atomic64_t *v, long a, long u) { long c, old; c = atomic64_read(v); @@ -158,7 +158,7 @@ atomic_add_negative (int i, atomic_t *v) return atomic_add_return(i, v) < 0; } -static __inline__ int +static __inline__ long atomic64_add_negative (__s64 i, atomic64_t *v) { return atomic64_add_return(i, v) < 0; From a78b2de1e47b66c0f7525057652e99d1592ec77b Mon Sep 17 00:00:00 2001 From: Tony Luck Date: Thu, 12 Aug 2010 11:56:57 -0700 Subject: [PATCH 2/2] [IA64] Add latest crop of syscalls Three new syscalls for 2.6.36: prlimit64, fanotify_init and fanotify_mark. Wire up the ia64 syscall table for them. Signed-off-by: Tony Luck --- arch/ia64/include/asm/unistd.h | 5 ++++- arch/ia64/kernel/entry.S | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/ia64/include/asm/unistd.h b/arch/ia64/include/asm/unistd.h index bb8b0fff32b3..637e90f11d85 100644 --- a/arch/ia64/include/asm/unistd.h +++ b/arch/ia64/include/asm/unistd.h @@ -312,11 +312,14 @@ #define __NR_pwritev 1320 #define __NR_rt_tgsigqueueinfo 1321 #define __NR_recvmmsg 1322 +#define __NR_fanotify_init 1323 +#define __NR_fanotify_mark 1324 +#define __NR_prlimit64 1325 #ifdef __KERNEL__ -#define NR_syscalls 299 /* length of syscall table */ +#define NR_syscalls 302 /* length of syscall table */ /* * The following defines stop scripts/checksyscalls.sh from complaining about diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S index 9a260b317d8d..244704a174de 100644 --- a/arch/ia64/kernel/entry.S +++ b/arch/ia64/kernel/entry.S @@ -1768,6 +1768,9 @@ sys_call_table: data8 sys_pwritev // 1320 data8 sys_rt_tgsigqueueinfo data8 sys_recvmmsg + data8 sys_fanotify_init + data8 sys_fanotify_mark + data8 sys_prlimit64 // 1325 .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls #endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */