//__raise_softirq_irqoff() -- 给__softirq_pending的相应位置位
//给当前处理器的软中断位图 -- irq_stat[cpu].__softirq_pending的相应位置位,
//表示第nr个softirq等待执行(处理)
///usr/src/linux-2.6.23/include/linux/interrupt.h
#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
///usr/src/linux-2.6.23/include/linux/interrupt.h
//给__softirq_pending的相应位置位
#define or_softirq_pending(x) (local_softirq_pending() |= (x))
//给__softirq_pending赋值
#define set_softirq_pending(x) (local_softirq_pending() = (x))
///usr/src/linux-2.6.23/include/linux/irq_cpustat.h
#define local_softirq_pending() \
__IRQ_STAT(smp_processor_id(), __softirq_pending)
///usr/src/linux-2.6.23/include/asm-i386/hardirq.h
#define __IRQ_STAT(cpu, member) (per_cpu(irq_stat, cpu).member)
extern irq_cpustat_t irq_stat[];
typedef struct {
unsigned int __softirq_pending;
unsigned long idle_timestamp;
unsigned int __nmi_count;
unsigned int apic_timer_irqs;
} ____cacheline_aligned irq_cpustat_t;
//给当前处理器的软中断位图 -- irq_stat[cpu].__softirq_pending的相应位置位,
//表示第nr个softirq等待执行(处理)
///usr/src/linux-2.6.23/include/linux/interrupt.h
#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
///usr/src/linux-2.6.23/include/linux/interrupt.h
//给__softirq_pending的相应位置位
#define or_softirq_pending(x) (local_softirq_pending() |= (x))
//给__softirq_pending赋值
#define set_softirq_pending(x) (local_softirq_pending() = (x))
///usr/src/linux-2.6.23/include/linux/irq_cpustat.h
#define local_softirq_pending() \
__IRQ_STAT(smp_processor_id(), __softirq_pending)
///usr/src/linux-2.6.23/include/asm-i386/hardirq.h
#define __IRQ_STAT(cpu, member) (per_cpu(irq_stat, cpu).member)
extern irq_cpustat_t irq_stat[];
typedef struct {
unsigned int __softirq_pending;
unsigned long idle_timestamp;
unsigned int __nmi_count;
unsigned int apic_timer_irqs;
} ____cacheline_aligned irq_cpustat_t;