]> git.karo-electronics.de Git - linux-beck.git/commitdiff
powerpc/xics: Make sure we have a sensible default distribution server
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 4 Mar 2011 07:25:55 +0000 (18:25 +1100)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 20 Apr 2011 01:03:22 +0000 (11:03 +1000)
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>
arch/powerpc/sysdev/xics/xics-common.c

index a2be84de52370b7910d32613c9d0bb0179aea74c..e70175dfe322fcfa5acb2d9615a8e4ba53c45ae5 100644 (file)
@@ -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)