diff mbox

[RESEND,1/3] PCI: Add fwnode_handle to pci_sysdata

Message ID 1454434903-1680-2-git-send-email-jakeo@microsoft.com (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Jake Oshins Feb. 2, 2016, 5:41 p.m. UTC
From: Jake Oshins <jakeo@microsoft.com>

This patch adds an fwnode_handle to struct pci_sysdata, which is
used by the next patch in the series when trying to locate an
IRQ domain associated with a root PCI bus.

Signed-off-by: Jake Oshins <jakeo@microsoft.com>
---
 arch/x86/include/asm/pci.h | 15 +++++++++++++++
 drivers/pci/probe.c        |  1 +
 include/linux/pci.h        |  4 ++++
 3 files changed, 20 insertions(+)

Comments

Bjorn Helgaas Feb. 3, 2016, 6:25 p.m. UTC | #1
Hi Jake,

On Tue, Feb 02, 2016 at 05:41:41PM +0000, jakeo@microsoft.com wrote:
> From: Jake Oshins <jakeo@microsoft.com>
> 
> This patch adds an fwnode_handle to struct pci_sysdata, which is
> used by the next patch in the series when trying to locate an
> IRQ domain associated with a root PCI bus.
> 
> Signed-off-by: Jake Oshins <jakeo@microsoft.com>
> ---
>  arch/x86/include/asm/pci.h | 15 +++++++++++++++
>  drivers/pci/probe.c        |  1 +
>  include/linux/pci.h        |  4 ++++
>  3 files changed, 20 insertions(+)
> 
> diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
> index 4625943..6fc3c7c 100644
> --- a/arch/x86/include/asm/pci.h
> +++ b/arch/x86/include/asm/pci.h
> @@ -20,6 +20,9 @@ struct pci_sysdata {
>  #ifdef CONFIG_X86_64
>  	void		*iommu;		/* IOMMU private data */
>  #endif
> +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
> +	void		*fwnode;	/* IRQ domain for MSI assignment */
> +#endif
>  };
>  
>  extern int pci_routeirq;
> @@ -32,6 +35,7 @@ extern int noioapicreroute;
>  static inline int pci_domain_nr(struct pci_bus *bus)
>  {
>  	struct pci_sysdata *sd = bus->sysdata;
> +
>  	return sd->domain;
>  }
>  
> @@ -41,6 +45,17 @@ static inline int pci_proc_domain(struct pci_bus *bus)
>  }
>  #endif
>  
> +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
> +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
>     already-configured bus numbers - to be used for buggy BIOSes
>     or architectures with incomplete PCI setup by the loader */
> diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
> index 6d7ab9b..b207e74 100644
> --- a/drivers/pci/probe.c
> +++ b/drivers/pci/probe.c
> @@ -15,6 +15,7 @@
>  #include <linux/pci-aspm.h>
>  #include <linux/aer.h>
>  #include <linux/acpi.h>
> +#include <linux/irqdomain.h>

You're not adding a use of anything in irqdomain.h.  It looks like
this hunk should be moved to the second patch.

>  #include <asm-generic/pci-bridge.h>
>  #include "pci.h"
>  
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 27df4a6..cd05a8e 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1515,6 +1515,10 @@ static inline int pci_get_new_domain_nr(void) { return -ENOSYS; }
>  
>  #include <asm/pci.h>
>  
> +#ifndef pci_root_bus_fwnode
> +#define pci_root_bus_fwnode(bus)	((void)(bus), NULL)

Huh, interesting.  This is new for me; I guess the idea is that we at
least evaluate "bus" even when pci_root_bus_fwnode isn't defined, so
the compiler can catch egregious errors?

