2009-01-23 11:03:31 +09:00
# ifndef _ASM_X86_HARDIRQ_H
# define _ASM_X86_HARDIRQ_H
# include <linux/threads.h>
# include <linux/irq.h>
typedef struct {
unsigned int __softirq_pending ;
unsigned int __nmi_count ; /* arch dependent */
2009-01-23 11:03:32 +09:00
# ifdef CONFIG_X86_LOCAL_APIC
unsigned int apic_timer_irqs ; /* arch dependent */
unsigned int irq_spurious_count ;
2011-12-15 11:32:24 +09:00
unsigned int icr_read_retry_count ;
2009-01-23 11:03:32 +09:00
# endif
2009-10-14 09:22:57 -05:00
unsigned int x86_platform_ipis ; /* arch dependent */
2009-01-23 10:20:15 +01:00
unsigned int apic_perf_irqs ;
2010-10-14 14:01:34 +08:00
unsigned int apic_irq_work_irqs ;
2009-01-23 11:03:32 +09:00
# ifdef CONFIG_SMP
2009-01-23 11:03:31 +09:00
unsigned int irq_resched_count ;
unsigned int irq_call_count ;
2012-09-26 11:11:28 +09:00
/*
* irq_tlb_count is double - counted in irq_call_count , so it must be
* subtracted from irq_call_count when displaying irq_call_count
*/
2009-01-23 11:03:31 +09:00
unsigned int irq_tlb_count ;
2009-01-23 11:03:32 +09:00
# endif
2009-11-20 14:03:05 +00:00
# ifdef CONFIG_X86_THERMAL_VECTOR
2009-01-23 11:03:31 +09:00
unsigned int irq_thermal_count ;
2009-11-20 14:03:05 +00:00
# endif
# ifdef CONFIG_X86_MCE_THRESHOLD
2009-01-23 11:03:31 +09:00
unsigned int irq_threshold_count ;
2009-01-23 11:03:32 +09:00
# endif
2009-01-23 11:03:31 +09:00
} ____cacheline_aligned irq_cpustat_t ;
2009-04-21 23:00:24 +01:00
DECLARE_PER_CPU_SHARED_ALIGNED ( irq_cpustat_t , irq_stat ) ;
2009-01-23 11:03:31 +09:00
/* We can have at most NR_VECTORS irqs routed to a cpu at a time */
# define MAX_HARDIRQS_PER_CPU NR_VECTORS
# define __ARCH_IRQ_STAT
2012-05-11 15:35:27 +08:00
# define inc_irq_stat(member) this_cpu_inc(irq_stat.member)
2009-01-23 11:03:31 +09:00
2012-05-11 15:35:27 +08:00
# define local_softirq_pending() this_cpu_read(irq_stat.__softirq_pending)
2009-01-23 11:03:31 +09:00
# define __ARCH_SET_SOFTIRQ_PENDING
2012-05-11 15:35:27 +08:00
# define set_softirq_pending(x) \
this_cpu_write ( irq_stat . __softirq_pending , ( x ) )
# define or_softirq_pending(x) this_cpu_or(irq_stat.__softirq_pending, (x))
2009-01-23 11:03:31 +09:00
extern void ack_bad_irq ( unsigned int irq ) ;
2008-05-12 15:44:41 +02:00
extern u64 arch_irq_stat_cpu ( unsigned int cpu ) ;
# define arch_irq_stat_cpu arch_irq_stat_cpu
extern u64 arch_irq_stat ( void ) ;
# define arch_irq_stat arch_irq_stat
2009-01-23 11:03:31 +09:00
# endif /* _ASM_X86_HARDIRQ_H */