1#ifndef __ASM_SOFTIRQ_H 2#define __ASM_SOFTIRQ_H 3 4#include <asm/atomic.h> 5#include <asm/hardirq.h> 6 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) 11 12#define local_bh_disable() cpu_bh_disable(smp_processor_id()) 13#define __local_bh_enable() __cpu_bh_enable(smp_processor_id()) 14 15#define in_softirq() (local_bh_count(smp_processor_id()) != 0) 16 17#define local_bh_enable() \ 18do { \ 19 unsigned int *ptr = &local_bh_count(smp_processor_id()); \ 20 if (!--*ptr && ptr[-2]) \ 21 __asm__("bl%? __do_softirq": : : "lr");/* out of line */\ 22} while (0) 23 24#endif /* __ASM_SOFTIRQ_H */ 25