> +#endif
> +
>  /* these helpers provide future and backwards compatibility
>   * for accessing popular PCI BAR info */
>  #define pci_resource_start(dev, bar)	((dev)->resource[(bar)].start)
> -- 
> 1.9.1
> 
--
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
Jake Oshins Feb. 3, 2016, 6:32 p.m. UTC | #2
> -----Original Message-----
> From: Bjorn Helgaas [mailto:helgaas@kernel.org]
> Sent: Wednesday, February 3, 2016 10:25 AM
> To: Jake Oshins <jakeo@microsoft.com>
> Cc: gregkh@linuxfoundation.org; KY Srinivasan <kys@microsoft.com>; linux-
> kernel@vger.kernel.org; devel@linuxdriverproject.org; Haiyang Zhang
> <haiyangz@microsoft.com>; marc.zyngier@arm.com;
> bhelgaas@google.com; linux-pci@vger.kernel.org
> Subject: Re: [PATCH RESEND 1/3] PCI: Add fwnode_handle to pci_sysdata
> 
> Hi Jake,
> 
> On Tue, Feb 02, 2016 at 05:41:41PM +0000, jakeo@microsoft.com wrote:
> > From: Jake Oshins <jakeo@microsoft.com>
> >
> > This patch adds an fwnode_handle to struct pci_sysdata, which is used
> > by the next patch in the series when trying to locate an IRQ domain
> > associated with a root PCI bus.
> >
> > Signed-off-by: Jake Oshins <jakeo@microsoft.com>
> > ---
> >  arch/x86/include/asm/pci.h | 15 +++++++++++++++
> >  drivers/pci/probe.c        |  1 +
> >  include/linux/pci.h        |  4 ++++
> >  3 files changed, 20 insertions(+)
> >
> > diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
> > index 4625943..6fc3c7c 100644
> > --- a/arch/x86/include/asm/pci.h
> > +++ b/arch/x86/include/asm/pci.h
> > @@ -20,6 +20,9 @@ struct pci_sysdata {  #ifdef CONFIG_X86_64
> >  	void		*iommu;		/* IOMMU private data */
> >  #endif
> > +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
> > +	void		*fwnode;	/* IRQ domain for MSI assignment */
> > +#endif
> >  };
> >
> >  extern int pci_routeirq;
> > @@ -32,6 +35,7 @@ extern int noioapicreroute;  static inline int
> > pci_domain_nr(struct pci_bus *bus)  {
> >  	struct pci_sysdata *sd = bus->sysdata;
> > +
> >  	return sd->domain;
> >  }
> >
> > @@ -41,6 +45,17 @@ static inline int pci_proc_domain(struct pci_bus
> > *bus)  }  #endif
> >
> > +#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
> > +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
> >     already-configured bus numbers - to be used for buggy BIOSes
> >     or architectures with incomplete PCI setup by the loader */ diff
> > --git a/drivers/pci/probe.c b/drivers/pci/probe.c index
> > 6d7ab9b..b207e74 100644
> > --- a/drivers/pci/probe.c
> > +++ b/drivers/pci/probe.c
> > @@ -15,6 +15,7 @@
> >  #include <linux/pci-aspm.h>
> >  #include <linux/aer.h>
> >  #include <linux/acpi.h>
> > +#include <linux/irqdomain.h>
> 
> You're not adding a use of anything in irqdomain.h.  It looks like this hunk
> should be moved to the second patch.

Wil do.

> 
> >  #include <asm-generic/pci-bridge.h>
> >  #include "pci.h"
> >
> > diff --git a/include/linux/pci.h b/include/linux/pci.h index
> > 27df4a6..cd05a8e 100644
> > --- a/include/linux/pci.h
> > +++ b/include/linux/pci.h
> > @@ -1515,6 +1515,10 @@ static inline int pci_get_new_domain_nr(void) {
> > return -ENOSYS; }
> >
> >  #include <asm/pci.h>
> >
> > +#ifndef pci_root_bus_fwnode
> > +#define pci_root_bus_fwnode(bus)	((void)(bus), NULL)
> 
> Huh, interesting.  This is new for me; I guess the idea is that we at least
> evaluate "bus" even when pci_root_bus_fwnode isn't defined, so the
> compiler can catch egregious errors?
> 

This was a suggestion by Mark Zyngier.  It made the non-x86 architectures build benignly.  If you'd like it done differently, I'm open to suggestion.

Thanks,
Jake Oshins

--
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
Bjorn Helgaas Feb. 3, 2016, 6:51 p.m. UTC | #3
On Wed, Feb 03, 2016 at 06:32:20PM +0000, Jake Oshins wrote:
> > -----Original Message-----
> > From: Bjorn Helgaas [mailto:helgaas@kernel.org]
> > Sent: Wednesday, February 3, 2016 10:25 AM
> > To: Jake Oshins <jakeo@microsoft.com>
> > Cc: gregkh@linuxfoundation.org; KY Srinivasan <kys@microsoft.com>; linux-
> > kernel@vger.kernel.org; devel@linuxdriverproject.org; Haiyang Zhang
> > <haiyangz@microsoft.com>; marc.zyngier@arm.com;
> > bhelgaas@google.com; linux-pci@vger.kernel.org
> > Subject: Re: [PATCH RESEND 1/3] PCI: Add fwnode_handle to pci_sysdata
> > 
> > Hi Jake,
> > 
> > On Tue, Feb 02, 2016 at 05:41:41PM +0000, jakeo@microsoft.com wrote:

