Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sparc/include/asm/atomic_32.h
26481 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/* atomic.h: These still suck, but the I-cache hit rate is higher.
3
*
4
* Copyright (C) 1996 David S. Miller ([email protected])
5
* Copyright (C) 2000 Anton Blanchard ([email protected])
6
* Copyright (C) 2007 Kyle McMartin ([email protected])
7
*
8
* Additions by Keith M Wesolowski ([email protected]) based
9
* on asm-parisc/atomic.h Copyright (C) 2000 Philipp Rumpf <[email protected]>.
10
*/
11
12
#ifndef __ARCH_SPARC_ATOMIC__
13
#define __ARCH_SPARC_ATOMIC__
14
15
#include <linux/types.h>
16
17
#include <asm/cmpxchg.h>
18
#include <asm/barrier.h>
19
#include <asm-generic/atomic64.h>
20
21
int arch_atomic_add_return(int, atomic_t *);
22
#define arch_atomic_add_return arch_atomic_add_return
23
24
int arch_atomic_fetch_add(int, atomic_t *);
25
#define arch_atomic_fetch_add arch_atomic_fetch_add
26
27
int arch_atomic_fetch_and(int, atomic_t *);
28
#define arch_atomic_fetch_and arch_atomic_fetch_and
29
30
int arch_atomic_fetch_or(int, atomic_t *);
31
#define arch_atomic_fetch_or arch_atomic_fetch_or
32
33
int arch_atomic_fetch_xor(int, atomic_t *);
34
#define arch_atomic_fetch_xor arch_atomic_fetch_xor
35
36
int arch_atomic_cmpxchg(atomic_t *, int, int);
37
#define arch_atomic_cmpxchg arch_atomic_cmpxchg
38
39
int arch_atomic_xchg(atomic_t *, int);
40
#define arch_atomic_xchg arch_atomic_xchg
41
42
int arch_atomic_fetch_add_unless(atomic_t *, int, int);
43
#define arch_atomic_fetch_add_unless arch_atomic_fetch_add_unless
44
45
void arch_atomic_set(atomic_t *, int);
46
47
#define arch_atomic_set_release(v, i) arch_atomic_set((v), (i))
48
49
#define arch_atomic_read(v) READ_ONCE((v)->counter)
50
51
#define arch_atomic_add(i, v) ((void)arch_atomic_add_return( (int)(i), (v)))
52
#define arch_atomic_sub(i, v) ((void)arch_atomic_add_return(-(int)(i), (v)))
53
54
#define arch_atomic_and(i, v) ((void)arch_atomic_fetch_and((i), (v)))
55
#define arch_atomic_or(i, v) ((void)arch_atomic_fetch_or((i), (v)))
56
#define arch_atomic_xor(i, v) ((void)arch_atomic_fetch_xor((i), (v)))
57
58
#define arch_atomic_sub_return(i, v) (arch_atomic_add_return(-(int)(i), (v)))
59
#define arch_atomic_fetch_sub(i, v) (arch_atomic_fetch_add (-(int)(i), (v)))
60
61
#endif /* !(__ARCH_SPARC_ATOMIC__) */
62
63