]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef __ASM_HARDIRQ_H |
2 | #define __ASM_HARDIRQ_H | |
3 | ||
4 | #include <linux/config.h> | |
5 | #include <linux/threads.h> | |
6 | #include <linux/irq.h> | |
7 | #include <asm/pda.h> | |
8 | #include <asm/apic.h> | |
9 | ||
10 | #define __ARCH_IRQ_STAT 1 | |
11 | ||
12 | /* Generate a lvalue for a pda member. Should fix softirq.c instead to use | |
13 | special access macros. This would generate better code. */ | |
14 | #define __IRQ_STAT(cpu,member) (read_pda(me)->member) | |
15 | ||
16 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ | |
17 | ||
18 | /* | |
19 | * 'what should we do if we get a hw irq event on an illegal vector'. | |
20 | * each architecture has to answer this themselves. | |
21 | */ | |
22 | static inline void ack_bad_irq(unsigned int irq) | |
23 | { | |
24 | printk("unexpected IRQ trap at vector %02x\n", irq); | |
25 | #ifdef CONFIG_X86_LOCAL_APIC | |
26 | /* | |
27 | * Currently unexpected vectors happen only on SMP and APIC. | |
28 | * We _must_ ack these because every local APIC has only N | |
29 | * irq slots per priority level, and a 'hanging, unacked' IRQ | |
30 | * holds up an irq slot - in excessive cases (when multiple | |
31 | * unexpected vectors occur) that might lock up the APIC | |
32 | * completely. | |
33 | */ | |
34 | ack_APIC_irq(); | |
35 | #endif | |
36 | } | |
37 | #endif /* __ASM_HARDIRQ_H */ |