patch-2.4.7 linux/include/asm-alpha/softirq.h

Next file: linux/include/asm-arm/arch-ebsa285/io.h
Previous file: linux/include/asm-alpha/rwsem.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.6/linux/include/asm-alpha/softirq.h linux/include/asm-alpha/softirq.h
@@ -8,21 +8,30 @@
 extern inline void cpu_bh_disable(int cpu)
 {
 	local_bh_count(cpu)++;
-	mb();
+	barrier();
 }
 
-extern inline void cpu_bh_enable(int cpu)
+extern inline void __cpu_bh_enable(int cpu)
 {
-	mb();
+	barrier();
 	local_bh_count(cpu)--;
 }
 
-#define local_bh_enable()	cpu_bh_enable(smp_processor_id())
-#define __local_bh_enable	local_bh_enable
+#define __local_bh_enable()	__cpu_bh_enable(smp_processor_id())
 #define local_bh_disable()	cpu_bh_disable(smp_processor_id())
 
+#define local_bh_enable()					\
+do {								\
+	int cpu;						\
+								\
+	barrier();						\
+	cpu = smp_processor_id();				\
+	if (!--local_bh_count(cpu) && softirq_pending(cpu))	\
+		do_softirq();					\
+} while (0)
+
 #define in_softirq() (local_bh_count(smp_processor_id()) != 0)
 
-#define __cpu_raise_softirq(cpu,nr) set_bit((nr), &softirq_pending(cpu))
+#define __cpu_raise_softirq(cpu, nr) set_bit(nr, &softirq_pending(cpu))
 
 #endif /* _ALPHA_SOFTIRQ_H */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)