]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
irqdomain: Improve diagnostics when a domain mapping fails
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 20 Jul 2012 09:33:19 +0000 (10:33 +0100)
committerGrant Likely <grant.likely@secretlab.ca>
Wed, 25 Jul 2012 04:37:30 +0000 (22:37 -0600)
When the map operation fails log the error code we get and add a WARN_ON()
so we get a backtrace (which should help work out which interrupt is the
source of the issue).

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
kernel/irq/irqdomain.c

index 170724a07a2ca35d5ac298bd00cbb7fe51b14e29..49a77727db42603e8e0ac963416d0f6b57823636 100644 (file)
@@ -415,7 +415,7 @@ int irq_domain_associate_many(struct irq_domain *domain, unsigned int irq_base,
 {
        unsigned int virq = irq_base;
        irq_hw_number_t hwirq = hwirq_base;
-       int i;
+       int i, ret;
 
        pr_debug("%s(%s, irqbase=%i, hwbase=%i, count=%i)\n", __func__,
                of_node_full_name(domain->of_node), irq_base, (int)hwirq_base, count);
@@ -436,11 +436,16 @@ int irq_domain_associate_many(struct irq_domain *domain, unsigned int irq_base,
 
                irq_data->hwirq = hwirq;
                irq_data->domain = domain;
-               if (domain->ops->map && domain->ops->map(domain, virq, hwirq)) {
-                       pr_err("irq-%i==>hwirq-0x%lx mapping failed\n", virq, hwirq);
-                       irq_data->domain = NULL;
-                       irq_data->hwirq = 0;
-                       goto err_unmap;
+               if (domain->ops->map) {
+                       ret = domain->ops->map(domain, virq, hwirq);
+                       if (ret != 0) {
+                               pr_err("irq-%i==>hwirq-0x%lx mapping failed: %d\n",
+                                      virq, hwirq, ret);
+                               WARN_ON(1);
+                               irq_data->domain = NULL;
+                               irq_data->hwirq = 0;
+                               goto err_unmap;
+                       }
                }
 
                switch (domain->revmap_type) {