diff options
Diffstat (limited to 'arch/i386/kernel/io_apic.c')
-rw-r--r-- | arch/i386/kernel/io_apic.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index afe54f257cb8..ec9ea0269d36 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
@@ -2071,6 +2071,13 @@ static void set_ioapic_affinity_vector (unsigned int vector, | |||
2071 | #endif | 2071 | #endif |
2072 | #endif | 2072 | #endif |
2073 | 2073 | ||
2074 | static int ioapic_retrigger(unsigned int irq) | ||
2075 | { | ||
2076 | send_IPI_self(IO_APIC_VECTOR(irq)); | ||
2077 | |||
2078 | return 1; | ||
2079 | } | ||
2080 | |||
2074 | /* | 2081 | /* |
2075 | * Level and edge triggered IO-APIC interrupts need different handling, | 2082 | * Level and edge triggered IO-APIC interrupts need different handling, |
2076 | * so we use two separate IRQ descriptors. Edge triggered IRQs can be | 2083 | * so we use two separate IRQ descriptors. Edge triggered IRQs can be |
@@ -2090,6 +2097,7 @@ static struct hw_interrupt_type ioapic_edge_type __read_mostly = { | |||
2090 | #ifdef CONFIG_SMP | 2097 | #ifdef CONFIG_SMP |
2091 | .set_affinity = set_ioapic_affinity, | 2098 | .set_affinity = set_ioapic_affinity, |
2092 | #endif | 2099 | #endif |
2100 | .retrigger = ioapic_retrigger, | ||
2093 | }; | 2101 | }; |
2094 | 2102 | ||
2095 | static struct hw_interrupt_type ioapic_level_type __read_mostly = { | 2103 | static struct hw_interrupt_type ioapic_level_type __read_mostly = { |
@@ -2103,6 +2111,7 @@ static struct hw_interrupt_type ioapic_level_type __read_mostly = { | |||
2103 | #ifdef CONFIG_SMP | 2111 | #ifdef CONFIG_SMP |
2104 | .set_affinity = set_ioapic_affinity, | 2112 | .set_affinity = set_ioapic_affinity, |
2105 | #endif | 2113 | #endif |
2114 | .retrigger = ioapic_retrigger, | ||
2106 | }; | 2115 | }; |
2107 | 2116 | ||
2108 | static inline void init_IO_APIC_traps(void) | 2117 | static inline void init_IO_APIC_traps(void) |