aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86_64/kernel/io_apic.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86_64/kernel/io_apic.c')
-rw-r--r--arch/x86_64/kernel/io_apic.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c
index 88a8736eb8ce..401b687fef21 100644
--- a/arch/x86_64/kernel/io_apic.c
+++ b/arch/x86_64/kernel/io_apic.c
@@ -1618,6 +1618,13 @@ static void set_ioapic_affinity_vector (unsigned int vector,
1618#endif // CONFIG_SMP 1618#endif // CONFIG_SMP
1619#endif // CONFIG_PCI_MSI 1619#endif // CONFIG_PCI_MSI
1620 1620
1621static int ioapic_retrigger(unsigned int irq)
1622{
1623 send_IPI_self(IO_APIC_VECTOR(irq));
1624
1625 return 1;
1626}
1627
1621/* 1628/*
1622 * Level and edge triggered IO-APIC interrupts need different handling, 1629 * Level and edge triggered IO-APIC interrupts need different handling,
1623 * so we use two separate IRQ descriptors. Edge triggered IRQs can be 1630 * so we use two separate IRQ descriptors. Edge triggered IRQs can be
@@ -1638,6 +1645,7 @@ static struct hw_interrupt_type ioapic_edge_type __read_mostly = {
1638#ifdef CONFIG_SMP 1645#ifdef CONFIG_SMP
1639 .set_affinity = set_ioapic_affinity, 1646 .set_affinity = set_ioapic_affinity,
1640#endif 1647#endif
1648 .retrigger = ioapic_retrigger,
1641}; 1649};
1642 1650
1643static struct hw_interrupt_type ioapic_level_type __read_mostly = { 1651static struct hw_interrupt_type ioapic_level_type __read_mostly = {
@@ -1651,6 +1659,7 @@ static struct hw_interrupt_type ioapic_level_type __read_mostly = {
1651#ifdef CONFIG_SMP 1659#ifdef CONFIG_SMP
1652 .set_affinity = set_ioapic_affinity, 1660 .set_affinity = set_ioapic_affinity,
1653#endif 1661#endif
1662 .retrigger = ioapic_retrigger,
1654}; 1663};
1655 1664
1656static inline void init_IO_APIC_traps(void) 1665static inline void init_IO_APIC_traps(void)