From: davej@codemonkey.org.uk Various performance critical sections. The increased cache footprint may be a pessimisation, especially on earlier CPUs where unlikely() doesn't do anything useful, and we fall back to trusting gcc to DTRT. include/asm-i386/mmu_context.h | 4 ++-- include/asm-i386/spinlock.h | 23 +++++++++-------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff -puN include/asm-i386/mmu_context.h~BUG-to_BUG_ON include/asm-i386/mmu_context.h --- 25/include/asm-i386/mmu_context.h~BUG-to_BUG_ON 2003-05-17 14:09:52.000000000 -0700 +++ 25-akpm/include/asm-i386/mmu_context.h 2003-05-17 14:09:52.000000000 -0700 @@ -45,8 +45,8 @@ static inline void switch_mm(struct mm_s #ifdef CONFIG_SMP else { cpu_tlbstate[cpu].state = TLBSTATE_OK; - if (cpu_tlbstate[cpu].active_mm != next) - BUG(); + BUG_ON(cpu_tlbstate[cpu].active_mm != next); + if (!test_and_set_bit(cpu, &next->cpu_vm_mask)) { /* We were in lazy tlb mode and leave_mm disabled * tlb flush IPI delivery. We must reload %cr3. diff -puN include/asm-i386/spinlock.h~BUG-to_BUG_ON include/asm-i386/spinlock.h --- 25/include/asm-i386/spinlock.h~BUG-to_BUG_ON 2003-05-17 14:09:52.000000000 -0700 +++ 25-akpm/include/asm-i386/spinlock.h 2003-05-17 14:09:52.000000000 -0700 @@ -5,6 +5,7 @@ #include #include #include +#include extern int printk(const char * fmt, ...) __attribute__ ((format (printf, 1, 2))); @@ -70,10 +71,8 @@ typedef struct { static inline void _raw_spin_unlock(spinlock_t *lock) { #ifdef CONFIG_DEBUG_SPINLOCK - if (lock->magic != SPINLOCK_MAGIC) - BUG(); - if (!spin_is_locked(lock)) - BUG(); + BUG_ON(lock->magic != SPINLOCK_MAGIC); + BUG_ON(!spin_is_locked(lock)); #endif __asm__ __volatile__( spin_unlock_string @@ -91,10 +90,8 @@ static inline void _raw_spin_unlock(spin { char oldval = 1; #ifdef CONFIG_DEBUG_SPINLOCK - if (lock->magic != SPINLOCK_MAGIC) - BUG(); - if (!spin_is_locked(lock)) - BUG(); + BUG_ON(lock->magic != SPINLOCK_MAGIC); + BUG_ON(!spin_is_locked(lock)); #endif __asm__ __volatile__( spin_unlock_string @@ -118,8 +115,8 @@ static inline void _raw_spin_lock(spinlo #ifdef CONFIG_DEBUG_SPINLOCK __label__ here; here: - if (lock->magic != SPINLOCK_MAGIC) { -printk("eip: %p\n", &&here); + if (unlikely(lock->magic != SPINLOCK_MAGIC)) { + printk("eip: %p\n", &&here); BUG(); } #endif @@ -174,8 +171,7 @@ typedef struct { static inline void _raw_read_lock(rwlock_t *rw) { #ifdef CONFIG_DEBUG_SPINLOCK - if (rw->magic != RWLOCK_MAGIC) - BUG(); + BUG_ON(rw->magic != RWLOCK_MAGIC); #endif __build_read_lock(rw, "__read_lock_failed"); } @@ -183,8 +179,7 @@ static inline void _raw_read_lock(rwlock static inline void _raw_write_lock(rwlock_t *rw) { #ifdef CONFIG_DEBUG_SPINLOCK - if (rw->magic != RWLOCK_MAGIC) - BUG(); + BUG_ON(rw->magic != RWLOCK_MAGIC); #endif __build_write_lock(rw, "__write_lock_failed"); } _