patch-2.2.4 linux/include/asm-sparc64/softirq.h
Next file: linux/include/asm-sparc64/spinlock.h
Previous file: linux/include/asm-sparc64/smp.h
Back to the patch index
Back to the overall index
- Lines: 42
- Date:
Tue Mar 16 21:52:06 1999
- Orig file:
v2.2.3/linux/include/asm-sparc64/softirq.h
- Orig date:
Sun Nov 8 14:03:10 1998
diff -u --recursive --new-file v2.2.3/linux/include/asm-sparc64/softirq.h linux/include/asm-sparc64/softirq.h
@@ -8,6 +8,7 @@
#include <asm/atomic.h>
#include <asm/hardirq.h>
+#include <asm/system.h> /* for membar() */
#ifndef __SMP__
extern unsigned int local_bh_count;
@@ -36,14 +37,15 @@
extern inline void init_bh(int nr, void (*routine)(void))
{
bh_base[nr] = routine;
- bh_mask_count[nr] = 0;
+ atomic_set(&bh_mask_count[nr], 0);
bh_mask |= 1 << nr;
}
extern inline void remove_bh(int nr)
{
- bh_base[nr] = NULL;
bh_mask &= ~(1 << nr);
+ membar("#StoreStore");
+ bh_base[nr] = NULL;
}
extern inline void mark_bh(int nr)
@@ -116,13 +118,13 @@
extern inline void disable_bh(int nr)
{
bh_mask &= ~(1 << nr);
- bh_mask_count[nr]++;
+ atomic_inc(&bh_mask_count[nr]);
synchronize_bh();
}
extern inline void enable_bh(int nr)
{
- if (!--bh_mask_count[nr])
+ if (atomic_dec_and_test(&bh_mask_count[nr]))
bh_mask |= 1 << nr;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)