Subversion Repositories Kolibri OS

Rev

Rev 5272 | 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)		\
6082 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)		\
6082 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 */