+++ /dev/null
-Subject: Update default_server during migrate_irqs_away
-From: Milton Miller <miltonm@bga.com>
-References: 460566 - LTC50723
-
-Currently, every time we determine which irq server to use, we check if
-default_server, which is the id of the bootcpu, is still online. But
-default_server is a hardware cpu, not the logical cpu id needed to index
-cpu_online_map.
-
-Since the default server can only go offline during a cpu hotplug event,
-explicitly check the default server and choose the new one when we move
-irqs away from the cpu being offlined.
-
-This has the added benefit of only needing the boot_cpuid to be updated
-and not relying on the cpu being marked offline during migrate_irqs_away.
-
-Also, since xics_update_irq_servers only reads device tree information, we
-can call it before xics_init_host in xics_init_IRQ and then default_server
-will always be valid when we can reach get_irq_server via the host ops.
-
-Signed-off-by: Milton Miller <miltonm@bga.com>
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Signed-off-by: Olaf Hering <olh@suse.de>
----
- arch/powerpc/platforms/pseries/xics.c | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
---- a/arch/powerpc/platforms/pseries/xics.c
-+++ b/arch/powerpc/platforms/pseries/xics.c
-@@ -208,9 +208,6 @@ static int get_irq_server(unsigned int v
- cpumask_t cpumask = irq_desc[virq].affinity;
- cpumask_t tmp = CPU_MASK_NONE;
-
-- if (! cpu_isset(default_server, cpu_online_map))
-- xics_update_irq_servers();
--
- if (!distribute_irqs)
- return default_server;
-
-@@ -659,8 +656,8 @@ void __init xics_init_IRQ(void)
- if (found == 0)
- return;
-
-- xics_init_host();
- xics_update_irq_servers();
-+ xics_init_host();
-
- if (firmware_has_feature(FW_FEATURE_LPAR))
- ppc_md.get_irq = xics_get_irq_lpar;
-@@ -753,6 +750,10 @@ void xics_migrate_irqs_away(void)
- int cpu = smp_processor_id(), hw_cpu = hard_smp_processor_id();
- unsigned int irq, virq;
-
-+ /* If we used to be the default server, move to the new "boot_cpuid" */
-+ if (hw_cpu == default_server)
-+ xics_update_irq_servers();
-+
- /* Reject any interrupt that was queued to us... */
- xics_set_cpu_priority(0);
-