The most common match semantic is an exact match based on the device node.
So provide a default implementation that does this, and hook it up if no
match routine is specified.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
 }
 EXPORT_SYMBOL_GPL(virq_to_hw);
 
+static int default_irq_host_match(struct irq_host *h, struct device_node *np)
+{
+       return h->of_node != NULL && h->of_node == np;
+}
+
 __init_refok struct irq_host *irq_alloc_host(struct device_node *of_node,
                                unsigned int revmap_type,
                                unsigned int revmap_arg,
        host->ops = ops;
        host->of_node = of_node;
 
+       if (host->ops->match == NULL)
+               host->ops->match = default_irq_host_match;
+
        spin_lock_irqsave(&irq_big_lock, flags);
 
        /* If it's a legacy controller, check for duplicates and
         */
        spin_lock_irqsave(&irq_big_lock, flags);
        list_for_each_entry(h, &irq_hosts, link)
-               if (h->ops->match != NULL && h->ops->match(h, node)) {
+               if (h->ops->match(h, node)) {
                        found = h;
                        break;
                }
 
  * irq_host
 */
 
-static int mpc52xx_irqhost_match(struct irq_host *h, struct device_node *node)
-{
-       pr_debug("%s: node=%p\n", __func__, node);
-       return h->of_node == node;
-}
-
 static int mpc52xx_irqhost_xlate(struct irq_host *h, struct device_node *ct,
                                 u32 * intspec, unsigned int intsize,
                                 irq_hw_number_t * out_hwirq,
 }
 
 static struct irq_host_ops mpc52xx_irqhost_ops = {
-       .match = mpc52xx_irqhost_match,
        .xlate = mpc52xx_irqhost_xlate,
        .map = mpc52xx_irqhost_map,
 };
 
        }
 }
 
-static int pci_pic_host_match(struct irq_host *h, struct device_node *node)
-{
-       return h->of_node == node;
-}
-
 static int pci_pic_host_map(struct irq_host *h, unsigned int virq,
                            irq_hw_number_t hw)
 {
 }
 
 static struct irq_host_ops pci_pic_host_ops = {
-       .match = pci_pic_host_match,
        .map = pci_pic_host_map,
        .unmap = pci_host_unmap,
 };
 
        return 0;
 }
 
-static int msic_host_match(struct irq_host *host, struct device_node *dn)
-{
-       return host->of_node == dn;
-}
-
 static struct irq_host_ops msic_host_ops = {
-       .match  = msic_host_match,
        .map    = msic_host_map,
 };
 
 
        .set_type = spider_set_irq_type,
 };
 
-static int spider_host_match(struct irq_host *h, struct device_node *node)
-{
-       return h->of_node == node;
-}
-
 static int spider_host_map(struct irq_host *h, unsigned int virq,
                        irq_hw_number_t hw)
 {
 }
 
 static struct irq_host_ops spider_host_ops = {
-       .match = spider_host_match,
        .map = spider_host_map,
        .xlate = spider_host_xlate,
 };
 
        return irq_linear_revmap(cpm_pic_host, cpm_vec);
 }
 
-static int cpm_pic_host_match(struct irq_host *h, struct device_node *node)
-{
-       return h->of_node == node;
-}
-
 static int cpm_pic_host_map(struct irq_host *h, unsigned int virq,
                          irq_hw_number_t hw)
 {
 };
 
 static struct irq_host_ops cpm_pic_host_ops = {
-       .match = cpm_pic_host_match,
        .map = cpm_pic_host_map,
 };
 
 
        return irq_linear_revmap(cpm2_pic_host, irq);
 }
 
-static int cpm2_pic_host_match(struct irq_host *h, struct device_node *node)
-{
-       return h->of_node == node;
-}
-
 static int cpm2_pic_host_map(struct irq_host *h, unsigned int virq,
                          irq_hw_number_t hw)
 {
 }
 
 static struct irq_host_ops cpm2_pic_host_ops = {
-       .match = cpm2_pic_host_match,
        .map = cpm2_pic_host_map,
        .xlate = cpm2_pic_host_xlate,
 };
 
 
 }
 
-static int mpc8xx_pic_host_match(struct irq_host *h, struct device_node *node)
-{
-       return h->of_node == node;
-}
-
 static int mpc8xx_pic_host_map(struct irq_host *h, unsigned int virq,
                          irq_hw_number_t hw)
 {
 
 
 static struct irq_host_ops mpc8xx_pic_host_ops = {
-       .match = mpc8xx_pic_host_match,
        .map = mpc8xx_pic_host_map,
        .xlate = mpc8xx_pic_host_xlate,
 };
 
  * mv64x60_host_ops functions
  */
 
-static int mv64x60_host_match(struct irq_host *h, struct device_node *np)
-{
-       return h->of_node == np;
-}
-
 static struct irq_chip *mv64x60_chips[] = {
        [MV64x60_LEVEL1_LOW]  = &mv64x60_chip_low,
        [MV64x60_LEVEL1_HIGH] = &mv64x60_chip_high,
 }
 
 static struct irq_host_ops mv64x60_host_ops = {
-       .match = mv64x60_host_match,
        .map   = mv64x60_host_map,
 };
 
 
        return 0;
 }
 
-static int pci_irq_host_match(struct irq_host *h, struct device_node *node)
-{
-       return h->of_node == node;
-}
-
 static struct irq_host_ops pci_irq_host_ops = {
-       .match = pci_irq_host_match,
        .map = pci_irq_host_map,
        .xlate = pci_irq_host_xlate,
 };
 
        spin_unlock(&desc->lock);
 }
 
-static int uic_host_match(struct irq_host *h, struct device_node *node)
-{
-       return h->of_node == node;
-}
-
 static int uic_host_map(struct irq_host *h, unsigned int virq,
                        irq_hw_number_t hw)
 {
 }
 
 static struct irq_host_ops uic_host_ops = {
-       .match  = uic_host_match,
        .map    = uic_host_map,
        .xlate  = uic_host_xlate,
 };