On Mon, 12 Oct 2015 13:31:09 -0500 Suravee Suthikulpanit <Suravee.Suthikulpanit@xxxxxxx> wrote: Hi Suravee, > [RESEND] Not sure if the email went out the first time. > > Hi Marc, > > On 10/6/15 12:36, Marc Zyngier wrote: > > So far, our irq domains are still looked up by device node. > > Let's change this and allow a domain to be looked up using > > a fwnode_handle pointer. > > > > The existing interfaces are preserved with a couple of helpers. > > > > Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx> > > --- > > include/linux/irqdomain.h | 11 +++++++++-- > > kernel/irq/irqdomain.c | 14 ++++++-------- > > 2 files changed, 15 insertions(+), 10 deletions(-) > > > > diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h > > index 2f508f4..607c185 100644 > > --- a/include/linux/irqdomain.h > > +++ b/include/linux/irqdomain.h > > @@ -183,10 +183,17 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node, > > irq_hw_number_t first_hwirq, > > const struct irq_domain_ops *ops, > > void *host_data); > > -extern struct irq_domain *irq_find_matching_host(struct device_node *node, > > - enum irq_domain_bus_token bus_token); > > +extern struct irq_domain *irq_find_matching_fwnode(struct fwnode_handle *fwnode, > > + enum irq_domain_bus_token bus_token); > > extern void irq_set_default_host(struct irq_domain *host); > > > > +static inline struct irq_domain *irq_find_matching_host(struct device_node *node, > > + enum irq_domain_bus_token bus_token) > > +{ > > + return irq_find_matching_fwnode(node ? &node->fwnode : NULL, > > + bus_token); > > +} > > + > > static inline struct irq_domain *irq_find_host(struct device_node *node) > > { > > return irq_find_matching_host(node, DOMAIN_BUS_ANY); > > diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c > > index 1aee5c1..10b6105 100644 > > --- a/kernel/irq/irqdomain.c > > +++ b/kernel/irq/irqdomain.c > > @@ -191,12 +191,12 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node, > > EXPORT_SYMBOL_GPL(irq_domain_add_legacy); > > > > /** > > - * irq_find_matching_host() - Locates a domain for a given device node > > - * @node: device-tree node of the interrupt controller > > + * irq_find_matching_fwnode() - Locates a domain for a given fwnode > > + * @fwnode: FW descriptor of the interrupt controller > > * @bus_token: domain-specific data > > */ > > -struct irq_domain *irq_find_matching_host(struct device_node *node, > > - enum irq_domain_bus_token bus_token) > > +struct irq_domain *irq_find_matching_fwnode(struct fwnode_handle *fwnode, > > + enum irq_domain_bus_token bus_token) > > { > > struct irq_domain *h, *found = NULL; > > int rc; > > @@ -212,12 +212,10 @@ struct irq_domain *irq_find_matching_host(struct device_node *node, > > */ > > mutex_lock(&irq_domain_mutex); > > list_for_each_entry(h, &irq_domain_list, link) { > > - struct device_node *of_node; > > - of_node = irq_domain_get_of_node(h); > > if (h->ops->match) > > - rc = h->ops->match(h, node, bus_token); > > + rc = h->ops->match(h, to_of_node(fwnode), bus_token); > > else > > - rc = ((of_node != NULL) && (of_node == node) && > > + rc = ((fwnode != NULL) && (h->fwnode == fwnode) && > > ((bus_token == DOMAIN_BUS_ANY) || > > (h->bus_token == bus_token))); > > > > > > In the kernel/irq/irq_domain.c, shouldn't you also change the export > symbol from: > > EXPORT_SYMBOL_GPL(irq_find_matching_host); > > to: > > EXPORT_SYMBOL_GPL(irq_find_matching_fwnode); > > at the end of this function as well? Well spotted! I'll update the v2 branch. Thanks, M. -- Jazz is not dead. It just smells funny. -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html