1 #ifndef __ASM_SOFTIRQ_H
2 #define __ASM_SOFTIRQ_H
4 #include <asm/atomic.h>
5 #include <asm/hardirq.h>
7 #define __cpu_bh_enable(cpu) \
8 do { barrier(); local_bh_count(cpu)--; } while (0)
9 #define cpu_bh_disable(cpu) \
10 do { local_bh_count(cpu)++; barrier(); } while (0)
12 #define local_bh_disable() cpu_bh_disable(smp_processor_id())
13 #define __local_bh_enable() __cpu_bh_enable(smp_processor_id())
15 #define in_softirq() (local_bh_count(smp_processor_id()) != 0)
17 #define local_bh_enable() \
19 unsigned int *ptr = &local_bh_count(smp_processor_id()); \
20 if (!--*ptr && ptr[-2]) \
21 __asm__("bl%? __do_softirq": : : "lr");/* out of line */\
24 #endif /* __ASM_SOFTIRQ_H */