From: Wei Yang <weiyang@linux.vnet.ibm.com>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: Wei Yang <weiyang@linux.vnet.ibm.com>,
benh@au1.ibm.com, linux-pci@vger.kernel.org,
gwshan@linux.vnet.ibm.com, yan@linux.vnet.ibm.com,
qiudayu@linux.vnet.ibm.com, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH V7 02/17] PCI/IOV: Get VF BAR size from hardware directly when platform needs
Date: Wed, 20 Aug 2014 10:31:18 +0800 [thread overview]
Message-ID: <20140820023118.GB6904@richard> (raw)
In-Reply-To: <20140819214459.GC6295@google.com>
On Tue, Aug 19, 2014 at 03:44:59PM -0600, Bjorn Helgaas wrote:
>On Thu, Jul 24, 2014 at 02:22:12PM +0800, Wei Yang wrote:
>> Current implementation calculates VF BAR size from dividing the total size of
>> IOV BAR by total VF number. It won't work on PowerNV platform because we're
>> going to expand IOV BAR size for finely alignment.
>>
>> The patch enforces getting IOV BAR size from hardware and then calculate
>> the VF BAR size based on that when platform wants so.
>>
>> Signed-off-by: Wei Yang <weiyang@linux.vnet.ibm.com>
>> ---
>> drivers/pci/iov.c | 28 ++++++++++++++++++++++++----
>> include/linux/ioport.h | 1 +
>> 2 files changed, 25 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
>> index 7566238..ef1c546 100644
>> --- a/drivers/pci/iov.c
>> +++ b/drivers/pci/iov.c
>> @@ -55,6 +55,9 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
>> struct resource *res;
>> struct pci_sriov *iov = dev->sriov;
>> struct pci_bus *bus;
>> + struct resource tmp;
>> + enum pci_bar_type type;
>> + int reg;
>>
>> mutex_lock(&iov->dev->sriov->lock);
>> bus = virtfn_add_bus(dev->bus, pci_iov_virtfn_bus(dev, id));
>> @@ -80,12 +83,29 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
>> continue;
>> virtfn->resource[i].name = pci_name(virtfn);
>> virtfn->resource[i].flags = res->flags;
>> - size = resource_size(res);
>> - do_div(size, iov->total_VFs);
>> + /* When res has IORESOURCE_ARCH, retrieve the IOV BAR size
>> + * from hardware directly.
>> + */
>> + if (res->flags & IORESOURCE_ARCH) {
>> + reg = pci_iov_resource_bar(dev, i + PCI_IOV_RESOURCES, &type);
>> + __pci_read_base(dev, type, &tmp, reg);
>> + size = resource_size(&tmp);
>> + /* When __pci_read_base fails, flags is set to 0.
>> + * In this case, reset size to 0, which means the VF
>> + * will not be enabled.
>> + */
>> + if (!tmp.flags)
>> + size = 0;
>
>I don't like the IORESOURCE_ARCH flag because it really doesn't have any
>specific meaning. You're using it to enable some arch-specific code here
>for this specific case. But there are any number of other places that
>could do something similar, and there's no way to coordinate them all.
>
>I'd rather have some sort of pcibios_*() hook here where powerpc could
>override the default implementation.
Yep, got it. I will write a pcibios_sriov_resource_size() and override it in
powerpc arch.
>
>> + } else {
>> + size = resource_size(res);
>> + do_div(size, iov->total_VFs);
>> + }
>> virtfn->resource[i].start = res->start + size * id;
>> virtfn->resource[i].end = virtfn->resource[i].start + size - 1;
>> - rc = request_resource(res, &virtfn->resource[i]);
>> - BUG_ON(rc);
>> + if (resource_size(&virtfn->resource[i])) {
>> + rc = request_resource(res, &virtfn->resource[i]);
>> + BUG_ON(rc);
>> + }
>> }
>>
>> if (reset)
>> diff --git a/include/linux/ioport.h b/include/linux/ioport.h
>> index 5e3a906..de8b57c 100644
>> --- a/include/linux/ioport.h
>> +++ b/include/linux/ioport.h
>> @@ -48,6 +48,7 @@ struct resource {
>> #define IORESOURCE_MEM_64 0x00100000
>> #define IORESOURCE_WINDOW 0x00200000 /* forwarded by bridge */
>> #define IORESOURCE_MUXED 0x00400000 /* Resource is software muxed */
>> +#define IORESOURCE_ARCH 0x00800000 /* Resource arch tagged */
>>
>> #define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */
>> #define IORESOURCE_DISABLED 0x10000000
>> --
>> 1.7.9.5
>>
--
Richard Yang
Help you, Help me
next prev parent reply other threads:[~2014-08-20 2:31 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-24 6:22 [PATCH V7 00/17] Enable SRIOV on POWER8 Wei Yang
2014-07-24 6:22 ` [PATCH V7 01/17] PCI/IOV: Export interface for retrieve VF's BDF Wei Yang
2014-08-19 21:37 ` Bjorn Helgaas
2014-08-20 2:25 ` Wei Yang
2014-07-24 6:22 ` [PATCH V7 02/17] PCI/IOV: Get VF BAR size from hardware directly when platform needs Wei Yang
2014-08-19 21:44 ` Bjorn Helgaas
2014-08-20 2:31 ` Wei Yang [this message]
2014-07-24 6:22 ` [PATCH V7 03/17] PCI: Add weak pcibios_sriov_resource_alignment() interface Wei Yang
2014-07-24 6:22 ` [PATCH V7 04/17] PCI: Take additional IOV BAR alignment in sizing and assigning Wei Yang
2014-08-20 3:08 ` Bjorn Helgaas
2014-08-20 6:14 ` Wei Yang
2014-08-28 2:34 ` Wei Yang
2014-09-09 20:09 ` Bjorn Helgaas
2014-09-10 3:27 ` Wei Yang
2014-07-24 6:22 ` [PATCH V7 05/17] powerpc/pci: Don't unset pci resources for VFs Wei Yang
2014-07-24 6:22 ` [PATCH V7 06/17] powerpc/pci: Define pcibios_disable_device() on powerpc Wei Yang
2014-07-24 6:22 ` [PATCH V7 07/17] powrepc/pci: Refactor pci_dn Wei Yang
2014-07-24 6:22 ` [PATCH V7 08/17] powerpc/powernv: Use pci_dn in PCI config accessor Wei Yang
2014-07-24 6:22 ` [PATCH V7 09/17] powerpc/powernv: mark IOV BAR with IORESOURCE_ARCH Wei Yang
2014-07-24 6:22 ` [PATCH V7 10/17] powerpc/powernv: Allocate pe->iommu_table dynamically Wei Yang
2014-07-24 6:22 ` [PATCH V7 11/17] powerpc/powernv: Add function to deconfig a PE Wei Yang
2014-07-24 6:22 ` [PATCH V7 12/17] powerpc/powernv: Expand VF resources according to the number of total_pe Wei Yang
2014-07-24 6:22 ` [PATCH V7 13/17] powerpc/powernv: Implement pcibios_sriov_resource_alignment on powernv Wei Yang
2014-07-24 6:22 ` [PATCH V7 14/17] powerpc/powernv: Shift VF resource with an offset Wei Yang
2014-07-24 6:22 ` [PATCH V7 15/17] powerpc/powernv: Allocate VF PE Wei Yang
2014-07-24 6:22 ` [PATCH V7 16/17] powerpc/powernv: Expanding IOV BAR, with m64_per_iov supported Wei Yang
2014-07-24 6:22 ` [PATCH V7 17/17] powerpc/powernv: Group VF PE when IOV BAR is big on PHB3 Wei Yang
2014-07-31 6:35 ` [PATCH V7 00/17] Enable SRIOV on POWER8 Benjamin Herrenschmidt
2014-08-19 21:19 ` Bjorn Helgaas
2014-08-20 2:34 ` Wei Yang
2014-08-20 3:12 ` Bjorn Helgaas
2014-08-20 3:35 ` Wei Yang
2014-10-02 15:59 ` Bjorn Helgaas
2014-10-02 23:38 ` Gavin Shan
2014-10-15 9:00 ` Wei Yang
2014-10-15 13:52 ` Bjorn Helgaas
2014-10-16 8:41 ` Wei Yang
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=20140820023118.GB6904@richard \
--to=weiyang@linux.vnet.ibm.com \
--cc=benh@au1.ibm.com \
--cc=bhelgaas@google.com \
--cc=gwshan@linux.vnet.ibm.com \
--cc=linux-pci@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=qiudayu@linux.vnet.ibm.com \
--cc=yan@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).