diff options
Diffstat (limited to 'SOURCES/0001-Revert-nvme-pci-drop-redundant-pci_enable_pcie_error.patch')
-rw-r--r-- | SOURCES/0001-Revert-nvme-pci-drop-redundant-pci_enable_pcie_error.patch | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/SOURCES/0001-Revert-nvme-pci-drop-redundant-pci_enable_pcie_error.patch b/SOURCES/0001-Revert-nvme-pci-drop-redundant-pci_enable_pcie_error.patch new file mode 100644 index 0000000..6eac856 --- /dev/null +++ b/SOURCES/0001-Revert-nvme-pci-drop-redundant-pci_enable_pcie_error.patch @@ -0,0 +1,108 @@ +From 7d86ca8db51f6b75b5c1470d6294c6f24221f560 Mon Sep 17 00:00:00 2001 +From: GloriousEggroll <gloriouseggroll@gmail.com> +Date: Mon, 30 Oct 2023 22:36:19 -0600 +Subject: [PATCH] Revert "nvme-pci: drop redundant + pci_enable_pcie_error_reporting()" + +This reverts commits: +1ad11eafc63ac16e667853bee4273879226d2d1b +7ec4b34be4234599cf1241ef807cdb7c3636f6fe +69b264df8a412820e98867dbab871c6526c5e5aa + +--- + drivers/nvme/host/pci.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c +index 3f0c9ee09a12..bc11bfe6f87a 100644 +--- a/drivers/nvme/host/pci.c ++++ b/drivers/nvme/host/pci.c +@@ -5,6 +5,7 @@ + */ + + #include <linux/acpi.h> ++#include <linux/aer.h> + #include <linux/async.h> + #include <linux/blkdev.h> + #include <linux/blk-mq.h> +@@ -2537,6 +2538,7 @@ static int nvme_pci_enable(struct nvme_dev *dev) + + nvme_map_cmb(dev); + ++ pci_enable_pcie_error_reporting(pdev); + pci_save_state(pdev); + + result = nvme_pci_configure_admin_queue(dev); +@@ -2601,8 +2603,10 @@ static void nvme_dev_disable(struct nvme_dev *dev, bool shutdown) + nvme_suspend_io_queues(dev); + nvme_suspend_queue(dev, 0); + pci_free_irq_vectors(pdev); +- if (pci_is_enabled(pdev)) ++ if (pci_is_enabled(pdev)) { ++ pci_disable_pcie_error_reporting(pdev); + pci_disable_device(pdev); ++ } + nvme_reap_pending_cqes(dev); + + nvme_cancel_tagset(&dev->ctrl); +-- +2.41.0 +diff --git a/include/linux/aer.h b/include/linux/aer.h +index 29cc10220..94ce49a5f 100644 +--- a/include/linux/aer.h ++++ b/include/linux/aer.h +@@ -41,9 +41,20 @@ struct aer_capability_regs { + }; + + #if defined(CONFIG_PCIEAER) ++/* PCIe port driver needs this function to enable AER */ ++int pci_enable_pcie_error_reporting(struct pci_dev *dev); ++int pci_disable_pcie_error_reporting(struct pci_dev *dev); + int pci_aer_clear_nonfatal_status(struct pci_dev *dev); + int pcie_aer_is_native(struct pci_dev *dev); + #else ++static inline int pci_enable_pcie_error_reporting(struct pci_dev *dev) ++{ ++ return -EINVAL; ++} ++static inline int pci_disable_pcie_error_reporting(struct pci_dev *dev) ++{ ++ return -EINVAL; ++} + static inline int pci_aer_clear_nonfatal_status(struct pci_dev *dev) + { + return -EINVAL; + +diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c +index 9c8fd69ae..0dc7be481 100644 +--- a/drivers/pci/pcie/aer.c ++++ b/drivers/pci/pcie/aer.c +@@ -231,7 +231,7 @@ int pcie_aer_is_native(struct pci_dev *dev) + } + EXPORT_SYMBOL_NS_GPL(pcie_aer_is_native, CXL); + +-static int pci_enable_pcie_error_reporting(struct pci_dev *dev) ++int pci_enable_pcie_error_reporting(struct pci_dev *dev) + { + int rc; + +@@ -241,6 +241,19 @@ static int pci_enable_pcie_error_reporting(struct pci_dev *dev) + rc = pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_AER_FLAGS); + return pcibios_err_to_errno(rc); + } ++EXPORT_SYMBOL_GPL(pci_enable_pcie_error_reporting); ++ ++int pci_disable_pcie_error_reporting(struct pci_dev *dev) ++{ ++ int rc; ++ ++ if (!pcie_aer_is_native(dev)) ++ return -EIO; ++ ++ rc = pcie_capability_clear_word(dev, PCI_EXP_DEVCTL, PCI_EXP_AER_FLAGS); ++ return pcibios_err_to_errno(rc); ++} ++EXPORT_SYMBOL_GPL(pci_disable_pcie_error_reporting); + + int pci_aer_clear_nonfatal_status(struct pci_dev *dev) + { |