irqdomain: Eliminate dedicated radix lookup functions
authorGrant Likely <grant.likely@secretlab.ca>
Mon, 4 Jun 2012 05:04:37 +0000 (22:04 -0700)
committerGrant Likely <grant.likely@secretlab.ca>
Wed, 11 Jul 2012 15:16:00 +0000 (16:16 +0100)
In preparation to remove the slow revmap path, eliminate the public
radix revmap lookup functions.  This simplifies the code and makes the
slowpath removal patch a lot simpler.

Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Rob Herring <rob.herring@calxeda.com>
arch/powerpc/sysdev/xics/icp-hv.c
arch/powerpc/sysdev/xics/icp-native.c
include/linux/irqdomain.h
kernel/irq/irqdomain.c

index 253dce9..14469cf 100644 (file)
@@ -111,7 +111,7 @@ static unsigned int icp_hv_get_irq(void)
        if (vec == XICS_IRQ_SPURIOUS)
                return NO_IRQ;
 
-       irq = irq_radix_revmap_lookup(xics_host, vec);
+       irq = irq_find_mapping(xics_host, vec);
        if (likely(irq != NO_IRQ)) {
                xics_push_cppr(vec);
                return irq;
index 4c79b6f..48861d3 100644 (file)
@@ -119,7 +119,7 @@ static unsigned int icp_native_get_irq(void)
        if (vec == XICS_IRQ_SPURIOUS)
                return NO_IRQ;
 
-       irq = irq_radix_revmap_lookup(xics_host, vec);
+       irq = irq_find_mapping(xics_host, vec);
        if (likely(irq != NO_IRQ)) {
                xics_push_cppr(vec);
                return irq;
index eab8a0e..0d5b17b 100644 (file)
@@ -174,10 +174,6 @@ static inline int irq_create_identity_mapping(struct irq_domain *host,
        return irq_create_strict_mappings(host, hwirq, hwirq, 1);
 }
 
-extern void irq_radix_revmap_insert(struct irq_domain *host, unsigned int virq,
-                                   irq_hw_number_t hwirq);
-extern unsigned int irq_radix_revmap_lookup(struct irq_domain *host,
-                                           irq_hw_number_t hwirq);
 extern unsigned int irq_linear_revmap(struct irq_domain *host,
                                      irq_hw_number_t hwirq);
 
index a07d924..f540bb1 100644 (file)
@@ -450,7 +450,7 @@ int irq_domain_associate_many(struct irq_domain *domain, unsigned int irq_base,
                        break;
                case IRQ_DOMAIN_MAP_TREE:
                        mutex_lock(&revmap_trees_mutex);
-                       irq_radix_revmap_insert(domain, virq, hwirq);
+                       radix_tree_insert(&domain->revmap_data.tree, hwirq, irq_data);
                        mutex_unlock(&revmap_trees_mutex);
                        break;
                }
@@ -724,64 +724,6 @@ unsigned int irq_find_mapping(struct irq_domain *domain,
 EXPORT_SYMBOL_GPL(irq_find_mapping);
 
 /**
- * irq_radix_revmap_lookup() - Find a linux irq from a hw irq number.
- * @domain: domain owning this hardware interrupt
- * @hwirq: hardware irq number in that domain space
- *
- * This is a fast path, for use by irq controller code that uses radix tree
- * revmaps
- */
-unsigned int irq_radix_revmap_lookup(struct irq_domain *domain,
-                                    irq_hw_number_t hwirq)
-{
-       struct irq_data *irq_data;
-
-       if (WARN_ON_ONCE(domain->revmap_type != IRQ_DOMAIN_MAP_TREE))
-               return irq_find_mapping(domain, hwirq);
-
-       /*
-        * Freeing an irq can delete nodes along the path to
-        * do the lookup via call_rcu.
-        */
-       rcu_read_lock();
-       irq_data = radix_tree_lookup(&domain->revmap_data.tree, hwirq);
-       rcu_read_unlock();
-
-       /*
-        * If found in radix tree, then fine.
-        * Else fallback to linear lookup - this should not happen in practice
-        * as it means that we failed to insert the node in the radix tree.
-        */
-       return irq_data ? irq_data->irq : irq_find_mapping(domain, hwirq);
-}
-EXPORT_SYMBOL_GPL(irq_radix_revmap_lookup);
-
-/**
- * irq_radix_revmap_insert() - Insert a hw irq to linux irq number mapping.
- * @domain: domain owning this hardware interrupt
- * @virq: linux irq number
- * @hwirq: hardware irq number in that domain space
- *
- * This is for use by irq controllers that use a radix tree reverse
- * mapping for fast lookup.
- */
-void irq_radix_revmap_insert(struct irq_domain *domain, unsigned int virq,
-                            irq_hw_number_t hwirq)
-{
-       struct irq_data *irq_data = irq_get_irq_data(virq);
-
-       if (WARN_ON(domain->revmap_type != IRQ_DOMAIN_MAP_TREE))
-               return;
-
-       if (virq) {
-               mutex_lock(&revmap_trees_mutex);
-               radix_tree_insert(&domain->revmap_data.tree, hwirq, irq_data);
-               mutex_unlock(&revmap_trees_mutex);
-       }
-}
-EXPORT_SYMBOL_GPL(irq_radix_revmap_insert);
-
-/**
  * irq_linear_revmap() - Find a linux irq from a hw irq number.
  * @domain: domain owning this hardware interrupt
  * @hwirq: hardware irq number in that domain space