.. | .. |
---|
9 | 9 | * Released under the General Public License (GPL). |
---|
10 | 10 | */ |
---|
11 | 11 | |
---|
12 | | -#if defined(CONFIG_SMP) |
---|
13 | | -# include <asm/spinlock_types.h> |
---|
| 12 | +#include <linux/spinlock_types_raw.h> |
---|
| 13 | + |
---|
| 14 | +#ifndef CONFIG_PREEMPT_RT_FULL |
---|
| 15 | +# include <linux/spinlock_types_nort.h> |
---|
| 16 | +# include <linux/rwlock_types.h> |
---|
14 | 17 | #else |
---|
15 | | -# include <linux/spinlock_types_up.h> |
---|
| 18 | +# include <linux/rtmutex.h> |
---|
| 19 | +# include <linux/spinlock_types_rt.h> |
---|
| 20 | +# include <linux/rwlock_types_rt.h> |
---|
16 | 21 | #endif |
---|
17 | | - |
---|
18 | | -#include <linux/lockdep.h> |
---|
19 | | - |
---|
20 | | -typedef struct raw_spinlock { |
---|
21 | | - arch_spinlock_t raw_lock; |
---|
22 | | -#ifdef CONFIG_DEBUG_SPINLOCK |
---|
23 | | - unsigned int magic, owner_cpu; |
---|
24 | | - void *owner; |
---|
25 | | -#endif |
---|
26 | | -#ifdef CONFIG_DEBUG_LOCK_ALLOC |
---|
27 | | - struct lockdep_map dep_map; |
---|
28 | | -#endif |
---|
29 | | -} raw_spinlock_t; |
---|
30 | | - |
---|
31 | | -#define SPINLOCK_MAGIC 0xdead4ead |
---|
32 | | - |
---|
33 | | -#define SPINLOCK_OWNER_INIT ((void *)-1L) |
---|
34 | | - |
---|
35 | | -#ifdef CONFIG_DEBUG_LOCK_ALLOC |
---|
36 | | -# define SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname } |
---|
37 | | -#else |
---|
38 | | -# define SPIN_DEP_MAP_INIT(lockname) |
---|
39 | | -#endif |
---|
40 | | - |
---|
41 | | -#ifdef CONFIG_DEBUG_SPINLOCK |
---|
42 | | -# define SPIN_DEBUG_INIT(lockname) \ |
---|
43 | | - .magic = SPINLOCK_MAGIC, \ |
---|
44 | | - .owner_cpu = -1, \ |
---|
45 | | - .owner = SPINLOCK_OWNER_INIT, |
---|
46 | | -#else |
---|
47 | | -# define SPIN_DEBUG_INIT(lockname) |
---|
48 | | -#endif |
---|
49 | | - |
---|
50 | | -#define __RAW_SPIN_LOCK_INITIALIZER(lockname) \ |
---|
51 | | - { \ |
---|
52 | | - .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \ |
---|
53 | | - SPIN_DEBUG_INIT(lockname) \ |
---|
54 | | - SPIN_DEP_MAP_INIT(lockname) } |
---|
55 | | - |
---|
56 | | -#define __RAW_SPIN_LOCK_UNLOCKED(lockname) \ |
---|
57 | | - (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname) |
---|
58 | | - |
---|
59 | | -#define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x) |
---|
60 | | - |
---|
61 | | -typedef struct spinlock { |
---|
62 | | - union { |
---|
63 | | - struct raw_spinlock rlock; |
---|
64 | | - |
---|
65 | | -#ifdef CONFIG_DEBUG_LOCK_ALLOC |
---|
66 | | -# define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map)) |
---|
67 | | - struct { |
---|
68 | | - u8 __padding[LOCK_PADSIZE]; |
---|
69 | | - struct lockdep_map dep_map; |
---|
70 | | - }; |
---|
71 | | -#endif |
---|
72 | | - }; |
---|
73 | | -} spinlock_t; |
---|
74 | | - |
---|
75 | | -#define __SPIN_LOCK_INITIALIZER(lockname) \ |
---|
76 | | - { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } } |
---|
77 | | - |
---|
78 | | -#define __SPIN_LOCK_UNLOCKED(lockname) \ |
---|
79 | | - (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname) |
---|
80 | | - |
---|
81 | | -#define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) |
---|
82 | | - |
---|
83 | | -#include <linux/rwlock_types.h> |
---|
84 | 22 | |
---|
85 | 23 | #endif /* __LINUX_SPINLOCK_TYPES_H */ |
---|