> > > diff --git a/include/linux/pci.h b/include/linux/pci.h index
> > > 27df4a6..cd05a8e 100644
> > > --- a/include/linux/pci.h
> > > +++ b/include/linux/pci.h
> > > @@ -1515,6 +1515,10 @@ static inline int pci_get_new_domain_nr(void) {
> > > return -ENOSYS; }
> > >
> > >  #include <asm/pci.h>
> > >
> > > +#ifndef pci_root_bus_fwnode
> > > +#define pci_root_bus_fwnode(bus)	((void)(bus), NULL)
> > 
> > Huh, interesting.  This is new for me; I guess the idea is that we at least
> > evaluate "bus" even when pci_root_bus_fwnode isn't defined, so the
> > compiler can catch egregious errors?
> > 
> 
> This was a suggestion by Mark Zyngier.  It made the non-x86 architectures build benignly.  If you'd like it done differently, I'm open to suggestion.

Something like "#define pci_root_bus_fwnode(bus) NULL" would be
typical.  What I'm curious about is the use of the comma operator.
I'm not opposed to it; I'm just trying to understand why it makes a
difference.
--
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
Marc Zyngier Feb. 3, 2016, 6:57 p.m. UTC | #4
On 03/02/16 18:51, Bjorn Helgaas wrote:
> On Wed, Feb 03, 2016 at 06:32:20PM +0000, Jake Oshins wrote:
>>> -----Original Message-----
>>> From: Bjorn Helgaas [mailto:helgaas@kernel.org]
>>> Sent: Wednesday, February 3, 2016 10:25 AM
>>> To: Jake Oshins <jakeo@microsoft.com>
>>> Cc: gregkh@linuxfoundation.org; KY Srinivasan <kys@microsoft.com>; linux-
>>> kernel@vger.kernel.org; devel@linuxdriverproject.org; Haiyang Zhang
>>> <haiyangz@microsoft.com>; marc.zyngier@arm.com;
>>> bhelgaas@google.com; linux-pci@vger.kernel.org
>>> Subject: Re: [PATCH RESEND 1/3] PCI: Add fwnode_handle to pci_sysdata
>>>
>>> Hi Jake,
>>>
>>> On Tue, Feb 02, 2016 at 05:41:41PM +0000, jakeo@microsoft.com wrote:
> 
>>>> diff --git a/include/linux/pci.h b/include/linux/pci.h index
>>>> 27df4a6..cd05a8e 100644
>>>> --- a/include/linux/pci.h
>>>> +++ b/include/linux/pci.h
>>>> @@ -1515,6 +1515,10 @@ static inline int pci_get_new_domain_nr(void) {
>>>> return -ENOSYS; }
>>>>
>>>>  #include <asm/pci.h>
>>>>
>>>> +#ifndef pci_root_bus_fwnode
>>>> +#define pci_root_bus_fwnode(bus)	((void)(bus), NULL)
>>>
>>> Huh, interesting.  This is new for me; I guess the idea is that we at least
>>> evaluate "bus" even when pci_root_bus_fwnode isn't defined, so the
>>> compiler can catch egregious errors?
>>>
>>
>> This was a suggestion by Mark Zyngier.  It made the non-x86 architectures build benignly.  If you'd like it done differently, I'm open to suggestion.

I don't remember suggesting the use of the comma operator, but just to
check that pci_root_bus_fwnode wasn't previously defined.

> Something like "#define pci_root_bus_fwnode(bus) NULL" would be
> typical.  What I'm curious about is the use of the comma operator.
> I'm not opposed to it; I'm just trying to understand why it makes a
> difference.

I guess it flags the variable as used, and prevents an overly sensitive
compiler from being loud and obnoxious... Just a guess though.

	M.
