lkml.org 
[lkml]   [2006]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/25] x86_64 irq: Reenable migrating irqs to other cpus.
    Date
    In the latest changes the code for migrating x86_64 irqs was dropped.
    This reads it in a fashion that will work even if we change the
    vector on level triggered irqs when we migrate them.

    Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
    ---
    arch/x86_64/kernel/io_apic.c | 31 ++++++++++++++++++++++++++++---
    1 files changed, 28 insertions(+), 3 deletions(-)

    diff --git a/arch/x86_64/kernel/io_apic.c b/arch/x86_64/kernel/io_apic.c
    index 2e9f1cf..f50be45 100644
    --- a/arch/x86_64/kernel/io_apic.c
    +++ b/arch/x86_64/kernel/io_apic.c
    @@ -1572,18 +1572,43 @@ static int ioapic_retrigger_vector(unsig
    * races.
    */

    -static void ack_apic(unsigned int vector)
    +static void ack_apic(unsigned int irq)
    {
    ack_APIC_irq();
    }

    +static void ack_apic_edge(unsigned int irq)
    +{
    + move_native_irq(irq);
    + ack_APIC_irq();
    +}
    +
    +static void ack_apic_level(unsigned int irq)
    +{
    + int do_unmask_irq = 0;
    + /* If we are moving the irq we need to mask it */
    + if (unlikely(irq_desc[irq].status & IRQ_MOVE_PENDING)) {
    + do_unmask_irq = 1;
    + mask_IO_APIC_irq(irq);
    + }
    + /* We must acknowledge the irq before we move it
    + * or the acknowledge will not propogate properly.
    + */
    + ack_APIC_irq();
    +
    + /* Now we can move and renable the irq */
    + move_masked_irq(irq);
    + if (unlikely(do_unmask_irq))
    + unmask_IO_APIC_irq(irq);
    +}
    +
    static struct irq_chip ioapic_chip __read_mostly = {
    .name = "IO-APIC",
    .startup = startup_ioapic_vector,
    .mask = mask_ioapic_vector,
    .unmask = unmask_ioapic_vector,
    - .ack = ack_apic,
    - .eoi = ack_apic,
    + .ack = ack_apic_edge,
    + .eoi = ack_apic_level,
    #ifdef CONFIG_SMP
    .set_affinity = set_ioapic_affinity_vector,
    #endif
    --
    1.4.0.gc07e
    -
    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: 2006-06-21 00:39    [W:0.030 / U:147.472 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site