Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Sreekanth Reddy and committed by
Martin K. Petersen
48d6f0a6 381abbd1

+4 -9
+4 -9
drivers/scsi/mpt3sas/mpt3sas_base.c
··· 2979 2979 _base_check_and_enable_high_iops_queues(struct MPT3SAS_ADAPTER *ioc, 2980 2980 int hba_msix_vector_count) 2981 2981 { 2982 - enum pci_bus_speed speed = PCI_SPEED_UNKNOWN; 2982 + u16 lnksta, speed; 2983 2983 2984 2984 if (perf_mode == MPT_PERF_MODE_IOPS || 2985 2985 perf_mode == MPT_PERF_MODE_LATENCY) { ··· 2989 2989 2990 2990 if (perf_mode == MPT_PERF_MODE_DEFAULT) { 2991 2991 2992 - speed = pcie_get_speed_cap(ioc->pdev); 2993 - dev_info(&ioc->pdev->dev, "PCIe device speed is %s\n", 2994 - speed == PCIE_SPEED_2_5GT ? "2.5GHz" : 2995 - speed == PCIE_SPEED_5_0GT ? "5.0GHz" : 2996 - speed == PCIE_SPEED_8_0GT ? "8.0GHz" : 2997 - speed == PCIE_SPEED_16_0GT ? "16.0GHz" : 2998 - "Unknown"); 2992 + pcie_capability_read_word(ioc->pdev, PCI_EXP_LNKSTA, &lnksta); 2993 + speed = lnksta & PCI_EXP_LNKSTA_CLS; 2999 2994 3000 - if (speed < PCIE_SPEED_16_0GT) { 2995 + if (speed < 0x4) { 3001 2996 ioc->high_iops_queues = 0; 3002 2997 return; 3003 2998 }