patch-2.1.85 linux/include/asm-alpha/softirq.h
Next file: linux/include/linux/fs.h
Previous file: linux/include/asm-alpha/hardirq.h
Back to the patch index
Back to the overall index
- Lines: 86
- Date:
Mon Feb 2 13:41:06 1998
- Orig file:
v2.1.84/linux/include/asm-alpha/softirq.h
- Orig date:
Fri Jan 30 11:28:09 1998
diff -u --recursive --new-file v2.1.84/linux/include/asm-alpha/softirq.h linux/include/asm-alpha/softirq.h
@@ -5,7 +5,7 @@
* is entirely private to an implementation, it should not be
* referenced at all outside of this file.
*/
-extern atomic_t __alpha_bh_counter;
+extern unsigned int local_bh_count[NR_CPUS];
#define get_active_bhs() (bh_mask & bh_active)
@@ -43,51 +43,49 @@
}
/*
- * These use a mask count to correctly handle
- * nested disable/enable calls
- */
-extern inline void disable_bh(int nr)
-{
- bh_mask &= ~(1 << nr);
- bh_mask_count[nr]++;
-}
-
-extern inline void enable_bh(int nr)
-{
- if (!--bh_mask_count[nr])
- bh_mask |= 1 << nr;
-}
-
-/*
* start_bh_atomic/end_bh_atomic also nest
* naturally by using a counter
*/
extern inline void start_bh_atomic(void)
{
-#ifdef __SMP__
- atomic_inc(&__alpha_bh_counter);
- synchronize_irq();
-#else
- atomic_inc(&__alpha_bh_counter);
-#endif
+ local_bh_count[smp_processor_id()]++;
+ barrier();
}
extern inline void end_bh_atomic(void)
{
- atomic_dec(&__alpha_bh_counter);
+ barrier();
+ local_bh_count[smp_processor_id()]--;
}
#ifndef __SMP__
/* These are for the irq's testing the lock */
-#define softirq_trylock(cpu) (atomic_read(&__alpha_bh_counter) ? \
- 0 : \
- ((atomic_set(&__alpha_bh_counter,1)),1))
-#define softirq_endlock(cpu) (atomic_set(&__alpha_bh_counter, 0))
+#define softirq_trylock(cpu) \
+ (local_bh_count[cpu] ? 0 : (local_bh_count[cpu] = 1))
+#define softirq_endlock(cpu) \
+ (local_bh_count[cpu] = 0)
#else
#error FIXME
#endif /* __SMP__ */
+
+/*
+ * These use a mask count to correctly handle
+ * nested disable/enable calls
+ */
+extern inline void disable_bh(int nr)
+{
+ bh_mask &= ~(1 << nr);
+ bh_mask_count[nr]++;
+}
+
+extern inline void enable_bh(int nr)
+{
+ if (!--bh_mask_count[nr])
+ bh_mask |= 1 << nr;
+}
+
#endif /* _ALPHA_SOFTIRQ_H */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov