Subversion Repositories Kolibri OS

Rev

Rev 1408 | Rev 5272 | 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
 
3243 Serge 20
typedef struct spinlock {
1408 serge 21
	raw_spinlock_t raw_lock;
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
32
} spinlock_t;
33
 
34
#define SPINLOCK_MAGIC		0xdead4ead
35
 
36
typedef struct {
37
	raw_rwlock_t raw_lock;
38
#ifdef CONFIG_GENERIC_LOCKBREAK
39
	unsigned int break_lock;
40
#endif
41
#ifdef CONFIG_DEBUG_SPINLOCK
42
	unsigned int magic, owner_cpu;
43
	void *owner;
44
#endif
45
#ifdef CONFIG_DEBUG_LOCK_ALLOC
46
	struct lockdep_map dep_map;
47
#endif
48
} rwlock_t;
49
 
50
#define RWLOCK_MAGIC		0xdeaf1eed
51
 
52
#define SPINLOCK_OWNER_INIT	((void *)-1L)
53
 
54
#ifdef CONFIG_DEBUG_LOCK_ALLOC
55
# define SPIN_DEP_MAP_INIT(lockname)	.dep_map = { .name = #lockname }
56
#else
57
# define SPIN_DEP_MAP_INIT(lockname)
58
#endif
59
 
60
#ifdef CONFIG_DEBUG_LOCK_ALLOC
61
# define RW_DEP_MAP_INIT(lockname)	.dep_map = { .name = #lockname }
62
#else
63
# define RW_DEP_MAP_INIT(lockname)
64
#endif
65
 
66
#ifdef CONFIG_DEBUG_SPINLOCK
67
# define __SPIN_LOCK_UNLOCKED(lockname)					\
68
	(spinlock_t)	{	.raw_lock = __RAW_SPIN_LOCK_UNLOCKED,	\
69
				.magic = SPINLOCK_MAGIC,		\
70
				.owner = SPINLOCK_OWNER_INIT,		\
71
				.owner_cpu = -1,			\
72
				SPIN_DEP_MAP_INIT(lockname) }
73
#define __RW_LOCK_UNLOCKED(lockname)					\
74
	(rwlock_t)	{	.raw_lock = __RAW_RW_LOCK_UNLOCKED,	\
75
				.magic = RWLOCK_MAGIC,			\
76
				.owner = SPINLOCK_OWNER_INIT,		\
77
				.owner_cpu = -1,			\
78
				RW_DEP_MAP_INIT(lockname) }
79
#else
80
# define __SPIN_LOCK_UNLOCKED(lockname) \
81
	(spinlock_t)	{	.raw_lock = __RAW_SPIN_LOCK_UNLOCKED,	\
82
				SPIN_DEP_MAP_INIT(lockname) }
83
#define __RW_LOCK_UNLOCKED(lockname) \
84
	(rwlock_t)	{	.raw_lock = __RAW_RW_LOCK_UNLOCKED,	\
85
				RW_DEP_MAP_INIT(lockname) }
86
#endif
87
 
88
/*
89
 * SPIN_LOCK_UNLOCKED and RW_LOCK_UNLOCKED defeat lockdep state tracking and
90
 * are hence deprecated.
91
 * Please use DEFINE_SPINLOCK()/DEFINE_RWLOCK() or
92
 * __SPIN_LOCK_UNLOCKED()/__RW_LOCK_UNLOCKED() as appropriate.
93
 */
94
#define SPIN_LOCK_UNLOCKED	__SPIN_LOCK_UNLOCKED(old_style_spin_init)
95
#define RW_LOCK_UNLOCKED	__RW_LOCK_UNLOCKED(old_style_rw_init)
96
 
97
#define DEFINE_SPINLOCK(x)	spinlock_t x = __SPIN_LOCK_UNLOCKED(x)
98
#define DEFINE_RWLOCK(x)	rwlock_t x = __RW_LOCK_UNLOCKED(x)
99
 
100
#endif /* __LINUX_SPINLOCK_TYPES_H */