Blame view
arch/parisc/lib/bitops.c
1.74 KB
b24413180 License cleanup: ... |
1 |
// SPDX-License-Identifier: GPL-2.0 |
1da177e4c Linux-2.6.12-rc2 |
2 3 4 5 6 7 8 |
/* * bitops.c: atomic operations which got too long to be inlined all over * the place. * * Copyright 1999 Philipp Rumpf (prumpf@tux.org) * Copyright 2000 Grant Grundler (grundler@cup.hp.com) */ |
1da177e4c Linux-2.6.12-rc2 |
9 10 |
#include <linux/kernel.h> #include <linux/spinlock.h> |
60063497a atomic: use <linu... |
11 |
#include <linux/atomic.h> |
1da177e4c Linux-2.6.12-rc2 |
12 13 |
#ifdef CONFIG_SMP |
445c89514 locking: Convert ... |
14 |
arch_spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned = { |
edc35bd72 locking: Rename _... |
15 |
[0 ... (ATOMIC_HASH_SIZE-1)] = __ARCH_SPIN_LOCK_UNLOCKED |
1da177e4c Linux-2.6.12-rc2 |
16 17 |
}; #endif |
a8f44e388 [PARISC] use CONF... |
18 |
#ifdef CONFIG_64BIT |
1da177e4c Linux-2.6.12-rc2 |
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
unsigned long __xchg64(unsigned long x, unsigned long *ptr) { unsigned long temp, flags; _atomic_spin_lock_irqsave(ptr, flags); temp = *ptr; *ptr = x; _atomic_spin_unlock_irqrestore(ptr, flags); return temp; } #endif unsigned long __xchg32(int x, int *ptr) { unsigned long flags; long temp; _atomic_spin_lock_irqsave(ptr, flags); temp = (long) *ptr; /* XXX - sign extension wanted? */ *ptr = x; _atomic_spin_unlock_irqrestore(ptr, flags); return (unsigned long)temp; } unsigned long __xchg8(char x, char *ptr) { unsigned long flags; long temp; _atomic_spin_lock_irqsave(ptr, flags); temp = (long) *ptr; /* XXX - sign extension wanted? */ *ptr = x; _atomic_spin_unlock_irqrestore(ptr, flags); return (unsigned long)temp; } |
54b668009 parisc: Add nativ... |
55 |
u64 __cmpxchg_u64(volatile u64 *ptr, u64 old, u64 new) |
1da177e4c Linux-2.6.12-rc2 |
56 57 |
{ unsigned long flags; |
54b668009 parisc: Add nativ... |
58 |
u64 prev; |
1da177e4c Linux-2.6.12-rc2 |
59 60 61 62 63 64 65 |
_atomic_spin_lock_irqsave(ptr, flags); if ((prev = *ptr) == old) *ptr = new; _atomic_spin_unlock_irqrestore(ptr, flags); return prev; } |
1da177e4c Linux-2.6.12-rc2 |
66 67 68 69 70 71 72 73 74 75 76 77 |
unsigned long __cmpxchg_u32(volatile unsigned int *ptr, unsigned int old, unsigned int new) { unsigned long flags; unsigned int prev; _atomic_spin_lock_irqsave(ptr, flags); if ((prev = *ptr) == old) *ptr = new; _atomic_spin_unlock_irqrestore(ptr, flags); return (unsigned long)prev; } |