diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-07 15:00:25 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-07 15:00:25 -0500 |
commit | 5bb47b9ff3d16d40f8d45380b373497a545fa280 (patch) | |
tree | e13dd34395473342dc75eff5cbaf5b1ea753631c /arch/blackfin/include/asm/spinlock.h | |
parent | 2f2408a88cf8fa43febfd7fb5783e61b2937b0f9 (diff) | |
parent | 06af15e086e39a5a2a2413973a64af8e10122f28 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6: (171 commits)
Blackfin arch: fix bug - BF527 0.2 silicon has different CPUID (DSPID) value
Blackfin arch: Enlarge flash partition for kenel for bf533/bf537 boards
Blackfin arch: fix bug: kernel crash when enable SDIO host driver
Blackfin arch: Print FP at level KERN_NOTICE
Blackfin arch: drop ad73311 test code
Blackfin arch: update board default configs
Blackfin arch: Set PB4 as the default irq for bf548 board v1.4+.
Blackfin arch: fix typo in early printk bit size processing
Blackfin arch: enable reprogram cclk and sclk for bf518f-ezbrd
Blackfin arch: add SDIO host driver platform data
Blackfin arch: fix bug - kernel stops at initial console
Blackfin arch: fix bug - kernel crash after config IP for ethernet port
Blackfin arch: add sdh support for bf518f-ezbrd
Blackfin arch: fix bug - kernel detects BF532 incorrectly
Blackfin arch: add () to avoid warnings from gcc
Blackfin arch: change HWTRACE Kconfig and set it on default
Blackfin arch: Clean oprofile build path for blackfin
Blackfin arch: remove hardware PM code, oprofile not use it
Blackfin arch: rewrite get_sclk()/get_vco()
Blackfin arch: cleanup and unify the ins functions
...
Diffstat (limited to 'arch/blackfin/include/asm/spinlock.h')
-rw-r--r-- | arch/blackfin/include/asm/spinlock.h | 87 |
1 files changed, 85 insertions, 2 deletions
diff --git a/arch/blackfin/include/asm/spinlock.h b/arch/blackfin/include/asm/spinlock.h index 64e908a50646..0249ac319476 100644 --- a/arch/blackfin/include/asm/spinlock.h +++ b/arch/blackfin/include/asm/spinlock.h | |||
@@ -1,6 +1,89 @@ | |||
1 | #ifndef __BFIN_SPINLOCK_H | 1 | #ifndef __BFIN_SPINLOCK_H |
2 | #define __BFIN_SPINLOCK_H | 2 | #define __BFIN_SPINLOCK_H |
3 | 3 | ||
4 | #error blackfin architecture does not support SMP spin lock yet | 4 | #include <asm/atomic.h> |
5 | 5 | ||
6 | #endif | 6 | asmlinkage int __raw_spin_is_locked_asm(volatile int *ptr); |
7 | asmlinkage void __raw_spin_lock_asm(volatile int *ptr); | ||
8 | asmlinkage int __raw_spin_trylock_asm(volatile int *ptr); | ||
9 | asmlinkage void __raw_spin_unlock_asm(volatile int *ptr); | ||
10 | asmlinkage void __raw_read_lock_asm(volatile int *ptr); | ||
11 | asmlinkage int __raw_read_trylock_asm(volatile int *ptr); | ||
12 | asmlinkage void __raw_read_unlock_asm(volatile int *ptr); | ||
13 | asmlinkage void __raw_write_lock_asm(volatile int *ptr); | ||
14 | asmlinkage int __raw_write_trylock_asm(volatile int *ptr); | ||
15 | asmlinkage void __raw_write_unlock_asm(volatile int *ptr); | ||
16 | |||
17 | static inline int __raw_spin_is_locked(raw_spinlock_t *lock) | ||
18 | { | ||
19 | return __raw_spin_is_locked_asm(&lock->lock); | ||
20 | } | ||
21 | |||
22 | static inline void __raw_spin_lock(raw_spinlock_t *lock) | ||
23 | { | ||
24 | __raw_spin_lock_asm(&lock->lock); | ||
25 | } | ||
26 | |||
27 | #define __raw_spin_lock_flags(lock, flags) __raw_spin_lock(lock) | ||
28 | |||
29 | static inline int __raw_spin_trylock(raw_spinlock_t *lock) | ||
30 | { | ||
31 | return __raw_spin_trylock_asm(&lock->lock); | ||
32 | } | ||
33 | |||
34 | static inline void __raw_spin_unlock(raw_spinlock_t *lock) | ||
35 | { | ||
36 | __raw_spin_unlock_asm(&lock->lock); | ||
37 | } | ||
38 | |||
39 | static inline void __raw_spin_unlock_wait(raw_spinlock_t *lock) | ||
40 | { | ||
41 | while (__raw_spin_is_locked(lock)) | ||
42 | cpu_relax(); | ||
43 | } | ||
44 | |||
45 | static inline int __raw_read_can_lock(raw_rwlock_t *rw) | ||
46 | { | ||
47 | return __raw_uncached_fetch_asm(&rw->lock) > 0; | ||
48 | } | ||
49 | |||
50 | static inline int __raw_write_can_lock(raw_rwlock_t *rw) | ||
51 | { | ||
52 | return __raw_uncached_fetch_asm(&rw->lock) == RW_LOCK_BIAS; | ||
53 | } | ||
54 | |||
55 | static inline void __raw_read_lock(raw_rwlock_t *rw) | ||
56 | { | ||
57 | __raw_read_lock_asm(&rw->lock); | ||
58 | } | ||
59 | |||
60 | static inline int __raw_read_trylock(raw_rwlock_t *rw) | ||
61 | { | ||
62 | return __raw_read_trylock_asm(&rw->lock); | ||
63 | } | ||
64 | |||
65 | static inline void __raw_read_unlock(raw_rwlock_t *rw) | ||
66 | { | ||
67 | __raw_read_unlock_asm(&rw->lock); | ||
68 | } | ||
69 | |||
70 | static inline void __raw_write_lock(raw_rwlock_t *rw) | ||
71 | { | ||
72 | __raw_write_lock_asm(&rw->lock); | ||
73 | } | ||
74 | |||
75 | static inline int __raw_write_trylock(raw_rwlock_t *rw) | ||
76 | { | ||
77 | return __raw_write_trylock_asm(&rw->lock); | ||
78 | } | ||
79 | |||
80 | static inline void __raw_write_unlock(raw_rwlock_t *rw) | ||
81 | { | ||
82 | __raw_write_unlock_asm(&rw->lock); | ||
83 | } | ||
84 | |||
85 | #define _raw_spin_relax(lock) cpu_relax() | ||
86 | #define _raw_read_relax(lock) cpu_relax() | ||
87 | #define _raw_write_relax(lock) cpu_relax() | ||
88 | |||
89 | #endif /* !__BFIN_SPINLOCK_H */ | ||