From baf29c7a7fe74d8ca799c869440f7b7cd5a33b8a Mon Sep 17 00:00:00 2001 From: Samuel Thibault <samuel.thibault@ens-lyon.org> Date: Sat, 4 Aug 2007 21:02:22 +0000 Subject: 2007-08-04 Samuel Thibault <samuel.thibault@ens-lyon.org> * linux/dev/arch/i386/kernel/irq.c: Include <asm/hardirq.h>. (local_bh_count, local_irq_count, global_irq_holder, global_irq_lock) (global_irq_count, check_smp_invalidate, show, wait_on_bh) (wait_on_irq, synchronize_bh, synchronize_irq, get_irqlock) (__global_cli, __global_sti, __global_save_flags) (__global_restore_flags): New variables and functions from Linux 2.2 * linux/src/drivers/net/3c515.c (test_and_set_bit): Remove macro. * linux/src/drivers/net/de4x5.c (test_and_set_bit): Remove macro. * linux/src/drivers/net/eth16i.c (test_and_set_bit): Remove macro. * linux/src/drivers/net/kern_compat.h (test_and_set_bit): Remove macro. * linux/src/drivers/net/pcnet32.c (test_and_set_bit): Remove macro. * linux/src/include/linux/compatmac.h (test_and_set_bit) (test_and_clear_bit): Remove macro. * linux/src/include/asm-i386/atomic.h (atomic_read): New macro. * linux/src/include/asm-i386/bitops.h (test_and_set_bit) (test_and_clear_bit, test_and_change_bit): New inline functions. * linux/src/include/asm-i386/hardirq.h (local_bh_count): New declaration. * linux/src/include/linux/tasks.h (NR_CPUS): Set to NCPUS. (NO_PROC_ID): New macro. --- linux/src/include/asm-i386/atomic.h | 2 ++ linux/src/include/asm-i386/bitops.h | 34 ++++++++++++++++++++++++++++++++++ linux/src/include/asm-i386/hardirq.h | 1 + 3 files changed, 37 insertions(+) (limited to 'linux/src/include/asm-i386') diff --git a/linux/src/include/asm-i386/atomic.h b/linux/src/include/asm-i386/atomic.h index 1b9d99f..7e5dd06 100644 --- a/linux/src/include/asm-i386/atomic.h +++ b/linux/src/include/asm-i386/atomic.h @@ -21,6 +21,8 @@ typedef int atomic_t; +#define atomic_read(v) (*v) + static __inline__ void atomic_add(atomic_t i, atomic_t *v) { __asm__ __volatile__( diff --git a/linux/src/include/asm-i386/bitops.h b/linux/src/include/asm-i386/bitops.h index d3ed1fb..fc4cf19 100644 --- a/linux/src/include/asm-i386/bitops.h +++ b/linux/src/include/asm-i386/bitops.h @@ -61,6 +61,40 @@ extern __inline__ int change_bit(int nr, SMPVOL void * addr) return oldbit; } +extern __inline__ int test_and_set_bit(int nr, volatile void * addr) +{ + int oldbit; + + __asm__ __volatile__( LOCK_PREFIX + "btsl %2,%1\n\tsbbl %0,%0" + :"=r" (oldbit),"=m" (ADDR) + :"Ir" (nr)); + return oldbit; +} + +extern __inline__ int test_and_clear_bit(int nr, volatile void * addr) +{ + int oldbit; + + __asm__ __volatile__( LOCK_PREFIX + "btrl %2,%1\n\tsbbl %0,%0" + :"=r" (oldbit),"=m" (ADDR) + :"Ir" (nr)); + return oldbit; +} + +extern __inline__ int test_and_change_bit(int nr, volatile void * addr) +{ + int oldbit; + + __asm__ __volatile__( LOCK_PREFIX + "btcl %2,%1\n\tsbbl %0,%0" + :"=r" (oldbit),"=m" (ADDR) + :"Ir" (nr)); + return oldbit; +} + + /* * This routine doesn't need to be atomic. */ diff --git a/linux/src/include/asm-i386/hardirq.h b/linux/src/include/asm-i386/hardirq.h index 5339613..10dae41 100644 --- a/linux/src/include/asm-i386/hardirq.h +++ b/linux/src/include/asm-i386/hardirq.h @@ -4,6 +4,7 @@ #include <linux/tasks.h> extern unsigned int local_irq_count[NR_CPUS]; +extern unsigned int local_bh_count[NR_CPUS]; /* * Are we in an interrupt context? Either doing bottom half -- cgit v1.2.3