From 082248fc7c1f7f1499740649e548b91a69c234b4 Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Thu, 23 Mar 2006 03:00:58 -0800 Subject: [PATCH] --- yaml --- r: 23082 b: refs/heads/master c: ee25e96fcd78837c9f192aa655ce12a88bfd63d4 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/spinlock.c | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 7b7fedce9f00..71a50a9744e9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: eb8782ef72758b8700963ef8b949f5c812e6d630 +refs/heads/master: ee25e96fcd78837c9f192aa655ce12a88bfd63d4 diff --git a/trunk/kernel/spinlock.c b/trunk/kernel/spinlock.c index 0375fcd5921d..d1b810782bc4 100644 --- a/trunk/kernel/spinlock.c +++ b/trunk/kernel/spinlock.c @@ -179,16 +179,16 @@ EXPORT_SYMBOL(_write_lock); #define BUILD_LOCK_OPS(op, locktype) \ void __lockfunc _##op##_lock(locktype##_t *lock) \ { \ - preempt_disable(); \ for (;;) { \ + preempt_disable(); \ 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(); \ - preempt_disable(); \ } \ (lock)->break_lock = 0; \ } \ @@ -199,19 +199,18 @@ unsigned long __lockfunc _##op##_lock_irqsave(locktype##_t *lock) \ { \ unsigned long flags; \ \ - preempt_disable(); \ for (;;) { \ + preempt_disable(); \ local_irq_save(flags); \ if (likely(_raw_##op##_trylock(lock))) \ break; \ local_irq_restore(flags); \ - \ preempt_enable(); \ + \ 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; \