Message ID | 1446239475-49480-6-git-send-email-jakeo@microsoft.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Fri, Oct 30, 2015 at 11:11 PM, <jakeo@microsoft.com> wrote: > From: Jake Oshins <jakeo@microsoft.com> > > This patch adds a second way of finding an IRQ domain associated with > a root PCI bus. After looking to see if one can be found through > the OF tree, it attempts to look up the IRQ domain through an > fwnode_handle stored in the pci_sysdata struct. > > Signed-off-by: Jake Oshins <jakeo@microsoft.com> > --- > arch/x86/include/asm/pci.h | 4 +++- > drivers/pci/probe.c | 11 +++++++++++ > include/asm-generic/pci.h | 4 ++++ > 3 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h > index 10213a1..fb74453 100644 > --- a/arch/x86/include/asm/pci.h > +++ b/arch/x86/include/asm/pci.h > @@ -45,11 +45,13 @@ static inline int pci_proc_domain(struct pci_bus *bus) > #endif > > #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN > -static inline void *pci_fwnode(struct pci_bus *bus) > +static inline void *_pci_root_bus_fwnode(struct pci_bus *bus) I'm sorry what is the point to rename? > { > struct pci_sysdata *sd = bus->sysdata; > return sd->fwnode; > } > + > +#define pci_root_bus_fwnode _pci_root_bus_fwnode > #endif > > /* Can be used to override the logic in pci_scan_bus for skipping > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c > index f441d1b..60e50a8 100644 > --- a/drivers/pci/probe.c > +++ b/drivers/pci/probe.c > @@ -671,6 +671,17 @@ static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus) > */ > d = pci_host_bridge_of_msi_domain(bus); > > +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN > + /* > + * If no IRQ domain was found via the OF tree, try looking it up > + * directly through the fwnode_handle. > + */ > + if (!d && pci_root_bus_fwnode(bus)) { > + d = irq_find_matching_fwnode(pci_root_bus_fwnode(bus), > + DOMAIN_BUS_PCI_MSI); Gave a second glance and now noticed that you call pci_root_bus_fwnode() twice. So, it actually might be more readable like your first but modified variant: if (!d) { void *fwnode = pci_fwnode(bus); if (fwnode) d = irq_find_matching_fwnode(fwnode, DOMAIN_BUS_PCI_MSI); } > + } > +#endif > + > return d; > } With Best Regards, Andy Shevchenko -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Andy Shevchenko [mailto:andy.shevchenko@gmail.com] > Sent: Friday, October 30, 2015 2:44 PM > To: Jake Oshins <jakeo@microsoft.com> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>; KY Srinivasan > <kys@microsoft.com>; linux-kernel@vger.kernel.org; > devel@linuxdriverproject.org; olaf@aepfle.de; Robo Bot > <apw@canonical.com>; Vitaly Kuznetsov <vkuznets@redhat.com>; > tglx@redhat.com; Haiyang Zhang <haiyangz@microsoft.com>; > marc.zyngier@arm.com; Bjorn Helgaas <bhelgaas@google.com>; linux- > pci@vger.kernel.org > Subject: Re: [PATCH v5 5/7] PCI: irqdomain: Look up IRQ domain by > fwnode_handle > > On Fri, Oct 30, 2015 at 11:11 PM, <jakeo@microsoft.com> wrote: > > From: Jake Oshins <jakeo@microsoft.com> > > > > This patch adds a second way of finding an IRQ domain associated with > > a root PCI bus. After looking to see if one can be found through > > the OF tree, it attempts to look up the IRQ domain through an > > fwnode_handle stored in the pci_sysdata struct. > > > > Signed-off-by: Jake Oshins <jakeo@microsoft.com> > > --- > > arch/x86/include/asm/pci.h | 4 +++- > > drivers/pci/probe.c | 11 +++++++++++ > > include/asm-generic/pci.h | 4 ++++ > > 3 files changed, 18 insertions(+), 1 deletion(-) > > > > diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h > > index 10213a1..fb74453 100644 > > --- a/arch/x86/include/asm/pci.h > > +++ b/arch/x86/include/asm/pci.h > > @@ -45,11 +45,13 @@ static inline int pci_proc_domain(struct pci_bus > *bus) > > #endif > > > > #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN > > -static inline void *pci_fwnode(struct pci_bus *bus) > > +static inline void *_pci_root_bus_fwnode(struct pci_bus *bus) > > I'm sorry what is the point to rename? > I renamed it only because Gerry asked me to rename it. And then I regenerated the patch series with that rename still in the queue, which was a mistake. The whole thing is introduced in the previous patch. pci_fwnode() doesn't exist without this patch series. I'll straighten that out. > > { > > struct pci_sysdata *sd = bus->sysdata; > > return sd->fwnode; > > } > > + > > +#define pci_root_bus_fwnode _pci_root_bus_fwnode > > #endif > > > > /* Can be used to override the logic in pci_scan_bus for skipping > > diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c > > index f441d1b..60e50a8 100644 > > --- a/drivers/pci/probe.c > > +++ b/drivers/pci/probe.c > > @@ -671,6 +671,17 @@ static struct irq_domain > *pci_host_bridge_msi_domain(struct pci_bus *bus) > > */ > > d = pci_host_bridge_of_msi_domain(bus); > > > > +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN > > + /* > > + * If no IRQ domain was found via the OF tree, try looking it up > > + * directly through the fwnode_handle. > > + */ > > + if (!d && pci_root_bus_fwnode(bus)) { > > + d = irq_find_matching_fwnode(pci_root_bus_fwnode(bus), > > + DOMAIN_BUS_PCI_MSI); > > Gave a second glance and now noticed that you call > pci_root_bus_fwnode() twice. So, it actually might be more readable > like your first but modified variant: > > if (!d) { > void *fwnode = pci_fwnode(bus); > > if (fwnode) > d = irq_find_matching_fwnode(fwnode, DOMAIN_BUS_PCI_MSI); > } > > > + } > > +#endif > > + > > return d; > > } > > > With Best Regards, > Andy Shevchenko Sure. No problem. I'll resend. -- Jake
diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h index 10213a1..fb74453 100644 --- a/arch/x86/include/asm/pci.h +++ b/arch/x86/include/asm/pci.h @@ -45,11 +45,13 @@ static inline int pci_proc_domain(struct pci_bus *bus) #endif #ifdef CONFIG_PCI_MSI_IRQ_DOMAIN -static inline void *pci_fwnode(struct pci_bus *bus) +static inline void *_pci_root_bus_fwnode(struct pci_bus *bus) { struct pci_sysdata *sd = bus->sysdata; return sd->fwnode; } + +#define pci_root_bus_fwnode _pci_root_bus_fwnode #endif /* Can be used to override the logic in pci_scan_bus for skipping diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index f441d1b..60e50a8 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -671,6 +671,17 @@ static struct irq_domain *pci_host_bridge_msi_domain(struct pci_bus *bus) */ d = pci_host_bridge_of_msi_domain(bus); +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN + /* + * If no IRQ domain was found via the OF tree, try looking it up + * directly through the fwnode_handle. + */ + if (!d && pci_root_bus_fwnode(bus)) { + d = irq_find_matching_fwnode(pci_root_bus_fwnode(bus), + DOMAIN_BUS_PCI_MSI); + } +#endif + return d; } diff --git a/include/asm-generic/pci.h b/include/asm-generic/pci.h index f24bc51..3fde985 100644 --- a/include/asm-generic/pci.h +++ b/include/asm-generic/pci.h @@ -21,4 +21,8 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) #define PCI_DMA_BUS_IS_PHYS (1) #endif +#ifndef pci_root_bus_fwnode +#define pci_root_bus_fwnode(bus) ((void)(bus),NULL) +#endif + #endif /* _ASM_GENERIC_PCI_H */