diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-03-04 18:25:55 +1100 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-04-20 11:03:22 +1000 |
commit | f6e17f9b0bf172a5813dfef0c03d0a25ba83b0de (patch) | |
tree | 8f817a0f6be5012dcf5b00fcb1fd9f9872871cf0 | |
parent | 50fb8ebe7c4ad60d147700d253f78bd1e615a526 (diff) | |
download | linux-3.10-f6e17f9b0bf172a5813dfef0c03d0a25ba83b0de.tar.gz linux-3.10-f6e17f9b0bf172a5813dfef0c03d0a25ba83b0de.tar.bz2 linux-3.10-f6e17f9b0bf172a5813dfef0c03d0a25ba83b0de.zip |
powerpc/xics: Make sure we have a sensible default distribution server
Even when nothing is specified in the device tree, and despite the
fact that we don't setup links properly yet, we still need a reasonable
value in there or some interrupts won't be setup properly to point to
an existing processor.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/sysdev/xics/xics-common.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/powerpc/sysdev/xics/xics-common.c b/arch/powerpc/sysdev/xics/xics-common.c index a2be84de523..e70175dfe32 100644 --- a/arch/powerpc/sysdev/xics/xics-common.c +++ b/arch/powerpc/sysdev/xics/xics-common.c @@ -57,7 +57,9 @@ void xics_update_irq_servers(void) BUG_ON(!np); hcpuid = get_hard_smp_processor_id(boot_cpuid); - xics_default_server = hcpuid; + xics_default_server = xics_default_distrib_server = hcpuid; + + pr_devel("xics: xics_default_server = 0x%x\n", xics_default_server); ireg = of_get_property(np, "ibm,ppc-interrupt-gserver#s", &ilen); if (!ireg) { @@ -75,9 +77,11 @@ void xics_update_irq_servers(void) for (j = 0; j < i; j += 2) { if (ireg[j] == hcpuid) { xics_default_distrib_server = ireg[j+1]; + break; } } - + pr_devel("xics: xics_default_distrib_server = 0x%x\n", + xics_default_distrib_server); of_node_put(np); } @@ -113,7 +117,7 @@ void xics_mask_unknown_vec(unsigned int vec) { struct ics *ics; - pr_err("Interrupt %u (real) is invalid, disabling it.\n", vec); + pr_err("Interrupt 0x%x (real) is invalid, disabling it.\n", vec); list_for_each_entry(ics, &ics_list, link) ics->mask_unknown(ics, vec); @@ -293,6 +297,8 @@ unlock: * If not we set it to the first cpu in the mask, even if multiple cpus * are set. This is so things like irqbalance (which set core and package * wide affinities) do the right thing. + * + * We need to fix this to implement support for the links */ int xics_get_irq_server(unsigned int virq, const struct cpumask *cpumask, unsigned int strict_check) |