| From 3dbe97efe8bf450b183d6dee2305cbc032e6b8a4 Mon Sep 17 00:00:00 2001 |
| From: Myron Stowe <myron.stowe@redhat.com> |
| Date: Mon, 13 Aug 2018 12:19:39 -0600 |
| Subject: PCI: Skip MPS logic for Virtual Functions (VFs) |
| |
| From: Myron Stowe <myron.stowe@redhat.com> |
| |
| commit 3dbe97efe8bf450b183d6dee2305cbc032e6b8a4 upstream. |
| |
| PCIe r4.0, sec 9.3.5.4, "Device Control Register", shows both |
| Max_Payload_Size (MPS) and Max_Read_request_Size (MRRS) to be 'RsvdP' for |
| VFs. Just prior to the table it states: |
| |
| "PF and VF functionality is defined in Section 7.5.3.4 except where |
| noted in Table 9-16. For VF fields marked 'RsvdP', the PF setting |
| applies to the VF." |
| |
| All of which implies that with respect to Max_Payload_Size Supported |
| (MPSS), MPS, and MRRS values, we should not be paying any attention to the |
| VF's fields, but rather only to the PF's. Only looking at the PF's fields |
| also logically makes sense as it's the sole physical interface to the PCIe |
| bus. |
| |
| Link: https://bugzilla.kernel.org/show_bug.cgi?id=200527 |
| Fixes: 27d868b5e6cf ("PCI: Set MPS to match upstream bridge") |
| Signed-off-by: Myron Stowe <myron.stowe@redhat.com> |
| Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> |
| Cc: stable@vger.kernel.org # 4.3+ |
| Cc: Keith Busch <keith.busch@intel.com> |
| Cc: Sinan Kaya <okaya@kernel.org> |
| Cc: Dongdong Liu <liudongdong3@huawei.com> |
| Cc: Jon Mason <jdmason@kudzu.us> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/pci/probe.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/drivers/pci/probe.c |
| +++ b/drivers/pci/probe.c |
| @@ -1363,6 +1363,10 @@ static void pci_configure_mps(struct pci |
| if (!pci_is_pcie(dev) || !bridge || !pci_is_pcie(bridge)) |
| return; |
| |
| + /* MPS and MRRS fields are of type 'RsvdP' for VFs, short-circuit out */ |
| + if (dev->is_virtfn) |
| + return; |
| + |
| mps = pcie_get_mps(dev); |
| p_mps = pcie_get_mps(bridge); |
| |