Rev 623 | Rev 1100 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 623 | Rev 625 | ||
|---|---|---|---|
| Line 30... | Line 30... | ||
| 30 | #define __SPINLOCK_H__ |
30 | #define __SPINLOCK_H__ |
| 31 | 31 | ||
| 32 | #include <arch/types.h> |
32 | #include <arch/types.h> |
| 33 | #include <typedefs.h> |
33 | #include <typedefs.h> |
| 34 | #include <preemption.h> |
34 | #include <preemption.h> |
| - | 35 | #include <arch/atomic.h> |
|
| 35 | 36 | ||
| 36 | #ifdef CONFIG_SMP |
37 | #ifdef CONFIG_SMP |
| 37 | struct spinlock { |
38 | struct spinlock { |
| 38 | #ifdef CONFIG_DEBUG_SPINLOCK |
39 | #ifdef CONFIG_DEBUG_SPINLOCK |
| 39 | char *name; |
40 | char *name; |
| 40 | #endif |
41 | #endif |
| 41 | int val; |
42 | atomic_t val; |
| 42 | }; |
43 | }; |
| 43 | 44 | ||
| 44 | /* |
45 | /* |
| 45 | * SPINLOCK_DECLARE is to be used for dynamically allocated spinlocks, |
46 | * SPINLOCK_DECLARE is to be used for dynamically allocated spinlocks, |
| 46 | * where the lock gets initialized in run time. |
47 | * where the lock gets initialized in run time. |
| Line 53... | Line 54... | ||
| 53 | */ |
54 | */ |
| 54 | #ifdef CONFIG_DEBUG_SPINLOCK |
55 | #ifdef CONFIG_DEBUG_SPINLOCK |
| 55 | #define SPINLOCK_INITIALIZE(slname) \ |
56 | #define SPINLOCK_INITIALIZE(slname) \ |
| 56 | spinlock_t slname = { \ |
57 | spinlock_t slname = { \ |
| 57 | .name = #slname, \ |
58 | .name = #slname, \ |
| 58 | .val = 0 \ |
59 | .val = { 0 } \ |
| 59 | } |
60 | } |
| 60 | #else |
61 | #else |
| 61 | #define SPINLOCK_INITIALIZE(slname) \ |
62 | #define SPINLOCK_INITIALIZE(slname) \ |
| 62 | spinlock_t slname = { \ |
63 | spinlock_t slname = { \ |
| 63 | .val = 0 \ |
64 | .val = { 0 } \ |
| 64 | } |
65 | } |
| 65 | #endif |
66 | #endif |
| 66 | 67 | ||
| 67 | extern void spinlock_initialize(spinlock_t *sl, char *name); |
68 | extern void spinlock_initialize(spinlock_t *sl, char *name); |
| 68 | extern void spinlock_lock(spinlock_t *sl); |
69 | extern void spinlock_lock(spinlock_t *sl); |