Skip to content

Commit

Permalink
x86, irq: Clean up irqdomain transition code
Browse files Browse the repository at this point in the history
Now we have completely switched to irqdomain, so clean up transition code
in IOAPIC drivers.

Signed-off-by: Jiang 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-43-git-send-email-jiang.liu@linux.intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Jiang Liu authored and Thomas Gleixner committed Jun 21, 2014
1 parent 00f49c2 commit b81975e
Showing 1 changed file with 11 additions and 17 deletions.
28 changes: 11 additions & 17 deletions arch/x86/kernel/apic/io_apic.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ static DEFINE_RAW_SPINLOCK(ioapic_lock);
static DEFINE_RAW_SPINLOCK(vector_lock);
static DEFINE_MUTEX(ioapic_mutex);
static unsigned int ioapic_dynirq_base;
static int ioapic_initialized;

struct mp_pin_info {
int trigger;
Expand Down Expand Up @@ -1034,13 +1035,8 @@ static int mp_map_pin_to_irq(u32 gsi, int idx, int ioapic, int pin,
struct irq_domain *domain = mp_ioapic_irqdomain(ioapic);
struct mp_pin_info *info = mp_pin_info(ioapic, pin);

if (!domain) {
/*
* Provide an identity mapping of gsi == irq except on truly
* weird platforms that have non isa irqs in the first 16 gsis.
*/
return gsi >= nr_legacy_irqs() ? gsi : gsi_top + gsi;
}
if (!domain)
return -1;

mutex_lock(&ioapic_mutex);

Expand Down Expand Up @@ -2986,6 +2982,8 @@ void __init setup_IO_APIC(void)
init_IO_APIC_traps();
if (nr_legacy_irqs())
check_timer();

ioapic_initialized = 1;
}

/*
Expand Down Expand Up @@ -3461,12 +3459,11 @@ static int __init io_apic_get_redir_entries(int ioapic)

unsigned int arch_dynirq_lower_bound(unsigned int from)
{
unsigned int min = gsi_top + nr_legacy_irqs();

if (ioapic_dynirq_base)
return ioapic_dynirq_base;

return from < min ? min : from;
/*
* dmar_alloc_hwirq() may be called before setup_IO_APIC(), so use
* gsi_top if ioapic_dynirq_base hasn't been initialized yet.
*/
return ioapic_initialized ? ioapic_dynirq_base : gsi_top;
}

int __init arch_probe_nr_irqs(void)
Expand Down Expand Up @@ -3841,10 +3838,7 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base,
ioapics[idx].mp_config.flags = MPC_APIC_USABLE;
ioapics[idx].mp_config.apicaddr = address;
ioapics[idx].irqdomain = NULL;
if (cfg)
ioapics[idx].irqdomain_cfg = *cfg;
else
ioapics[idx].irqdomain_cfg.type = IOAPIC_DOMAIN_INVALID;
ioapics[idx].irqdomain_cfg = *cfg;

set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);

Expand Down

0 comments on commit b81975e

Please sign in to comment.