From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966447AbcAZPFj (ORCPT ); Tue, 26 Jan 2016 10:05:39 -0500 Received: from terminus.zytor.com ([198.137.202.10]:50168 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965297AbcAZPFe (ORCPT ); Tue, 26 Jan 2016 10:05:34 -0500 Date: Tue, 26 Jan 2016 07:04:50 -0800 From: tip-bot for Marc Zyngier Message-ID: Cc: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, thomas.petazzoni@free-electrons.com, jiang.liu@linux.intel.com, mingo@kernel.org, grant.likely@linaro.org, robh+dt@kernel.org, marc.zyngier@arm.com, hpa@zytor.com, tglx@linutronix.de, frowand.list@gmail.com Reply-To: mingo@kernel.org, robh+dt@kernel.org, grant.likely@linaro.org, thomas.petazzoni@free-electrons.com, gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, jiang.liu@linux.intel.com, hpa@zytor.com, tglx@linutronix.de, frowand.list@gmail.com, marc.zyngier@arm.com In-Reply-To: <1453816347-32720-3-git-send-email-marc.zyngier@arm.com> References: <1453816347-32720-3-git-send-email-marc.zyngier@arm.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:irq/urgent] of: MSI: Simplify irqdomain lookup Git-Commit-ID: 14a0db3cdd114da757197193f66786e63649c91e X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 14a0db3cdd114da757197193f66786e63649c91e Gitweb: http://git.kernel.org/tip/14a0db3cdd114da757197193f66786e63649c91e Author: Marc Zyngier AuthorDate: Tue, 26 Jan 2016 13:52:26 +0000 Committer: Thomas Gleixner CommitDate: Tue, 26 Jan 2016 16:00:15 +0100 of: MSI: Simplify irqdomain lookup So far, when trying to associate a device with its MSI domain, we first lookup the domain using a MSI token, and if this doesn't return anything useful, we pick up any domain matching the same node. This logic is broken for two reasons: 1) Only the generic MSI code (PCI or platform) sets this token to PCI/MSI or platform MSI. So we're guaranteed that if there is something to be found, we will find it with the first call. 2) If we have a convoluted situation where: - a single node implements both wired and MSI interrupts - MSI support for that HW hasn't been compiled in we'll end up using the wired domain for MSIs anyway, and things break badly. So let's just remove __of_get_msi_domain, and replace it by a direct call to irq_find_matching_host, because that's what we really want. Signed-off-by: Marc Zyngier Acked-by: Rob Herring Cc: Greg Kroah-Hartman Cc: Frank Rowand Cc: Grant Likely Cc: Thomas Petazzoni Cc: Jiang Liu Link: http://lkml.kernel.org/r/1453816347-32720-3-git-send-email-marc.zyngier@arm.com Signed-off-by: Thomas Gleixner --- drivers/of/irq.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 4fa916d..a9ea552 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -680,18 +680,6 @@ u32 of_msi_map_rid(struct device *dev, struct device_node *msi_np, u32 rid_in) return __of_msi_map_rid(dev, &msi_np, rid_in); } -static struct irq_domain *__of_get_msi_domain(struct device_node *np, - enum irq_domain_bus_token token) -{ - struct irq_domain *d; - - d = irq_find_matching_host(np, token); - if (!d) - d = irq_find_host(np); - - return d; -} - /** * of_msi_map_get_device_domain - Use msi-map to find the relevant MSI domain * @dev: device for which the mapping is to be done. @@ -707,7 +695,7 @@ struct irq_domain *of_msi_map_get_device_domain(struct device *dev, u32 rid) struct device_node *np = NULL; __of_msi_map_rid(dev, &np, rid); - return __of_get_msi_domain(np, DOMAIN_BUS_PCI_MSI); + return irq_find_matching_host(np, DOMAIN_BUS_PCI_MSI); } /** @@ -731,7 +719,7 @@ struct irq_domain *of_msi_get_domain(struct device *dev, /* Check for a single msi-parent property */ msi_np = of_parse_phandle(np, "msi-parent", 0); if (msi_np && !of_property_read_bool(msi_np, "#msi-cells")) { - d = __of_get_msi_domain(msi_np, token); + d = irq_find_matching_host(msi_np, token); if (!d) of_node_put(msi_np); return d; @@ -745,7 +733,7 @@ struct irq_domain *of_msi_get_domain(struct device *dev, while (!of_parse_phandle_with_args(np, "msi-parent", "#msi-cells", index, &args)) { - d = __of_get_msi_domain(args.np, token); + d = irq_find_matching_host(args.np, token); if (d) return d;