summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/mpt3sas
diff options
context:
space:
mode:
authorSreekanth Reddy <sreekanth.reddy@broadcom.com>2019-06-24 16:42:54 +0200
committerMartin K. Petersen <martin.petersen@oracle.com>2019-06-27 04:58:34 +0200
commit48d6f0a6a5595abb38d899dbf8ca09f7dc858d2b (patch)
treea6483c319e1636dca82ec7248f6ecaf23d2f732d /drivers/scsi/mpt3sas
parentscsi: mpt3sas: Remove CPU arch check to determine perf_mode (diff)
downloadlinux-48d6f0a6a5595abb38d899dbf8ca09f7dc858d2b.tar.xz
linux-48d6f0a6a5595abb38d899dbf8ca09f7dc858d2b.zip
scsi: mpt3sas: Use configured PCIe link speed, not max
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>
Diffstat (limited to 'drivers/scsi/mpt3sas')
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_base.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index d55f13495b20..8a47e0238a11 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -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;
}