|
1 #ifndef _ASM_X86_HARDIRQ_64_H |
|
2 #define _ASM_X86_HARDIRQ_64_H |
|
3 /* For CONFIG_NSC, just ignore this stuff... Fall back... */ |
|
4 #ifndef CONFIG_NSC |
|
5 #include <linux/threads.h> |
|
6 #include <linux/irq.h> |
|
7 #include <asm/pda.h> |
|
8 #include <asm/apic.h> |
|
9 |
|
10 /* We can have at most NR_VECTORS irqs routed to a cpu at a time */ |
|
11 #define MAX_HARDIRQS_PER_CPU NR_VECTORS |
|
12 |
|
13 #define __ARCH_IRQ_STAT 1 |
|
14 |
|
15 #define local_softirq_pending() read_pda(__softirq_pending) |
|
16 |
|
17 #define __ARCH_SET_SOFTIRQ_PENDING 1 |
|
18 |
|
19 #define set_softirq_pending(x) write_pda(__softirq_pending, (x)) |
|
20 #define or_softirq_pending(x) or_pda(__softirq_pending, (x)) |
|
21 |
|
22 extern void ack_bad_irq(unsigned int irq); |
|
23 #else // NSC |
|
24 |
|
25 #include <linux/threads.h> |
|
26 #include <linux/irq.h> |
|
27 |
|
28 typedef struct { |
|
29 unsigned int __softirq_pending; |
|
30 unsigned long idle_timestamp; |
|
31 unsigned int __nmi_count; /* arch dependent */ |
|
32 unsigned int apic_timer_irqs; /* arch dependent */ |
|
33 } ____cacheline_aligned irq_cpustat_t; |
|
34 |
|
35 DECLARE_PER_CPU(irq_cpustat_t, irq_stat); |
|
36 extern irq_cpustat_t irq_stat[]; |
|
37 |
|
38 #define __ARCH_IRQ_STAT |
|
39 #define __IRQ_STAT(cpu, member) (per_cpu(irq_stat, cpu).member) |
|
40 |
|
41 #include <linux/irq_cpustat.h> |
|
42 |
|
43 #endif // CONFIG_NSC |
|
44 #endif /* _ASM_X86_HARDIRQ_64_H */ |