#ifndef __ASM_HARDIRQ_H #define __ASM_HARDIRQ_H #include #include #include #define NR_IPI 5 typedef struct { unsigned int __softirq_pending; #ifdef CONFIG_LOCAL_TIMERS unsigned int local_timer_irqs; #endif #ifdef CONFIG_SMP unsigned int ipi_irqs[NR_IPI]; #endif } ____cacheline_aligned irq_cpustat_t; #include /* Standard mappings for irq_cpustat_t above */ #define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++ #define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member) #ifdef CONFIG_SMP u64 smp_irq_stat_cpu(unsigned int cpu); #else #define smp_irq_stat_cpu(cpu) 0 #endif #define arch_irq_stat_cpu smp_irq_stat_cpu #if NR_IRQS > 512 #define HARDIRQ_BITS 10 #elif NR_IRQS > 256 #define HARDIRQ_BITS 9 #else #define HARDIRQ_BITS 8 #endif /* * The hardirq mask has to be large enough to have space * for potentially all IRQ sources in the system nesting * on a single CPU: */ #if (1 << HARDIRQ_BITS) < NR_IRQS # error HARDIRQ_BITS is too low! #endif #define __ARCH_IRQ_EXIT_IRQS_DISABLED 1 #endif /* __ASM_HARDIRQ_H */