vserver 2.0 rc7
[linux-2.6.git] / kernel / spinlock.c
index b8e76ca..0c3f9d8 100644 (file)
@@ -187,6 +187,7 @@ void __lockfunc _##op##_lock(locktype##_t *lock)                    \
                        cpu_relax();                                    \
                preempt_disable();                                      \
        }                                                               \
+       (lock)->break_lock = 0;                                         \
 }                                                                      \
                                                                        \
 EXPORT_SYMBOL(_##op##_lock);                                           \
@@ -209,6 +210,7 @@ unsigned long __lockfunc _##op##_lock_irqsave(locktype##_t *lock)   \
                        cpu_relax();                                    \
                preempt_disable();                                      \
        }                                                               \
+       (lock)->break_lock = 0;                                         \
        return flags;                                                   \
 }                                                                      \
                                                                        \
@@ -292,7 +294,7 @@ EXPORT_SYMBOL(_spin_unlock_irq);
 void __lockfunc _spin_unlock_bh(spinlock_t *lock)
 {
        _raw_spin_unlock(lock);
-       preempt_enable();
+       preempt_enable_no_resched();
        local_bh_enable();
 }
 EXPORT_SYMBOL(_spin_unlock_bh);
@@ -316,7 +318,7 @@ EXPORT_SYMBOL(_read_unlock_irq);
 void __lockfunc _read_unlock_bh(rwlock_t *lock)
 {
        _raw_read_unlock(lock);
-       preempt_enable();
+       preempt_enable_no_resched();
        local_bh_enable();
 }
 EXPORT_SYMBOL(_read_unlock_bh);
@@ -340,7 +342,7 @@ EXPORT_SYMBOL(_write_unlock_irq);
 void __lockfunc _write_unlock_bh(rwlock_t *lock)
 {
        _raw_write_unlock(lock);
-       preempt_enable();
+       preempt_enable_no_resched();
        local_bh_enable();
 }
 EXPORT_SYMBOL(_write_unlock_bh);
@@ -352,7 +354,7 @@ int __lockfunc _spin_trylock_bh(spinlock_t *lock)
        if (_raw_spin_trylock(lock))
                return 1;
 
-       preempt_enable();
+       preempt_enable_no_resched();
        local_bh_enable();
        return 0;
 }