From: Bjorn Helgaas <bhelgaas@google.com>
To: Will Davis <wdavis@nvidia.com>
Cc: Alex Williamson <alex.williamson@redhat.com>,
Joerg Roedel <joro@8bytes.org>,
iommu@lists.linux-foundation.org, linux-pci@vger.kernel.org,
Konrad Wilk <konrad.wilk@oracle.com>,
Mark Hounschell <markh@compro.net>,
"David S. Miller" <davem@davemloft.net>,
Jonathan Corbet <corbet@lwn.net>,
Terence Ripperda <tripperda@nvidia.com>,
John Hubbard <jhubbard@nvidia.com>,
Jerome Glisse <jglisse@redhat.com>
Subject: Re: [PATCH v4 10/12] pci: add pci_find_common_upstream_dev()
Date: Mon, 10 Aug 2015 11:51:16 -0500 [thread overview]
Message-ID: <20150810165116.GA32452@google.com> (raw)
In-Reply-To: <1437601197-6481-11-git-send-email-wdavis@nvidia.com>
On Wed, Jul 22, 2015 at 04:39:55PM -0500, Will Davis wrote:
> Adds an interface to find the first device which is upstream of both
> devices.
>
> Signed-off-by: Will Davis <wdavis@nvidia.com>
> ---
> drivers/pci/search.c | 25 +++++++++++++++++++++++++
> include/linux/pci.h | 2 ++
> 2 files changed, 27 insertions(+)
>
> diff --git a/drivers/pci/search.c b/drivers/pci/search.c
> index a20ce7d..cbd8163 100644
> --- a/drivers/pci/search.c
> +++ b/drivers/pci/search.c
> @@ -384,3 +384,28 @@ int pci_dev_present(const struct pci_device_id *ids)
> return 0;
> }
> EXPORT_SYMBOL(pci_dev_present);
> +
> +/**
> + * pci_find_common_upstream_dev - Returns the first common upstream device
> + * @from: the PCI device to search for a common upstream device from
> + * @to: the PCI device to search for a common upstream device to
> + *
> + * Walks up the bus hierarchy from the @from device, looking for the first bus
> + * which the @to device is downstream of. Returns %NULL if the devices do not
> + * share any upstream devices.
This interface looks like it should be symmetric: you should get the same
answer regardless of which device is "from" and which is "to". I would
rename the arguments to something more neutral to reflect that.
> + */
> +struct pci_dev *pci_find_common_upstream_dev(struct pci_dev *from,
> + struct pci_dev *to)
> +{
> + struct pci_dev *pdev = from;
> +
> + while (pdev != NULL) {
> + if ((to->bus->number >= pdev->bus->busn_res.start) &&
> + (to->bus->number <= pdev->bus->busn_res.end))
> + return pdev;
> + pdev = pdev->bus->self;
I think you want "pdev = pci_upstream_bridge(pdev)" here; otherwise you'll
exit the loop early if "from" is a VF on a virtual bus.
> + }
> +
> + return NULL;
> +}
> +EXPORT_SYMBOL(pci_find_common_upstream_dev);
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index d58063e..8262b9e 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -860,6 +860,8 @@ 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_common_upstream_dev(struct pci_dev *from,
> + struct pci_dev *to);
>
> int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn,
> int where, u8 *val);
> --
> 2.4.6
>
next prev parent reply other threads:[~2015-08-10 16:51 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-22 21:39 [PATCH v4 00/12] DMA-API/PCI map_peer_resource support for peer-to-peer Will Davis
2015-07-22 21:39 ` Will Davis
2015-07-22 21:39 ` [PATCH v4 03/12] dma-debug: add checking for map/unmap_peer_resource Will Davis
2015-07-22 21:39 ` Will Davis
[not found] ` <1437601197-6481-1-git-send-email-wdavis-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-07-22 21:39 ` [PATCH v4 01/12] lib/Kconfig: add HAS_DMA_P2P for peer-to-peer support Will Davis
2015-07-22 21:39 ` Will Davis
2015-07-22 21:39 ` [PATCH v4 02/12] linux/types.h: Add dma_peer_addr_t type Will Davis
2015-07-22 21:39 ` Will Davis
2015-07-22 21:39 ` [PATCH v4 04/12] DMA-API: Introduce dma_(un)map_peer_resource Will Davis
2015-07-22 21:39 ` Will Davis
2015-07-22 21:39 ` [PATCH v4 05/12] dma-mapping: pci: add pci_(un)map_peer_resource Will Davis
2015-07-22 21:39 ` Will Davis
2015-07-22 21:39 ` [PATCH v4 06/12] DMA-API: Add peer resource mapping documentation Will Davis
2015-07-22 21:39 ` Will Davis
2015-07-22 21:39 ` [PATCH v4 07/12] pci: expose pci_find_host_bridge() Will Davis
2015-07-22 21:39 ` Will Davis
2015-08-10 17:08 ` Bjorn Helgaas
2015-07-22 21:39 ` [PATCH v4 08/12] iommu/amd: Implement (un)map_peer_resource Will Davis
2015-07-22 21:39 ` Will Davis
2015-07-22 21:39 ` [PATCH v4 09/12] iommu/vt-d: implement (un)map_peer_resource Will Davis
2015-07-22 21:39 ` Will Davis
2015-08-10 17:02 ` Bjorn Helgaas
[not found] ` <20150810170217.GB32452-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2015-08-10 18:29 ` William Davis
2015-08-10 18:29 ` William Davis
2015-07-22 21:39 ` [PATCH v4 10/12] pci: add pci_find_common_upstream_dev() Will Davis
2015-07-22 21:39 ` Will Davis
2015-08-10 16:51 ` Bjorn Helgaas [this message]
2015-07-22 21:39 ` [PATCH v4 11/12] x86: add pci-nommu implementation of map_peer_resource Will Davis
2015-07-22 21:39 ` Will Davis
2015-07-22 21:39 ` [PATCH v4 12/12] x86: declare support for DMA P2P Will Davis
2015-07-22 21:39 ` Will Davis
2015-08-10 15:52 ` [PATCH v4 00/12] DMA-API/PCI map_peer_resource support for peer-to-peer Will Davis
2015-08-10 15:52 ` Will Davis
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=20150810165116.GA32452@google.com \
--to=bhelgaas@google.com \
--cc=alex.williamson@redhat.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=iommu@lists.linux-foundation.org \
--cc=jglisse@redhat.com \
--cc=jhubbard@nvidia.com \
--cc=joro@8bytes.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-pci@vger.kernel.org \
--cc=markh@compro.net \
--cc=tripperda@nvidia.com \
--cc=wdavis@nvidia.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.