• Suresh Siddha's avatar
    x64, x2apic/intr-remap: IO-APIC support for interrupt-remapping · 89027d35
    Suresh Siddha authored
    IO-APIC support in the presence of interrupt-remapping infrastructure.
    
    IO-APIC RTE will be programmed with interrupt-remapping table entry(IRTE)
    index and the IRTE will contain information about the vector, cpu destination,
    trigger mode etc, which traditionally was present in the IO-APIC RTE.
    
    Introduce a new irq_chip for cleaner irq migration (in the process
    context as opposed to the current irq migration in the context of an interrupt.
    interrupt-remapping infrastructure will help us achieve this cleanly).
    
    For edge triggered, irq migration is a simple atomic update(of vector
    and cpu destination) of IRTE and flush the hardware cache.
    
    For level triggered, we need to modify the io-apic RTE aswell with the update
    vector information, along with modifying IRTE with vector and cpu destination.
    So irq migration for level triggered is little  bit more complex compared to
    edge triggered migration. But the good news is, we use the same algorithm
    for level triggered migration as we have today, only difference being,
    we now initiate the irq migration from process context instead of the
    interrupt context.
    
    In future, when we do a directed EOI (combined with cpu EOI broadcast
    suppression) to the IO-APIC, level triggered irq migration will also be
    as simple as edge triggered migration and we can do the irq migration
    with a simple atomic update to IO-APIC RTE.
    
    TBD: some tests/changes needed in the presence of fixup_irqs() for
    level triggered irq migration.
    Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
    Cc: akpm@linux-foundation.org
    Cc: arjan@linux.intel.com
    Cc: andi@firstfloor.org
    Cc: ebiederm@xmission.com
    Cc: jbarnes@virtuousgeek.org
    Cc: steiner@sgi.com
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    89027d35
irq_remapping.h 141 Bytes