powerpc/pseries: Add WARN_ON() to request_event_sources_irqs() on irq allocation...
authorMark Nelson <markn@au1.ibm.com>
Wed, 26 May 2010 20:56:04 +0000 (20:56 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Fri, 9 Jul 2010 01:28:32 +0000 (11:28 +1000)
At the moment if request_event_sources_irqs() can't allocate or request
the interrupt, it just does a KERN_ERR printk. This may be fine for the
existing RAS code where if we miss an EPOW event it just means that the
event won't be logged and if we miss one of the RAS errors then we could
miss an event that we perhaps should take action on.

But, for the upcoming IO events code that will use event-sources if we
can't allocate or request the interrupt it means we'd potentially miss
an interrupt from the device. So, let's add a WARN_ON() in this error
case so that we're a bit more vocal when something's amiss.

While we're at it, also use pr_err() to neaten the code up a bit.

Signed-off-by: Mark Nelson <markn@au1.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/platforms/pseries/event_sources.c

index e889c9d..2605c31 100644 (file)
@@ -41,9 +41,12 @@ void request_event_sources_irqs(struct device_node *np,
                        if (count > 15)
                                break;
                        virqs[count] = irq_create_mapping(NULL, *(opicprop++));
-                       if (virqs[count] == NO_IRQ)
-                               printk(KERN_ERR "Unable to allocate interrupt "
-                                      "number for %s\n", np->full_name);
+                       if (virqs[count] == NO_IRQ) {
+                               pr_err("event-sources: Unable to allocate "
+                                      "interrupt number for %s\n",
+                                      np->full_name);
+                               WARN_ON(1);
+                       }
                        else
                                count++;
 
@@ -59,9 +62,12 @@ void request_event_sources_irqs(struct device_node *np,
                        virqs[count] = irq_create_of_mapping(oirq.controller,
                                                            oirq.specifier,
                                                            oirq.size);
-                       if (virqs[count] == NO_IRQ)
-                               printk(KERN_ERR "Unable to allocate interrupt "
-                                      "number for %s\n", np->full_name);
+                       if (virqs[count] == NO_IRQ) {
+                               pr_err("event-sources: Unable to allocate "
+                                      "interrupt number for %s\n",
+                                      np->full_name);
+                               WARN_ON(1);
+                       }
                        else
                                count++;
                }
@@ -70,8 +76,9 @@ void request_event_sources_irqs(struct device_node *np,
        /* Now request them */
        for (i = 0; i < count; i++) {
                if (request_irq(virqs[i], handler, 0, name, NULL)) {
-                       printk(KERN_ERR "Unable to request interrupt %d for "
-                              "%s\n", virqs[i], np->full_name);
+                       pr_err("event-sources: Unable to request interrupt "
+                              "%d for %s\n", virqs[i], np->full_name);
+                       WARN_ON(1);
                        return;
                }
        }