From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ie0-f174.google.com ([209.85.223.174]:50968 "EHLO mail-ie0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752323AbaE1SAV (ORCPT ); Wed, 28 May 2014 14:00:21 -0400 Received: by mail-ie0-f174.google.com with SMTP id lx4so10324440iec.5 for ; Wed, 28 May 2014 11:00:21 -0700 (PDT) Date: Wed, 28 May 2014 12:00:18 -0600 From: Bjorn Helgaas To: Alex Williamson Cc: linux-pci@vger.kernel.org, iommu@lists.linux-foundation.org, acooks@gmail.com, linux-kernel@vger.kernel.org, eddy0596@gmail.com, linux@horizon.com Subject: Re: [PATCH v4 06/16] PCI: Quirk pci_for_each_dma_alias() for bridges Message-ID: <20140528180018.GS11907@google.com> References: <20140522230230.2856.40017.stgit@bling.home> <20140522230801.2856.18629.stgit@bling.home> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <20140522230801.2856.18629.stgit@bling.home> Sender: linux-pci-owner@vger.kernel.org List-ID: On Thu, May 22, 2014 at 05:08:01PM -0600, Alex Williamson wrote: > Several PCIe-to-PCI bridges fail to provide a PCIe capability, causing > us to handle them as conventional PCI devices. In some cases, this > may be correct, in others it's not. Add a dev_flag bit to identify > devices to be handled as standard PCIe-to-PCI bridges. Can you expand on the "in some cases, this may be correct, in others it's not"? Do you mean that for some *devices* it's correct to handle them as conventional PCI, or in some *situations* it's correct? Something else? I'd like to either remove that sentence or add a little more information to make it useful. I guess this probably goes along with the tests in quirk_use_pcie_bridge_dma_alias(). > Signed-off-by: Alex Williamson > --- > drivers/pci/search.c | 10 ++++++++-- > include/linux/pci.h | 2 ++ > 2 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/pci/search.c b/drivers/pci/search.c > index 2c19f3f..df38f73 100644 > --- a/drivers/pci/search.c > +++ b/drivers/pci/search.c > @@ -88,8 +88,14 @@ int pci_for_each_dma_alias(struct pci_dev *pdev, > continue; > } > } else { > - ret = fn(tmp, PCI_DEVID(tmp->bus->number, tmp->devfn), > - data); > + if (tmp->dev_flags & PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS) > + ret = fn(tmp, > + PCI_DEVID(tmp->subordinate->number, > + PCI_DEVFN(0, 0)), data); > + else > + ret = fn(tmp, > + PCI_DEVID(tmp->bus->number, > + tmp->devfn), data); > if (ret) > return ret; > } > diff --git a/include/linux/pci.h b/include/linux/pci.h > index 9d4035c..85ab35e 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -173,6 +173,8 @@ enum pci_dev_flags { > PCI_DEV_FLAGS_ACS_ENABLED_QUIRK = (__force pci_dev_flags_t) (1 << 3), > /* Flag to indicate the device uses dma_alias_devfn */ > PCI_DEV_FLAGS_DMA_ALIAS_DEVFN = (__force pci_dev_flags_t) (1 << 4), > + /* Use a PCIe-to-PCI bridge alias even if !pci_is_pcie */ > + PCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = (__force pci_dev_flags_t) (1 << 5), > }; > > enum pci_irq_reroute_variant { >