• Jiang Liu's avatar
    x86, irq: Introduce two helper functions to support irqdomain map operation · 15a3c7cc
    Jiang Liu authored
    Currently there are multiple entries to program IOAPIC pins, such as
    io_apic_setup_irq_pin_once(), io_apic_set_pci_routing() and
    setup_IO_APIC_irq_extra() etc.
    
    This patch introduces two functions to help consolidate the code to
    program IOAPIC pins. Function mp_set_pin_attr() is used to optionally
    set trigger, polarity and NUMA node property for an IOAPIC pin.
    If mp_set_pin_attr() is not invoked for a pin, the default configuration
    from BIOS will be used.
    
    Function mp_irqdomain_map() is an common implementation of irqdomain map()
    operation. It figures out attribures for pin and then actually programs
    the IOAPIC pin. We hope this will be the only entrance for programming
    IOAPIC pin.
    
    And the flow will:
    1) caller such as xxx_pci_irq_enable figures out pin attributes.
    2) Invoke mp_set_pin_attr() to set attributes for a pin. If the pin has
       already bin programmed,  mp_set_pin_attr() will aslo detects attribute
       confictions.
    3) Invoke mp_map_pin_to_irq()
    3.1) If IRQ has already been assigned, return irq_find_mapping()
    3.2) Else irq_create_mapping()
    		->irq_domain_associate()
    			->mp_irqdomain_map()
    				->io_apic_setup_irq_pin()
    
    So every pin will only programmed once by mp_irqdomain_map(), so we
    could kill io_apic_setup_irq_pin_once(), io_apic_set_pci_routing() and
    setup_IO_APIC_irq_extra() etc.
    Signed-off-by: default avatarJiang Liu <jiang.liu@linux.intel.com>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Grant Likely <grant.likely@linaro.org>
    Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Cc: Yinghai Lu <yinghai@kernel.org>
    Link: http://lkml.kernel.org/r/1402302011-23642-30-git-send-email-jiang.liu@linux.intel.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    15a3c7cc
io_apic.c 97.6 KB