Skip to content

Commit 0ac448e

Browse files
mwpastorebjorn-helgaas
authored andcommitted
PCI: Delay after FLR of Solidigm P44 Pro NVMe
Prevent KVM hang when a Solidgm P44 Pro NVMe is passed through to a guest via IOMMU and the guest is subsequently rebooted. A similar issue was identified and patched by 51ba094 ("PCI: Delay after FLR of Intel DC P3700 NVMe") and the same fix can be applied for this case. (Intel spun off their NAND and SSD business as Solidigm and sold it to SK Hynix in late 2021.) Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mike Pastore <[email protected]> Signed-off-by: Bjorn Helgaas <[email protected]>
1 parent ac9a786 commit 0ac448e

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

drivers/pci/quirks.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3993,10 +3993,11 @@ static int nvme_disable_and_flr(struct pci_dev *dev, bool probe)
39933993
}
39943994

39953995
/*
3996-
* Intel DC P3700 NVMe controller will timeout waiting for ready status
3997-
* to change after NVMe enable if the driver starts interacting with the
3998-
* device too soon after FLR. A 250ms delay after FLR has heuristically
3999-
* proven to produce reliably working results for device assignment cases.
3996+
* Some NVMe controllers such as Intel DC P3700 and Solidigm P44 Pro will
3997+
* timeout waiting for ready status to change after NVMe enable if the driver
3998+
* starts interacting with the device too soon after FLR. A 250ms delay after
3999+
* FLR has heuristically proven to produce reliably working results for device
4000+
* assignment cases.
40004001
*/
40014002
static int delay_250ms_after_flr(struct pci_dev *dev, bool probe)
40024003
{
@@ -4083,6 +4084,7 @@ static const struct pci_dev_reset_methods pci_dev_reset_methods[] = {
40834084
{ PCI_VENDOR_ID_SAMSUNG, 0xa804, nvme_disable_and_flr },
40844085
{ PCI_VENDOR_ID_INTEL, 0x0953, delay_250ms_after_flr },
40854086
{ PCI_VENDOR_ID_INTEL, 0x0a54, delay_250ms_after_flr },
4087+
{ PCI_VENDOR_ID_SOLIDIGM, 0xf1ac, delay_250ms_after_flr },
40864088
{ PCI_VENDOR_ID_CHELSIO, PCI_ANY_ID,
40874089
reset_chelsio_generic_dev },
40884090
{ PCI_VENDOR_ID_HUAWEI, PCI_DEVICE_ID_HINIC_VF,

include/linux/pci_ids.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@
158158

159159
#define PCI_VENDOR_ID_LOONGSON 0x0014
160160

161+
#define PCI_VENDOR_ID_SOLIDIGM 0x025e
162+
161163
#define PCI_VENDOR_ID_TTTECH 0x0357
162164
#define PCI_DEVICE_ID_TTTECH_MC322 0x000a
163165

0 commit comments

Comments
 (0)