lkml.org 
[lkml]   [2007]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 3/3] genirq: mark io_apic level interrupts to avoid resend
    Level type interrupts do not need to be resent. It was also found that
    some chipsets get confused in case of the resend.

    Mark the ioapic level type interrupts as such to avoid the resend
    functionality in the generic irq code.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

    ---
    arch/i386/kernel/io_apic.c | 7 +++++--
    arch/x86_64/kernel/io_apic.c | 7 +++++--
    2 files changed, 10 insertions(+), 4 deletions(-)

    Index: linux-2.6/arch/i386/kernel/io_apic.c
    ===================================================================
    --- linux-2.6.orig/arch/i386/kernel/io_apic.c 2007-08-11 11:09:11.000000000 +0200
    +++ linux-2.6/arch/i386/kernel/io_apic.c 2007-08-11 11:09:12.000000000 +0200
    @@ -1256,12 +1256,15 @@ static struct irq_chip ioapic_chip;
    static void ioapic_register_intr(int irq, int vector, unsigned long trigger)
    {
    if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
    - trigger == IOAPIC_LEVEL)
    + trigger == IOAPIC_LEVEL) {
    + irq_desc[irq].status |= IRQ_LEVEL;
    set_irq_chip_and_handler_name(irq, &ioapic_chip,
    handle_fasteoi_irq, "fasteoi");
    - else
    + } else {
    + irq_desc[irq].status &= ~IRQ_LEVEL;
    set_irq_chip_and_handler_name(irq, &ioapic_chip,
    handle_edge_irq, "edge");
    + }
    set_intr_gate(vector, interrupt[irq]);
    }

    Index: linux-2.6/arch/x86_64/kernel/io_apic.c
    ===================================================================
    --- linux-2.6.orig/arch/x86_64/kernel/io_apic.c 2007-08-11 11:09:11.000000000 +0200
    +++ linux-2.6/arch/x86_64/kernel/io_apic.c 2007-08-11 11:09:12.000000000 +0200
    @@ -800,12 +800,15 @@ static struct irq_chip ioapic_chip;

    static void ioapic_register_intr(int irq, unsigned long trigger)
    {
    - if (trigger)
    + if (trigger) {
    + irq_desc[irq].status |= IRQ_LEVEL;
    set_irq_chip_and_handler_name(irq, &ioapic_chip,
    handle_fasteoi_irq, "fasteoi");
    - else
    + } else {
    + irq_desc[irq].status &= ~IRQ_LEVEL;
    set_irq_chip_and_handler_name(irq, &ioapic_chip,
    handle_edge_irq, "edge");
    + }
    }

    static void setup_IO_APIC_irq(int apic, int pin, unsigned int irq,
    --

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-08-12 17:49    [W:0.035 / U:0.284 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site