powerpc: Return early if irq_host lookup type is wrong
[pandora-kernel.git] / arch / powerpc / kernel / irq.c
index f42e869..4a5aa8c 100644 (file)
@@ -814,8 +814,7 @@ void irq_dispose_mapping(unsigned int virq)
                return;
 
        host = irq_map[virq].host;
-       WARN_ON (host == NULL);
-       if (host == NULL)
+       if (WARN_ON(host == NULL))
                return;
 
        /* Never unmap legacy interrupts */
@@ -898,7 +897,8 @@ unsigned int irq_radix_revmap_lookup(struct irq_host *host,
        struct irq_map_entry *ptr;
        unsigned int virq;
 
-       WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE);
+       if (WARN_ON_ONCE(host->revmap_type != IRQ_HOST_MAP_TREE))
+               return irq_find_mapping(host, hwirq);
 
        /*
         * No rcu_read_lock(ing) needed, the ptr returned can't go under us
@@ -922,7 +922,8 @@ unsigned int irq_radix_revmap_lookup(struct irq_host *host,
 void irq_radix_revmap_insert(struct irq_host *host, unsigned int virq,
                             irq_hw_number_t hwirq)
 {
-       WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE);
+       if (WARN_ON(host->revmap_type != IRQ_HOST_MAP_TREE))
+               return;
 
        if (virq != NO_IRQ) {
                mutex_lock(&revmap_trees_mutex);
@@ -937,7 +938,8 @@ unsigned int irq_linear_revmap(struct irq_host *host,
 {
        unsigned int *revmap;
 
-       WARN_ON(host->revmap_type != IRQ_HOST_MAP_LINEAR);
+       if (WARN_ON_ONCE(host->revmap_type != IRQ_HOST_MAP_LINEAR))
+               return irq_find_mapping(host, hwirq);
 
        /* Check revmap bounds */
        if (unlikely(hwirq >= host->revmap_data.linear.size))