• Suresh Siddha's avatar
    x86, apic: Cleanup cfg->domain setup for legacy interrupts · 29c574c0
    Suresh Siddha authored
    Issues that need to be handled:
    * Handle PIC interrupts on any CPU irrespective of the apic mode
    * In the apic lowest priority logical flat delivery mode, be prepared to
      handle the interrupt on any CPU irrespective of what the IO-APIC RTE says.
    * Because of above, when the IO-APIC starts handling the legacy PIC interrupt,
      use the same vector that is being used by the PIC while programming the
      corresponding IO-APIC RTE.
    
    Start with all the cpu's in the legacy PIC interrupts cfg->domain.
    
    By the time IO-APIC starts taking over the PIC interrupts, apic driver
    model is finalized. So depend on the assign_irq_vector() to update the
    cfg->domain and retain the same vector that was used by PIC before.
    
    For the logical apic flat mode, cfg->domain is updated (during the first
    call to assign_irq_vector()) to contain all the possible online cpu's (0xff).
    Vector used for the legacy PIC interrupt doesn't change when the IO-APIC
    starts handling the interrupt. Any interrupt migration after that
    doesn't change the cfg->domain or the vector used.
    
    For other apic modes like physical mode, cfg->domain is updated
    (during the first call to assign_irq_vector()) to the boot cpu (cpu-0),
    with the same vector that is being used by the PIC. When that interrupt is
    migrated to a different cpu, cfg->domin and the vector assigned will change
    accordingly.
    Tested-by: default avatarBorislav Petkov <bp@alien8.de>
    Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
    Link: http://lkml.kernel.org/r/1353970176.21070.51.camel@sbsiddha-desk.sc.intel.comSigned-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
    29c574c0
io_apic.c 95.2 KB