Jake Oshins Feb. 3, 2016, 10:42 p.m. UTC | #5
> -----Original Message-----
> From: Marc Zyngier [mailto:marc.zyngier@arm.com]
> Sent: Wednesday, February 3, 2016 10:57 AM
> To: Bjorn Helgaas <helgaas@kernel.org>; Jake Oshins
> <jakeo@microsoft.com>
> Cc: gregkh@linuxfoundation.org; KY Srinivasan <kys@microsoft.com>; linux-
> kernel@vger.kernel.org; devel@linuxdriverproject.org; Haiyang Zhang
> <haiyangz@microsoft.com>; bhelgaas@google.com; linux-
> pci@vger.kernel.org
> Subject: Re: [PATCH RESEND 1/3] PCI: Add fwnode_handle to pci_sysdata
> 
> On 03/02/16 18:51, Bjorn Helgaas wrote:
> > On Wed, Feb 03, 2016 at 06:32:20PM +0000, Jake Oshins wrote:
> >>> -----Original Message-----
> >>> From: Bjorn Helgaas [mailto:helgaas@kernel.org]
> >>> Sent: Wednesday, February 3, 2016 10:25 AM
> >>> To: Jake Oshins <jakeo@microsoft.com>
[snip]
> >>>>
> >>>> +#ifndef pci_root_bus_fwnode
> >>>> +#define pci_root_bus_fwnode(bus)	((void)(bus), NULL)
> >>>
> >>> Huh, interesting.  This is new for me; I guess the idea is that we at least
> >>> evaluate "bus" even when pci_root_bus_fwnode isn't defined, so the
> >>> compiler can catch egregious errors?
> >>>
> >>
> >> This was a suggestion by Mark Zyngier.  It made the non-x86 architectures
> build benignly.  If you'd like it done differently, I'm open to suggestion.
> 
> I don't remember suggesting the use of the comma operator, but just to
> check that pci_root_bus_fwnode wasn't previously defined.
> 
> > Something like "#define pci_root_bus_fwnode(bus) NULL" would be
> > typical.  What I'm curious about is the use of the comma operator.
> > I'm not opposed to it; I'm just trying to understand why it makes a
> > difference.
> 
> I guess it flags the variable as used, and prevents an overly sensitive
> compiler from being loud and obnoxious... Just a guess though.
> 
> 	M.
> --

I was just copying the form that was in the code that Marc pointed out, somewhere else.  I have no particular attachment to this construct.  Honestly, since I'm still relatively new to the Linux codebase, I just assumed that was a common form that I should follow suit on.  If you tell me that the simpler NULL is more typical, I prefer that.  I'll simplify this when I resend the patch series.

Thanks,
Jake

--
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
diff mbox

Patch

diff --git a/arch/x86/include/asm/pci.h b/arch/x86/include/asm/pci.h
index 4625943..6fc3c7c 100644
--- a/arch/x86/include/asm/pci.h
+++ b/arch/x86/include/asm/pci.h
@@ -20,6 +20,9 @@  struct pci_sysdata {
 #ifdef CONFIG_X86_64
 	void		*iommu;		/* IOMMU private data */
 #endif
+#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
+	void		*fwnode;	/* IRQ domain for MSI assignment */
+#endif
 };
 
 extern int pci_routeirq;
@@ -32,6 +35,7 @@  extern int noioapicreroute;
 static inline int pci_domain_nr(struct pci_bus *bus)
 {
 	struct pci_sysdata *sd = bus->sysdata;
+
 	return sd->domain;
 }
 
@@ -41,6 +45,17 @@  static inline int pci_proc_domain(struct pci_bus *bus)
 }
 #endif
 
+#ifdef CONFIG_PCI_MSI_IRQ_DOMAIN
+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
    already-configured bus numbers - to be used for buggy BIOSes
    or architectures with incomplete PCI setup by the loader */
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 6d7ab9b..b207e74 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -15,6 +15,7 @@ 
 #include <linux/pci-aspm.h>
 #include <linux/aer.h>
 #include <linux/acpi.h>
+#include <linux/irqdomain.h>
 #include <asm-generic/pci-bridge.h>
 #include "pci.h"
 
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 27df4a6..cd05a8e 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -1515,6 +1515,10 @@  static inline int pci_get_new_domain_nr(void) { return -ENOSYS; }
 
 #include <asm/pci.h>
 
+#ifndef pci_root_bus_fwnode
+#define pci_root_bus_fwnode(bus)	((void)(bus), NULL)
+#endif
+
 /* these helpers provide future and backwards compatibility
  * for accessing popular PCI BAR info */
 #define pci_resource_start(dev, bar)	((dev)->resource[(bar)].start)