File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/hardirq.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: #ifndef _ASM_X86_HARDIRQ_H
       2: #define _ASM_X86_HARDIRQ_H
       3: 
       4: #include <linux/threads.h>
       5: #include <linux/irq.h>
       6: 
       7: typedef struct {
       8:     unsigned int __softirq_pending;
       9:     unsigned int __nmi_count;    /* arch dependent */
      10: #ifdef CONFIG_X86_LOCAL_APIC
      11:     unsigned int apic_timer_irqs;    /* arch dependent */
      12:     unsigned int irq_spurious_count;
      13:     unsigned int icr_read_retry_count;
      14: #endif
      15: #ifdef CONFIG_HAVE_KVM
      16:     unsigned int kvm_posted_intr_ipis;
      17: #endif
      18:     unsigned int x86_platform_ipis;    /* arch dependent */
      19:     unsigned int apic_perf_irqs;
      20:     unsigned int apic_irq_work_irqs;
      21: #ifdef CONFIG_SMP
      22:     unsigned int irq_resched_count;
      23:     unsigned int irq_call_count;
      24:     /*
      25:      * irq_tlb_count is double-counted in irq_call_count, so it must be
      26:      * subtracted from irq_call_count when displaying irq_call_count
      27:      */
      28:     unsigned int irq_tlb_count;
      29: #endif
      30: #ifdef CONFIG_X86_THERMAL_VECTOR
      31:     unsigned int irq_thermal_count;
      32: #endif
      33: #ifdef CONFIG_X86_MCE_THRESHOLD
      34:     unsigned int irq_threshold_count;
      35: #endif
      36: } ____cacheline_aligned irq_cpustat_t;
      37: 
      38: DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat);
      39: 
      40: /* We can have at most NR_VECTORS irqs routed to a cpu at a time */
      41: #define MAX_HARDIRQS_PER_CPU NR_VECTORS
      42: 
      43: #define __ARCH_IRQ_STAT
      44: 
      45: #define inc_irq_stat(member)    this_cpu_inc(irq_stat.member)
      46: 
      47: #define local_softirq_pending()    this_cpu_read(irq_stat.__softirq_pending)
      48: 
      49: #define __ARCH_SET_SOFTIRQ_PENDING
      50: 
      51: #define set_softirq_pending(x)    \
      52:         this_cpu_write(irq_stat.__softirq_pending, (x))
      53: #define or_softirq_pending(x)    this_cpu_or(irq_stat.__softirq_pending, (x))
      54: 
      55: extern void ack_bad_irq(unsigned int irq);
      56: 
      57: extern u64 arch_irq_stat_cpu(unsigned int cpu);
      58: #define arch_irq_stat_cpu    arch_irq_stat_cpu
      59: 
      60: extern u64 arch_irq_stat(void);
      61: #define arch_irq_stat        arch_irq_stat
      62: 
      63: #endif /* _ASM_X86_HARDIRQ_H */
      64: