On Fri, Jul 17, 2015 at 10:14:43AM +1000, Gavin Shan wrote:
>When VF BAR size is equal to 128MB or bigger than that, we extend
>the corresponding PF's IOV BAR to cover number of total VFs supported
>by the PF. Otherwise, we extend the PF's IOV BAR to cover 256 VFs.
>For the former case, we have to create compound PE, which includes
>4 VFs. Those 4 VFs included in the compound PE can't be passed through
>to different guests, which isn't good.
>
>The gate (128MB) was choosen based on the assumption that each PHB
>supports 64GB M64 space and one PF's IOV BAR can be extended to be
>as huge as 1/4 of that, which is 16GB. However, the IOV BAR can be
>extended to half of PHB's M64 window when the PF seats behind the
>root port. In that case, the gate can be enlarged to be 256MB to
>avoid compound PE as we can.
>
>Signed-off-by: Gavin Shan <gws...@linux.vnet.ibm.com>
>---
> arch/powerpc/platforms/powernv/pci-ioda.c | 21 ++++++++++++++++-----
> 1 file changed, 16 insertions(+), 5 deletions(-)
>
>diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c 
>b/arch/powerpc/platforms/powernv/pci-ioda.c
>index 6ec62b9..5b2e88f 100644
>--- a/arch/powerpc/platforms/powernv/pci-ioda.c
>+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
>@@ -2721,6 +2721,7 @@ static void pnv_pci_ioda_fixup_iov_resources(struct 
>pci_dev *pdev)
>       struct resource *res;
>       int i;
>       resource_size_t size;
>+      resource_size_t limit;
>       struct pci_dn *pdn;
>       int mul, total_vfs;
>
>@@ -2730,6 +2731,18 @@ static void pnv_pci_ioda_fixup_iov_resources(struct 
>pci_dev *pdev)
>       hose = pci_bus_to_host(pdev->bus);
>       phb = hose->private_data;
>
>+      /*
>+       * When the PF seats behind root port, the IOV BAR can
>+       * consume half of the PHB's M64 window. Otherwise,
>+       * 1/4 of the PHB's M64 window can be consumed to the
>+       * maximal degree.
>+       */
>+      if (!pci_is_root_bus(pdev->bus) &&
>+          pci_is_root_bus(pdev->bus->self->bus))
>+              limit = 128;
>+      else
>+              limit = 256;
>+

I sent it too fast. The limit should be reversed: 256 when PF seats behind the
root port. Otherwise, it should be 128. I will send follow-up v2 after waiting
for couple of days in case there are some comments for this revision.

>       pdn = pci_get_pdn(pdev);
>       pdn->vfs_expanded = 0;
>
>@@ -2748,11 +2761,9 @@ static void pnv_pci_ioda_fixup_iov_resources(struct 
>pci_dev *pdev)
>               }
>
>               size = pci_iov_resource_size(pdev, i + PCI_IOV_RESOURCES);
>-
>-              /* bigger than 64M */
>-              if (size > (1 << 26)) {
>-                      dev_info(&pdev->dev, "PowerNV: VF BAR%d: %pR IOV size 
>is bigger than 64M, roundup power2\n",
>-                               i, res);
>+              if (size >= (limit * 0x100000)) {
>+                      dev_info(&pdev->dev, "PowerNV: VF BAR%d: %pR IOV size 
>is bigger than %lldMB, roundup power2\n",
>+                               i, res, limit);
>                       pdn->m64_per_iov = M64_PER_IOV;
>                       mul = roundup_pow_of_two(total_vfs);
>                       break;

Thanks,
Gavin

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to