Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / parisc / lib / bitops.c
index b79452c..90f400b 100644 (file)
 #include <asm/atomic.h>
 
 #ifdef CONFIG_SMP
-spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] = {
-       [0 ... (ATOMIC_HASH_SIZE-1)]  = SPIN_LOCK_UNLOCKED
+raw_spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned = {
+       [0 ... (ATOMIC_HASH_SIZE-1)]  = __RAW_SPIN_LOCK_UNLOCKED
 };
 #endif
 
-spinlock_t __atomic_lock = SPIN_LOCK_UNLOCKED;
-
 #ifdef __LP64__
 unsigned long __xchg64(unsigned long x, unsigned long *ptr)
 {
        unsigned long temp, flags;
 
-       SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
+       _atomic_spin_lock_irqsave(ptr, flags);
        temp = *ptr;
        *ptr = x;
-       SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
+       _atomic_spin_unlock_irqrestore(ptr, flags);
        return temp;
 }
 #endif
@@ -36,26 +34,26 @@ unsigned long __xchg64(unsigned long x, unsigned long *ptr)
 unsigned long __xchg32(int x, int *ptr)
 {
        unsigned long flags;
-       unsigned long temp;
+       long temp;
 
-       SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
-       (long) temp = (long) *ptr;      /* XXX - sign extension wanted? */
+       _atomic_spin_lock_irqsave(ptr, flags);
+       temp = (long) *ptr;     /* XXX - sign extension wanted? */
        *ptr = x;
-       SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
-       return temp;
+       _atomic_spin_unlock_irqrestore(ptr, flags);
+       return (unsigned long)temp;
 }
 
 
 unsigned long __xchg8(char x, char *ptr)
 {
        unsigned long flags;
-       unsigned long temp;
+       long temp;
 
-       SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
-       (long) temp = (long) *ptr;      /* XXX - sign extension wanted? */
+       _atomic_spin_lock_irqsave(ptr, flags);
+       temp = (long) *ptr;     /* XXX - sign extension wanted? */
        *ptr = x;
-       SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
-       return temp;
+       _atomic_spin_unlock_irqrestore(ptr, flags);
+       return (unsigned long)temp;
 }
 
 
@@ -65,10 +63,10 @@ unsigned long __cmpxchg_u64(volatile unsigned long *ptr, unsigned long old, unsi
        unsigned long flags;
        unsigned long prev;
 
-       SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
+       _atomic_spin_lock_irqsave(ptr, flags);
        if ((prev = *ptr) == old)
                *ptr = new;
-       SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
+       _atomic_spin_unlock_irqrestore(ptr, flags);
        return prev;
 }
 #endif
@@ -78,9 +76,9 @@ unsigned long __cmpxchg_u32(volatile unsigned int *ptr, unsigned int old, unsign
        unsigned long flags;
        unsigned int prev;
 
-       SPIN_LOCK_IRQSAVE(ATOMIC_HASH(ptr), flags);
+       _atomic_spin_lock_irqsave(ptr, flags);
        if ((prev = *ptr) == old)
                *ptr = new;
-       SPIN_UNLOCK_IRQRESTORE(ATOMIC_HASH(ptr), flags);
+       _atomic_spin_unlock_irqrestore(ptr, flags);
        return (unsigned long)prev;
 }