Each VF could have 6 BARs at most. When the total BAR size exceeds the
gate, after expanding it will also exhaust the M64 Window.

This patch limits the boundary by checking the total VF BAR size instead of
the individual BAR.

Signed-off-by: Wei Yang <weiy...@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/pci-ioda.c |   13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c 
b/arch/powerpc/platforms/powernv/pci-ioda.c
index 3e8c0b4..1e6ac86 100644
--- a/arch/powerpc/platforms/powernv/pci-ioda.c
+++ b/arch/powerpc/platforms/powernv/pci-ioda.c
@@ -2688,7 +2688,7 @@ static void pnv_pci_ioda_fixup_iov_resources(struct 
pci_dev *pdev)
        struct pnv_phb *phb;
        struct resource *res;
        int i;
-       resource_size_t size, gate;
+       resource_size_t size, gate, total_vf_bar_sz;
        struct pci_dn *pdn;
        int mul, total_vfs;
 
@@ -2715,6 +2715,7 @@ static void pnv_pci_ioda_fixup_iov_resources(struct 
pci_dev *pdev)
         * which will exhaust the M64 Space and limit the system flexibility.
         */
        gate = phb->ioda.m64_segsize >> 1;
+       total_vf_bar_sz = 0;
 
        for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
                res = &pdev->resource[i + PCI_IOV_RESOURCES];
@@ -2727,13 +2728,13 @@ static void pnv_pci_ioda_fixup_iov_resources(struct 
pci_dev *pdev)
                        return;
                }
 
-               size = pci_iov_resource_size(pdev, i + PCI_IOV_RESOURCES);
+               total_vf_bar_sz += pci_iov_resource_size(pdev,
+                               i + PCI_IOV_RESOURCES);
 
                /* bigger than or equal to gate */
-               if (size >= gate) {
-                       dev_info(&pdev->dev, "PowerNV: VF BAR%d: %pR IOV size "
-                               "is bigger than %lld, roundup power2\n",
-                                i, res, gate);
+               if (total_vf_bar_sz >= gate) {
+                       dev_info(&pdev->dev, "PowerNV: VF BAR Total IOV size "
+                               "is bigger than %lld, roundup power2\n", gate);
                        mul = roundup_pow_of_two(total_vfs);
                        pdn->m64_single_mode = true;
                        break;
-- 
1.7.9.5

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

Reply via email to