+++ /dev/null
-From a262bb7e7cd34d74d4999da76f93bf682f01e883 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 16 Aug 2019 14:48:06 +1000
-Subject: powerpc/eeh: Clear stale EEH_DEV_NO_HANDLER flag
-
-From: Sam Bobroff <sbobroff@linux.ibm.com>
-
-[ Upstream commit aa06e3d60e245284d1e55497eb3108828092818d ]
-
-The EEH_DEV_NO_HANDLER flag is used by the EEH system to prevent the
-use of driver callbacks in drivers that have been bound part way
-through the recovery process. This is necessary to prevent later stage
-handlers from being called when the earlier stage handlers haven't,
-which can be confusing for drivers.
-
-However, the flag is set for all devices that are added after boot
-time and only cleared at the end of the EEH recovery process. This
-results in hot plugged devices erroneously having the flag set during
-the first recovery after they are added (causing their driver's
-handlers to be incorrectly ignored).
-
-To remedy this, clear the flag at the beginning of recovery
-processing. The flag is still cleared at the end of recovery
-processing, although it is no longer really necessary.
-
-Also clear the flag during eeh_handle_special_event(), for the same
-reasons.
-
-Signed-off-by: Sam Bobroff <sbobroff@linux.ibm.com>
-Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-Link: https://lore.kernel.org/r/b8ca5629d27de74c957d4f4b250177d1b6fc4bbd.1565930772.git.sbobroff@linux.ibm.com
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- arch/powerpc/kernel/eeh_driver.c | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
-diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
-index 9837c98caabe9..045038469295d 100644
---- a/arch/powerpc/kernel/eeh_driver.c
-+++ b/arch/powerpc/kernel/eeh_driver.c
-@@ -675,6 +675,10 @@ static bool eeh_handle_normal_event(struct eeh_pe *pe)
- pr_warn("EEH: This PCI device has failed %d times in the last hour\n",
- pe->freeze_count);
-
-+ eeh_for_each_pe(pe, tmp_pe)
-+ eeh_pe_for_each_dev(tmp_pe, edev, tmp)
-+ edev->mode &= ~EEH_DEV_NO_HANDLER;
-+
- /* Walk the various device drivers attached to this slot through
- * a reset sequence, giving each an opportunity to do what it needs
- * to accomplish the reset. Each child gets a report of the
-@@ -840,7 +844,8 @@ perm_error:
-
- static void eeh_handle_special_event(void)
- {
-- struct eeh_pe *pe, *phb_pe;
-+ struct eeh_pe *pe, *phb_pe, *tmp_pe;
-+ struct eeh_dev *edev, *tmp_edev;
- struct pci_bus *bus;
- struct pci_controller *hose;
- unsigned long flags;
-@@ -919,6 +924,10 @@ static void eeh_handle_special_event(void)
- (phb_pe->state & EEH_PE_RECOVERING))
- continue;
-
-+ eeh_for_each_pe(pe, tmp_pe)
-+ eeh_pe_for_each_dev(tmp_pe, edev, tmp_edev)
-+ edev->mode &= ~EEH_DEV_NO_HANDLER;
-+
- /* Notify all devices to be down */
- eeh_pe_state_clear(pe, EEH_PE_PRI_BUS);
- bus = eeh_pe_bus_get(phb_pe);
---
-2.20.1
-