Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sh/include/asm/cmpxchg-irq.h
26493 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#ifndef __ASM_SH_CMPXCHG_IRQ_H
3
#define __ASM_SH_CMPXCHG_IRQ_H
4
5
#include <linux/irqflags.h>
6
7
static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
8
{
9
unsigned long flags, retval;
10
11
local_irq_save(flags);
12
retval = *m;
13
*m = val;
14
local_irq_restore(flags);
15
return retval;
16
}
17
18
static inline unsigned long xchg_u16(volatile u16 *m, unsigned long val)
19
{
20
unsigned long flags, retval;
21
22
local_irq_save(flags);
23
retval = *m;
24
*m = val;
25
local_irq_restore(flags);
26
return retval;
27
}
28
29
static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)
30
{
31
unsigned long flags, retval;
32
33
local_irq_save(flags);
34
retval = *m;
35
*m = val & 0xff;
36
local_irq_restore(flags);
37
return retval;
38
}
39
40
static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,
41
unsigned long new)
42
{
43
__u32 retval;
44
unsigned long flags;
45
46
local_irq_save(flags);
47
retval = *m;
48
if (retval == old)
49
*m = new;
50
local_irq_restore(flags); /* implies memory barrier */
51
return retval;
52
}
53
54
#endif /* __ASM_SH_CMPXCHG_IRQ_H */
55
56