git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git]
/
kernel
/
spinlock.c
diff --git
a/kernel/spinlock.c
b/kernel/spinlock.c
index
d1b8107
..
0375fcd
100644
(file)
--- a/
kernel/spinlock.c
+++ b/
kernel/spinlock.c
@@
-179,16
+179,16
@@
EXPORT_SYMBOL(_write_lock);
#define BUILD_LOCK_OPS(op, locktype) \
void __lockfunc _##op##_lock(locktype##_t *lock) \
{ \
#define BUILD_LOCK_OPS(op, locktype) \
void __lockfunc _##op##_lock(locktype##_t *lock) \
{ \
+ preempt_disable(); \
for (;;) { \
for (;;) { \
- preempt_disable(); \
if (likely(_raw_##op##_trylock(lock))) \
break; \
preempt_enable(); \
if (likely(_raw_##op##_trylock(lock))) \
break; \
preempt_enable(); \
- \
if (!(lock)->break_lock) \
(lock)->break_lock = 1; \
while (!op##_can_lock(lock) && (lock)->break_lock) \
cpu_relax(); \
if (!(lock)->break_lock) \
(lock)->break_lock = 1; \
while (!op##_can_lock(lock) && (lock)->break_lock) \
cpu_relax(); \
+ preempt_disable(); \
} \
(lock)->break_lock = 0; \
} \
} \
(lock)->break_lock = 0; \
} \
@@
-199,18
+199,19
@@
unsigned long __lockfunc _##op##_lock_irqsave(locktype##_t *lock) \
{ \
unsigned long flags; \
\
{ \
unsigned long flags; \
\
+ preempt_disable(); \
for (;;) { \
for (;;) { \
- preempt_disable(); \
local_irq_save(flags); \
if (likely(_raw_##op##_trylock(lock))) \
break; \
local_irq_restore(flags); \
local_irq_save(flags); \
if (likely(_raw_##op##_trylock(lock))) \
break; \
local_irq_restore(flags); \
- preempt_enable(); \
\
\
+ preempt_enable(); \
if (!(lock)->break_lock) \
(lock)->break_lock = 1; \
while (!op##_can_lock(lock) && (lock)->break_lock) \
cpu_relax(); \
if (!(lock)->break_lock) \
(lock)->break_lock = 1; \
while (!op##_can_lock(lock) && (lock)->break_lock) \
cpu_relax(); \
+ preempt_disable(); \
} \
(lock)->break_lock = 0; \
return flags; \
} \
(lock)->break_lock = 0; \
return flags; \