From: Yinghai Lu <ying...@kernel.org>

Split alloc_ioapic_save_registers() from early_irq_init(),
so it will be used per ioapic.

Will call that later for hot-added ioapic controller.

Signed-off-by: Yinghai Lu <ying...@kernel.org>
Signed-off-by: Jiang Liu <jiang....@linux.intel.com>
Cc: Joerg Roedel <j...@8bytes.org>
Cc: Konrad Rzeszutek Wilk <konrad.w...@oracle.com>
Cc: Sebastian Andrzej Siewior <sebast...@breakpoint.cc>
---
 arch/x86/kernel/apic/io_apic.c |   22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 26490336ef6f..e97ec28f5269 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -237,6 +237,19 @@ static struct irq_pin_list *alloc_irq_pin_list(int node)
        return kzalloc_node(sizeof(struct irq_pin_list), GFP_KERNEL, node);
 }
 
+static void alloc_ioapic_saved_registers(int idx)
+{
+       size_t size;
+
+       if (ioapics[idx].saved_registers)
+               return;
+
+       size = sizeof(struct IO_APIC_route_entry) * ioapics[idx].nr_registers;
+       ioapics[idx].saved_registers = kzalloc(size, GFP_KERNEL);
+       if (!ioapics[idx].saved_registers)
+               pr_err("IOAPIC %d: suspend/resume impossible!\n", idx);
+}
+
 int __init arch_early_irq_init(void)
 {
        struct irq_cfg *cfg;
@@ -245,13 +258,8 @@ int __init arch_early_irq_init(void)
        if (!nr_legacy_irqs())
                io_apic_irqs = ~0UL;
 
-       for_each_ioapic(i) {
-               ioapics[i].saved_registers =
-                       kzalloc(sizeof(struct IO_APIC_route_entry) *
-                               ioapics[i].nr_registers, GFP_KERNEL);
-               if (!ioapics[i].saved_registers)
-                       pr_err("IOAPIC %d: suspend/resume impossible!\n", i);
-       }
+       for_each_ioapic(i)
+               alloc_ioapic_saved_registers(i);
 
        /*
         * For legacy IRQ's, start with assigning irq0 to irq15 to
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to