[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86: Remove io_apic fake-vector style of IRQ acknowledgement. Not
# HG changeset patch # User Keir Fraser <keir@xxxxxxxxxxxxx> # Date 1192789938 -3600 # Node ID bf3514726c1b84c0a284f30a276b8420d700421f # Parent e733e6b73d56e014c5b2eba04564e7ee439c2b59 x86: Remove io_apic fake-vector style of IRQ acknowledgement. Not needed now that pass-through IRQs can use the 'new' ack method. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- xen/arch/x86/io_apic.c | 75 +------------------------------------------------ 1 files changed, 3 insertions(+), 72 deletions(-) diff -r e733e6b73d56 -r bf3514726c1b xen/arch/x86/io_apic.c --- a/xen/arch/x86/io_apic.c Fri Oct 19 11:26:58 2007 +0100 +++ b/xen/arch/x86/io_apic.c Fri Oct 19 11:32:18 2007 +0100 @@ -182,68 +182,6 @@ static void __modify_IO_APIC_irq (unsign break; entry = irq_2_pin + entry->next; } -} - -static int real_vector[MAX_IRQ_SOURCES]; -static int fake_vector=-1; - -/* - * Following 2 functions are used to workaround spurious interrupt - * problem related to mask/unmask of interrupts. Instead we program - * an unused vector in the IOAPIC before issueing EOI to LAPIC. - */ -static void write_fake_IO_APIC_vector (unsigned int irq) -{ - struct irq_pin_list *entry = irq_2_pin + irq; - unsigned int pin, reg; - unsigned long flags; - - spin_lock_irqsave(&ioapic_lock, flags); - for (;;) { - pin = entry->pin; - if (pin == -1) - break; - reg = io_apic_read(entry->apic, 0x10 + pin*2); - real_vector[irq] = reg & 0xff; - reg &= ~0xff; - - if (fake_vector == -1) - fake_vector = assign_irq_vector(MAX_IRQ_SOURCES-1); - - reg |= fake_vector; - io_apic_write(entry->apic, 0x10 + pin*2, reg); - - if (!entry->next) - break; - entry = irq_2_pin + entry->next; - } - spin_unlock_irqrestore(&ioapic_lock, flags); -} - -static void restore_real_IO_APIC_vector (unsigned int irq) -{ - struct irq_pin_list *entry = irq_2_pin + irq; - unsigned int pin, reg; - unsigned long flags; - - spin_lock_irqsave(&ioapic_lock, flags); - for (;;) { - pin = entry->pin; - if (pin == -1) - break; - - reg = io_apic_read(entry->apic, 0x10 + pin*2); - reg &= ~0xff; - reg |= real_vector[irq]; - io_apic_write(entry->apic, 0x10 + pin*2, reg); - mb(); - *(IO_APIC_BASE(entry->apic) + 0x10) = reg & 0xff; - - if (!entry->next) - break; - entry = irq_2_pin + entry->next; - } - spin_unlock_irqrestore(&ioapic_lock, flags); } /* mask = 1 */ @@ -1418,10 +1356,7 @@ static void mask_and_ack_level_ioapic_ir if ( ioapic_ack_new ) return; - if ( vtd_enabled ) - write_fake_IO_APIC_vector(irq); - else - mask_IO_APIC_irq(irq); + mask_IO_APIC_irq(irq); /* * It appears there is an erratum which affects at least version 0x11 @@ -1464,12 +1399,8 @@ static void end_level_ioapic_irq (unsign if ( !ioapic_ack_new ) { - if ( !(irq_desc[IO_APIC_VECTOR(irq)].status & IRQ_DISABLED) ) { - if ( vtd_enabled ) - restore_real_IO_APIC_vector(irq); - else - unmask_IO_APIC_irq(irq); - } + if ( !(irq_desc[IO_APIC_VECTOR(irq)].status & IRQ_DISABLED) ) + unmask_IO_APIC_irq(irq); return; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |