From: Logan Gunthorpe <logang@deltatee.com> To: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, linux-rdma@vger.kernel.org Cc: Bjorn Helgaas <bhelgaas@google.com>, Christoph Hellwig <hch@lst.de>, Christian Koenig <Christian.Koenig@amd.com>, Jason Gunthorpe <jgg@mellanox.com>, Sagi Grimberg <sagi@grimberg.me>, Keith Busch <kbusch@kernel.org>, Jens Axboe <axboe@fb.com>, Dan Williams <dan.j.williams@intel.com>, Eric Pilmore <epilmore@gigaio.com>, Stephen Bates <sbates@raithlin.com>, Logan Gunthorpe <logang@deltatee.com> Subject: [PATCH 05/14] PCI/P2PDMA: Factor out host_bridge_whitelist() Date: Mon, 22 Jul 2019 17:08:50 -0600 [thread overview] Message-ID: <20190722230859.5436-6-logang@deltatee.com> (raw) In-Reply-To: <20190722230859.5436-1-logang@deltatee.com> Push both PCI devices into the whitelist checking function seeing some hardware will require us ensuring they are on the same host bridge. At the same time we rename root_complex_whitelist() to host_bridge_whitelist() to match the terminology used in the code. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> --- drivers/pci/p2pdma.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c index 25663c1d8bc9..dfb802afc8ca 100644 --- a/drivers/pci/p2pdma.c +++ b/drivers/pci/p2pdma.c @@ -250,19 +250,11 @@ static void seq_buf_print_bus_devfn(struct seq_buf *buf, struct pci_dev *pdev) seq_buf_printf(buf, "%s;", pci_name(pdev)); } -/* - * If we can't find a common upstream bridge take a look at the root - * complex and compare it to a whitelist of known good hardware. - */ -static bool root_complex_whitelist(struct pci_dev *dev) +static bool __host_bridge_whitelist(struct pci_host_bridge *host) { - struct pci_host_bridge *host = pci_find_host_bridge(dev->bus); struct pci_dev *root = pci_get_slot(host->bus, PCI_DEVFN(0, 0)); unsigned short vendor, device; - if (iommu_present(dev->dev.bus)) - return false; - if (!root) return false; @@ -277,6 +269,24 @@ static bool root_complex_whitelist(struct pci_dev *dev) return false; } +/* + * If we can't find a common upstream bridge take a look at the root + * complex and compare it to a whitelist of known good hardware. + */ +static bool host_bridge_whitelist(struct pci_dev *a, struct pci_dev *b) +{ + struct pci_host_bridge *host_a = pci_find_host_bridge(a->bus); + struct pci_host_bridge *host_b = pci_find_host_bridge(b->bus); + + if (iommu_present(a->dev.bus) || iommu_present(b->dev.bus)) + return false; + + if (__host_bridge_whitelist(host_a) && __host_bridge_whitelist(host_b)) + return true; + + return false; +} + enum { /* * Thes arbitrary offset are or'd onto the upstream distance @@ -412,8 +422,7 @@ static int upstream_bridge_distance(struct pci_dev *provider, if (!(dist & P2PDMA_THRU_HOST_BRIDGE)) goto store_and_return; - if (!root_complex_whitelist(provider) || - !root_complex_whitelist(client)) + if (!host_bridge_whitelist(provider, client)) dist |= P2PDMA_NOT_SUPPORTED; store_and_return: -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: logang@deltatee.com (Logan Gunthorpe) Subject: [PATCH 05/14] PCI/P2PDMA: Factor out host_bridge_whitelist() Date: Mon, 22 Jul 2019 17:08:50 -0600 [thread overview] Message-ID: <20190722230859.5436-6-logang@deltatee.com> (raw) In-Reply-To: <20190722230859.5436-1-logang@deltatee.com> Push both PCI devices into the whitelist checking function seeing some hardware will require us ensuring they are on the same host bridge. At the same time we rename root_complex_whitelist() to host_bridge_whitelist() to match the terminology used in the code. Signed-off-by: Logan Gunthorpe <logang at deltatee.com> --- drivers/pci/p2pdma.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c index 25663c1d8bc9..dfb802afc8ca 100644 --- a/drivers/pci/p2pdma.c +++ b/drivers/pci/p2pdma.c @@ -250,19 +250,11 @@ static void seq_buf_print_bus_devfn(struct seq_buf *buf, struct pci_dev *pdev) seq_buf_printf(buf, "%s;", pci_name(pdev)); } -/* - * If we can't find a common upstream bridge take a look at the root - * complex and compare it to a whitelist of known good hardware. - */ -static bool root_complex_whitelist(struct pci_dev *dev) +static bool __host_bridge_whitelist(struct pci_host_bridge *host) { - struct pci_host_bridge *host = pci_find_host_bridge(dev->bus); struct pci_dev *root = pci_get_slot(host->bus, PCI_DEVFN(0, 0)); unsigned short vendor, device; - if (iommu_present(dev->dev.bus)) - return false; - if (!root) return false; @@ -277,6 +269,24 @@ static bool root_complex_whitelist(struct pci_dev *dev) return false; } +/* + * If we can't find a common upstream bridge take a look at the root + * complex and compare it to a whitelist of known good hardware. + */ +static bool host_bridge_whitelist(struct pci_dev *a, struct pci_dev *b) +{ + struct pci_host_bridge *host_a = pci_find_host_bridge(a->bus); + struct pci_host_bridge *host_b = pci_find_host_bridge(b->bus); + + if (iommu_present(a->dev.bus) || iommu_present(b->dev.bus)) + return false; + + if (__host_bridge_whitelist(host_a) && __host_bridge_whitelist(host_b)) + return true; + + return false; +} + enum { /* * Thes arbitrary offset are or'd onto the upstream distance @@ -412,8 +422,7 @@ static int upstream_bridge_distance(struct pci_dev *provider, if (!(dist & P2PDMA_THRU_HOST_BRIDGE)) goto store_and_return; - if (!root_complex_whitelist(provider) || - !root_complex_whitelist(client)) + if (!host_bridge_whitelist(provider, client)) dist |= P2PDMA_NOT_SUPPORTED; store_and_return: -- 2.20.1
next prev parent reply other threads:[~2019-07-22 23:10 UTC|newest] Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-07-22 23:08 [PATCH 00/14] PCI/P2PDMA: Support transactions that hit the host bridge Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 01/14] PCI/P2PDMA: Add constants for not-supported result upstream_bridge_distance() Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-23 16:20 ` Koenig, Christian 2019-07-23 16:20 ` Koenig, Christian 2019-07-22 23:08 ` [PATCH 02/14] PCI/P2PDMA: Factor out __upstream_bridge_distance() Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 03/14] PCI/P2PDMA: Apply host bridge white list for ACS Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-23 16:23 ` Koenig, Christian 2019-07-23 16:23 ` Koenig, Christian 2019-07-22 23:08 ` [PATCH 04/14] PCI/P2PDMA: Cache the result of upstream_bridge_distance() Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe [this message] 2019-07-22 23:08 ` [PATCH 05/14] PCI/P2PDMA: Factor out host_bridge_whitelist() Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 06/14] PCI/P2PDMA: Add whitelist support for Intel Host Bridges Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-25 18:52 ` Jason Gunthorpe 2019-07-25 18:52 ` Jason Gunthorpe 2019-07-25 19:14 ` Logan Gunthorpe 2019-07-25 19:14 ` Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 07/14] PCI/P2PDMA: Add the provider's pci_dev to the dev_pgmap struct Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-24 6:32 ` Christoph Hellwig 2019-07-24 6:32 ` Christoph Hellwig 2019-07-24 15:50 ` Logan Gunthorpe 2019-07-24 15:50 ` Logan Gunthorpe 2019-07-25 6:02 ` Christoph Hellwig 2019-07-25 6:02 ` Christoph Hellwig 2019-07-22 23:08 ` [PATCH 08/14] PCI/P2PDMA: Add attrs argument to pci_p2pdma_map_sg() Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 09/14] PCI/P2PDMA: Introduce pci_p2pdma_unmap_sg() Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 10/14] PCI/P2PDMA: Factor out __pci_p2pdma_map_sg() Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 11/14] PCI/P2PDMA: dma_map P2PDMA map requests that traverse the host bridge Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-24 6:32 ` Christoph Hellwig 2019-07-24 6:32 ` Christoph Hellwig 2019-07-24 15:58 ` Logan Gunthorpe 2019-07-24 15:58 ` Logan Gunthorpe 2019-07-25 6:10 ` Christoph Hellwig 2019-07-25 6:10 ` Christoph Hellwig 2019-07-25 16:00 ` Logan Gunthorpe 2019-07-25 16:00 ` Logan Gunthorpe 2019-07-25 16:34 ` Jason Gunthorpe 2019-07-25 16:34 ` Jason Gunthorpe 2019-07-25 17:22 ` Logan Gunthorpe 2019-07-25 17:22 ` Logan Gunthorpe 2019-07-25 18:58 ` Jason Gunthorpe 2019-07-25 18:58 ` Jason Gunthorpe 2019-07-25 19:17 ` Logan Gunthorpe 2019-07-25 19:17 ` Logan Gunthorpe 2019-07-25 19:29 ` Jason Gunthorpe 2019-07-25 19:29 ` Jason Gunthorpe 2019-07-25 19:36 ` Logan Gunthorpe 2019-07-25 19:36 ` Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 12/14] PCI/P2PDMA: No longer require no-mmu for host bridge whitelist Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 13/14] PCI/P2PDMA: Update documentation for pci_p2pdma_distance_many() Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-22 23:08 ` [PATCH 14/14] PCI/P2PDMA: Introduce pci_p2pdma_[un]map_resource() Logan Gunthorpe 2019-07-22 23:08 ` Logan Gunthorpe 2019-07-23 16:28 ` Koenig, Christian 2019-07-23 16:28 ` Koenig, Christian 2019-07-23 16:58 ` Logan Gunthorpe 2019-07-23 16:58 ` Logan Gunthorpe 2019-07-24 6:32 ` Christoph Hellwig 2019-07-24 6:32 ` Christoph Hellwig 2019-07-24 16:06 ` Logan Gunthorpe 2019-07-24 16:06 ` Logan Gunthorpe 2019-07-25 11:50 ` Christoph Hellwig 2019-07-25 11:50 ` Christoph Hellwig 2019-07-25 16:00 ` Logan Gunthorpe 2019-07-25 16:00 ` Logan Gunthorpe 2019-07-23 16:30 ` [PATCH 00/14] PCI/P2PDMA: Support transactions that hit the host bridge Koenig, Christian 2019-07-23 16:30 ` Koenig, Christian 2019-07-23 16:58 ` Logan Gunthorpe 2019-07-23 16:58 ` Logan Gunthorpe
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=20190722230859.5436-6-logang@deltatee.com \ --to=logang@deltatee.com \ --cc=Christian.Koenig@amd.com \ --cc=axboe@fb.com \ --cc=bhelgaas@google.com \ --cc=dan.j.williams@intel.com \ --cc=epilmore@gigaio.com \ --cc=hch@lst.de \ --cc=jgg@mellanox.com \ --cc=kbusch@kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nvme@lists.infradead.org \ --cc=linux-pci@vger.kernel.org \ --cc=linux-rdma@vger.kernel.org \ --cc=sagi@grimberg.me \ --cc=sbates@raithlin.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: linkBe 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.