PCI: Delay after FLR of Solidigm P44 Pro NVMe
authorMike Pastore <mike@oobak.org>
Sun, 7 May 2023 07:35:19 +0000 (02:35 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 9 May 2023 21:45:19 +0000 (16:45 -0500)
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 51ba09452d11 ("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/20230507073519.9737-1-mike@oobak.org
Signed-off-by: Mike Pastore <mike@oobak.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/quirks.c
include/linux/pci_ids.h

index f4e2a88729fd144bfa125a7378153b4cd26fd34c..c1239706eeaf2f24dd4236d2b4d7732997e00bd5 100644 (file)
@@ -3993,10 +3993,11 @@ static int nvme_disable_and_flr(struct pci_dev *dev, bool probe)
 }
 
 /*
- * Intel DC P3700 NVMe controller will timeout waiting for ready status
- * to change after NVMe enable if the driver starts interacting with the
- * device too soon after FLR.  A 250ms delay after FLR has heuristically
- * proven to produce reliably working results for device assignment cases.
+ * Some NVMe controllers such as Intel DC P3700 and Solidigm P44 Pro will
+ * timeout waiting for ready status to change after NVMe enable if the driver
+ * starts interacting with the device too soon after FLR.  A 250ms delay after
+ * FLR has heuristically proven to produce reliably working results for device
+ * assignment cases.
  */
 static int delay_250ms_after_flr(struct pci_dev *dev, bool probe)
 {
@@ -4083,6 +4084,7 @@ static const struct pci_dev_reset_methods pci_dev_reset_methods[] = {
        { PCI_VENDOR_ID_SAMSUNG, 0xa804, nvme_disable_and_flr },
        { PCI_VENDOR_ID_INTEL, 0x0953, delay_250ms_after_flr },
        { PCI_VENDOR_ID_INTEL, 0x0a54, delay_250ms_after_flr },
+       { PCI_VENDOR_ID_SOLIDIGM, 0xf1ac, delay_250ms_after_flr },
        { PCI_VENDOR_ID_CHELSIO, PCI_ANY_ID,
                reset_chelsio_generic_dev },
        { PCI_VENDOR_ID_HUAWEI, PCI_DEVICE_ID_HINIC_VF,
index 45c3d62e616d858a2532b80d58a4574dcfc4a4f2..20c3403a62cd4cce59407f3288182a9c4bf17ed0 100644 (file)
 
 #define PCI_VENDOR_ID_LOONGSON         0x0014
 
+#define PCI_VENDOR_ID_SOLIDIGM         0x025e
+
 #define PCI_VENDOR_ID_TTTECH           0x0357
 #define PCI_DEVICE_ID_TTTECH_MC322     0x000a