Rev 3243 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1408 | serge | 1 | #ifndef __LINUX_SPINLOCK_TYPES_H |
2 | #define __LINUX_SPINLOCK_TYPES_H |
||
3 | |||
4 | /* |
||
5 | * include/linux/spinlock_types.h - generic spinlock type definitions |
||
6 | * and initializers |
||
7 | * |
||
8 | * portions Copyright 2005, Red Hat, Inc., Ingo Molnar |
||
9 | * Released under the General Public License (GPL). |
||
10 | */ |
||
11 | |||
12 | #if defined(CONFIG_SMP) |
||
13 | # include |
||
14 | #else |
||
15 | # include |
||
16 | #endif |
||
17 | |||
18 | #include |
||
19 | |||
5272 | serge | 20 | typedef struct raw_spinlock { |
21 | arch_spinlock_t raw_lock; |
||
1408 | serge | 22 | #ifdef CONFIG_GENERIC_LOCKBREAK |
23 | unsigned int break_lock; |
||
24 | #endif |
||
25 | #ifdef CONFIG_DEBUG_SPINLOCK |
||
26 | unsigned int magic, owner_cpu; |
||
27 | void *owner; |
||
28 | #endif |
||
29 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
||
30 | struct lockdep_map dep_map; |
||
31 | #endif |
||
5272 | serge | 32 | } raw_spinlock_t; |
1408 | serge | 33 | |
34 | #define SPINLOCK_MAGIC 0xdead4ead |
||
35 | |||
36 | #define SPINLOCK_OWNER_INIT ((void *)-1L) |
||
37 | |||
38 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
||
39 | # define SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname } |
||
40 | #else |
||
41 | # define SPIN_DEP_MAP_INIT(lockname) |
||
42 | #endif |
||
43 | |||
44 | #ifdef CONFIG_DEBUG_SPINLOCK |
||
5272 | serge | 45 | # define SPIN_DEBUG_INIT(lockname) \ |
1408 | serge | 46 | .magic = SPINLOCK_MAGIC, \ |
47 | .owner_cpu = -1, \ |
||
5272 | serge | 48 | .owner = SPINLOCK_OWNER_INIT, |
1408 | serge | 49 | #else |
5272 | serge | 50 | # define SPIN_DEBUG_INIT(lockname) |
51 | #endif |
||
52 | |||
53 | #define __RAW_SPIN_LOCK_INITIALIZER(lockname) \ |
||
54 | { \ |
||
55 | .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \ |
||
56 | SPIN_DEBUG_INIT(lockname) \ |
||
1408 | serge | 57 | SPIN_DEP_MAP_INIT(lockname) } |
5272 | serge | 58 | |
59 | #define __RAW_SPIN_LOCK_UNLOCKED(lockname) \ |
||
60 | (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname) |
||
61 | |||
62 | #define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x) |
||
63 | |||
64 | typedef struct spinlock { |
||
65 | union { |
||
66 | struct raw_spinlock rlock; |
||
67 | |||
68 | #ifdef CONFIG_DEBUG_LOCK_ALLOC |
||
69 | # define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map)) |
||
70 | struct { |
||
71 | u8 __padding[LOCK_PADSIZE]; |
||
72 | struct lockdep_map dep_map; |
||
73 | }; |
||
1408 | serge | 74 | #endif |
5272 | serge | 75 | }; |
76 | } spinlock_t; |
||
1408 | serge | 77 | |
5272 | serge | 78 | #define __SPIN_LOCK_INITIALIZER(lockname) \ |
79 | { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } } |
||
1408 | serge | 80 | |
5272 | serge | 81 | #define __SPIN_LOCK_UNLOCKED(lockname) \ |
82 | (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname) |
||
83 | |||
1408 | serge | 84 | #define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) |
85 | |||
5272 | serge | 86 | #include |
87 | |||
1408 | serge | 88 | #endif /* __LINUX_SPINLOCK_TYPES_H */ |