]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
scsi: mpt3sas: Use configured PCIe link speed, not max
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>
Mon, 24 Jun 2019 14:42:54 +0000 (10:42 -0400)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 27 Jun 2019 02:58:34 +0000 (22:58 -0400)
When enabling high iops queues, the driver should use the HBA's configured
PCIe link speed instead of looking for the maximum link speed.

I.e. enable high iops queues only if Aero/Sea HBA's configured PCIe link
speed is set to 16GT/s.

Signed-off-by: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpt3sas/mpt3sas_base.c

index d55f13495b20ee9cebcc1b15541d7a947a657bd9..8a47e0238a1176d77db90e8f200eb7c18b540c24 100644 (file)
@@ -2979,7 +2979,7 @@ static void
 _base_check_and_enable_high_iops_queues(struct MPT3SAS_ADAPTER *ioc,
                int hba_msix_vector_count)
 {
-       enum pci_bus_speed speed = PCI_SPEED_UNKNOWN;
+       u16 lnksta, speed;
 
        if (perf_mode == MPT_PERF_MODE_IOPS ||
            perf_mode == MPT_PERF_MODE_LATENCY) {
@@ -2989,15 +2989,10 @@ _base_check_and_enable_high_iops_queues(struct MPT3SAS_ADAPTER *ioc,
 
        if (perf_mode == MPT_PERF_MODE_DEFAULT) {
 
-               speed = pcie_get_speed_cap(ioc->pdev);
-               dev_info(&ioc->pdev->dev, "PCIe device speed is %s\n",
-                    speed == PCIE_SPEED_2_5GT ? "2.5GHz" :
-                    speed == PCIE_SPEED_5_0GT ? "5.0GHz" :
-                    speed == PCIE_SPEED_8_0GT ? "8.0GHz" :
-                    speed == PCIE_SPEED_16_0GT ? "16.0GHz" :
-                    "Unknown");
+               pcie_capability_read_word(ioc->pdev, PCI_EXP_LNKSTA, &lnksta);
+               speed = lnksta & PCI_EXP_LNKSTA_CLS;
 
-               if (speed < PCIE_SPEED_16_0GT) {
+               if (speed < 0x4) {
                        ioc->high_iops_queues = 0;
                        return;
                }