]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Drop pci-hv-fix-a-timing-issue-which-causes-kdump-to-fail.patch
authorSasha Levin <sashal@kernel.org>
Tue, 18 Aug 2020 00:54:33 +0000 (20:54 -0400)
committerSasha Levin <sashal@kernel.org>
Tue, 18 Aug 2020 00:54:33 +0000 (20:54 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.8/pci-hv-fix-a-timing-issue-which-causes-kdump-to-fail.patch [deleted file]
queue-5.8/series

diff --git a/queue-5.8/pci-hv-fix-a-timing-issue-which-causes-kdump-to-fail.patch b/queue-5.8/pci-hv-fix-a-timing-issue-which-causes-kdump-to-fail.patch
deleted file mode 100644 (file)
index 168776f..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-From 85f69a1777ddc1b0f49608a99e61a6c57a5fa42f Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Mon, 27 Jul 2020 15:17:31 +0800
-Subject: PCI: hv: Fix a timing issue which causes kdump to fail occasionally
-
-From: Wei Hu <weh@microsoft.com>
-
-[ Upstream commit d6af2ed29c7c1c311b96dac989dcb991e90ee195 ]
-
-Kdump could fail sometime on Hyper-V guest because the retry in
-hv_pci_enter_d0() releases child device structures in hv_pci_bus_exit().
-
-Although there is a second asynchronous device relations message sending
-from the host, if this message arrives to the guest after
-hv_send_resource_allocated() is called, the retry would fail.
-
-Fix the problem by moving retry to hv_pci_probe() and start the retry
-from hv_pci_query_relations() call.  This will cause a device relations
-message to arrive to the guest synchronously; the guest would then be
-able to rebuild the child device structures before calling
-hv_send_resource_allocated().
-
-Link: https://lore.kernel.org/r/20200727071731.18516-1-weh@microsoft.com
-Fixes: c81992e7f4aa ("PCI: hv: Retry PCI bus D0 entry on invalid device state")
-Signed-off-by: Wei Hu <weh@microsoft.com>
-[lorenzo.pieralisi@arm.com: fixed a comment and commit log]
-Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
-Reviewed-by: Michael Kelley <mikelley@microsoft.com>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/pci/controller/pci-hyperv.c | 71 +++++++++++++++--------------
- 1 file changed, 37 insertions(+), 34 deletions(-)
-
-diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c
-index bf40ff09c99d6..d0033ff6c1437 100644
---- a/drivers/pci/controller/pci-hyperv.c
-+++ b/drivers/pci/controller/pci-hyperv.c
-@@ -2759,10 +2759,8 @@ static int hv_pci_enter_d0(struct hv_device *hdev)
-       struct pci_bus_d0_entry *d0_entry;
-       struct hv_pci_compl comp_pkt;
-       struct pci_packet *pkt;
--      bool retry = true;
-       int ret;
--enter_d0_retry:
-       /*
-        * Tell the host that the bus is ready to use, and moved into the
-        * powered-on state.  This includes telling the host which region
-@@ -2789,38 +2787,6 @@ static int hv_pci_enter_d0(struct hv_device *hdev)
-       if (ret)
-               goto exit;
--      /*
--       * In certain case (Kdump) the pci device of interest was
--       * not cleanly shut down and resource is still held on host
--       * side, the host could return invalid device status.
--       * We need to explicitly request host to release the resource
--       * and try to enter D0 again.
--       */
--      if (comp_pkt.completion_status < 0 && retry) {
--              retry = false;
--
--              dev_err(&hdev->device, "Retrying D0 Entry\n");
--
--              /*
--               * Hv_pci_bus_exit() calls hv_send_resource_released()
--               * to free up resources of its child devices.
--               * In the kdump kernel we need to set the
--               * wslot_res_allocated to 255 so it scans all child
--               * devices to release resources allocated in the
--               * normal kernel before panic happened.
--               */
--              hbus->wslot_res_allocated = 255;
--
--              ret = hv_pci_bus_exit(hdev, true);
--
--              if (ret == 0) {
--                      kfree(pkt);
--                      goto enter_d0_retry;
--              }
--              dev_err(&hdev->device,
--                      "Retrying D0 failed with ret %d\n", ret);
--      }
--
-       if (comp_pkt.completion_status < 0) {
-               dev_err(&hdev->device,
-                       "PCI Pass-through VSP failed D0 Entry with status %x\n",
-@@ -3058,6 +3024,7 @@ static int hv_pci_probe(struct hv_device *hdev,
-       struct hv_pcibus_device *hbus;
-       u16 dom_req, dom;
-       char *name;
-+      bool enter_d0_retry = true;
-       int ret;
-       /*
-@@ -3178,11 +3145,47 @@ static int hv_pci_probe(struct hv_device *hdev,
-       if (ret)
-               goto free_fwnode;
-+retry:
-       ret = hv_pci_query_relations(hdev);
-       if (ret)
-               goto free_irq_domain;
-       ret = hv_pci_enter_d0(hdev);
-+      /*
-+       * In certain case (Kdump) the pci device of interest was
-+       * not cleanly shut down and resource is still held on host
-+       * side, the host could return invalid device status.
-+       * We need to explicitly request host to release the resource
-+       * and try to enter D0 again.
-+       * Since the hv_pci_bus_exit() call releases structures
-+       * of all its child devices, we need to start the retry from
-+       * hv_pci_query_relations() call, requesting host to send
-+       * the synchronous child device relations message before this
-+       * information is needed in hv_send_resources_allocated()
-+       * call later.
-+       */
-+      if (ret == -EPROTO && enter_d0_retry) {
-+              enter_d0_retry = false;
-+
-+              dev_err(&hdev->device, "Retrying D0 Entry\n");
-+
-+              /*
-+               * Hv_pci_bus_exit() calls hv_send_resources_released()
-+               * to free up resources of its child devices.
-+               * In the kdump kernel we need to set the
-+               * wslot_res_allocated to 255 so it scans all child
-+               * devices to release resources allocated in the
-+               * normal kernel before panic happened.
-+               */
-+              hbus->wslot_res_allocated = 255;
-+              ret = hv_pci_bus_exit(hdev, true);
-+
-+              if (ret == 0)
-+                      goto retry;
-+
-+              dev_err(&hdev->device,
-+                      "Retrying D0 failed with ret %d\n", ret);
-+      }
-       if (ret)
-               goto free_irq_domain;
--- 
-2.25.1
-
index 3a422d9e0505e1a8cb6353cfb59fdf70890571ba..844fa4fe976f29310ffde317046f1031ef643812 100644 (file)
@@ -295,7 +295,6 @@ powerpc-watchpoint-fix-dawr-exception-constraint.patch
 powerpc-watchpoint-fix-dawr-exception-for-cacheop.patch
 macintosh-via-macii-access-autopoll_devs-when-inside.patch
 gpio-regmap-fix-type-clash.patch
-pci-hv-fix-a-timing-issue-which-causes-kdump-to-fail.patch
 pci-cadence-fix-cdns_pcie_-host-ep-_setup-error-path.patch
 pci-cadence-fix-updating-vendor-id-and-subsystem-ven.patch
 rdma-core-fix-return-error-value-in-_ib_modify_qp-to.patch