From: Bjorn Helgaas <bhelgaas@google.com>
To: Lucas Stach <l.stach@pengutronix.de>
Cc: Thierry Reding <thierry.reding@gmail.com>,
linux-tegra@vger.kernel.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH v3 1/2] PCI: add helper function to find root port for device
Date: Fri, 23 Jan 2015 16:34:24 -0600 [thread overview]
Message-ID: <20150123223424.GN29776@google.com> (raw)
In-Reply-To: <1421179048-25370-1-git-send-email-l.stach@pengutronix.de>
On Tue, Jan 13, 2015 at 08:57:27PM +0100, Lucas Stach wrote:
> This adds a simple way to get the root port a given device
> is connected to.
>
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
> ---
> v2: new patch in v2
> v3: rename to pci_find_rootport to fit better with other API
> ---
> drivers/pci/search.c | 20 ++++++++++++++++++++
> include/linux/pci.h | 1 +
> 2 files changed, 21 insertions(+)
>
> diff --git a/drivers/pci/search.c b/drivers/pci/search.c
> index a20ce7d5e2a7..7254f126096d 100644
> --- a/drivers/pci/search.c
> +++ b/drivers/pci/search.c
> @@ -384,3 +384,23 @@ int pci_dev_present(const struct pci_device_id *ids)
> return 0;
> }
> EXPORT_SYMBOL(pci_dev_present);
> +
> +/**
> + * pci_find_root_port - Returns the root port the given device is connected to.
> + * @dev: PCI device for which the root port should be found.
> + */
> +struct pci_dev *pci_find_root_port(struct pci_dev *dev)
This seems a little too generic. There are still PCI (non-PCIe) systems,
and on those this will return some non-Root Port device, the meaning of
which is unclear. I'm happy to put something like this in pci-tegra.c, but
until there are other potential users and we sort out the PCI/PCIe-ness of
the interface, I don't really want to make it global and exported.
> +{
> + struct pci_bus *bus = dev->bus;
> +
> + /* If there is no bridge on the bus the passed device is a root port. */
This assumption is false -- see the comment at pci_is_root_bus().
> + if (!bus->self)
> + return dev;
> +
> + /* Walk up the PCI hierarchy to the first level below the root. */
> + while (bus->parent && bus->parent->self)
> + bus = bus->parent;
> +
> + return bus->self;
> +}
> +EXPORT_SYMBOL(pci_find_root_port);
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 360a966a97a5..f4321c5ba653 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -844,6 +844,7 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
> }
> struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
> int pci_dev_present(const struct pci_device_id *ids);
> +struct pci_dev *pci_find_root_port(struct pci_dev *dev);
>
> int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn,
> int where, u8 *val);
> --
> 2.1.4
>
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
To: Lucas Stach <l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Cc: Thierry Reding
<thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v3 1/2] PCI: add helper function to find root port for device
Date: Fri, 23 Jan 2015 16:34:24 -0600 [thread overview]
Message-ID: <20150123223424.GN29776@google.com> (raw)
In-Reply-To: <1421179048-25370-1-git-send-email-l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
On Tue, Jan 13, 2015 at 08:57:27PM +0100, Lucas Stach wrote:
> This adds a simple way to get the root port a given device
> is connected to.
>
> Signed-off-by: Lucas Stach <l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
> ---
> v2: new patch in v2
> v3: rename to pci_find_rootport to fit better with other API
> ---
> drivers/pci/search.c | 20 ++++++++++++++++++++
> include/linux/pci.h | 1 +
> 2 files changed, 21 insertions(+)
>
> diff --git a/drivers/pci/search.c b/drivers/pci/search.c
> index a20ce7d5e2a7..7254f126096d 100644
> --- a/drivers/pci/search.c
> +++ b/drivers/pci/search.c
> @@ -384,3 +384,23 @@ int pci_dev_present(const struct pci_device_id *ids)
> return 0;
> }
> EXPORT_SYMBOL(pci_dev_present);
> +
> +/**
> + * pci_find_root_port - Returns the root port the given device is connected to.
> + * @dev: PCI device for which the root port should be found.
> + */
> +struct pci_dev *pci_find_root_port(struct pci_dev *dev)
This seems a little too generic. There are still PCI (non-PCIe) systems,
and on those this will return some non-Root Port device, the meaning of
which is unclear. I'm happy to put something like this in pci-tegra.c, but
until there are other potential users and we sort out the PCI/PCIe-ness of
the interface, I don't really want to make it global and exported.
> +{
> + struct pci_bus *bus = dev->bus;
> +
> + /* If there is no bridge on the bus the passed device is a root port. */
This assumption is false -- see the comment at pci_is_root_bus().
> + if (!bus->self)
> + return dev;
> +
> + /* Walk up the PCI hierarchy to the first level below the root. */
> + while (bus->parent && bus->parent->self)
> + bus = bus->parent;
> +
> + return bus->self;
> +}
> +EXPORT_SYMBOL(pci_find_root_port);
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 360a966a97a5..f4321c5ba653 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -844,6 +844,7 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
> }
> struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
> int pci_dev_present(const struct pci_device_id *ids);
> +struct pci_dev *pci_find_root_port(struct pci_dev *dev);
>
> int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn,
> int where, u8 *val);
> --
> 2.1.4
>
next prev parent reply other threads:[~2015-01-23 22:34 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-13 19:57 [PATCH v3 1/2] PCI: add helper function to find root port for device Lucas Stach
2015-01-13 19:57 ` [PATCH v3 2/2] PCI: tegra: apply relaxed ordering fixup only on Tegra Lucas Stach
2015-01-13 19:57 ` Lucas Stach
2015-01-23 22:40 ` Bjorn Helgaas
2015-01-23 22:40 ` Bjorn Helgaas
2015-01-23 22:34 ` Bjorn Helgaas [this message]
2015-01-23 22:34 ` [PATCH v3 1/2] PCI: add helper function to find root port for device Bjorn Helgaas
2015-03-30 10:36 ` Lucas Stach
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150123223424.GN29776@google.com \
--to=bhelgaas@google.com \
--cc=l.stach@pengutronix.de \
--cc=linux-pci@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=thierry.reding@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.