提交 7b401850 编写于 作者: G Gavin Shan 提交者: Benjamin Herrenschmidt

powerpc/eeh: EEH_PE_ISOLATED not reflect HW state

When doing PE reset, EEH_PE_ISOLATED is cleared unconditionally.
However, We should remove that if the PE reset has cleared the
frozen state successfully. Otherwise, the flag should be kept.
The patch fixes the issue.
Signed-off-by: NGavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
上级 b34497d1
...@@ -612,12 +612,6 @@ static void eeh_reset_pe_once(struct eeh_pe *pe) ...@@ -612,12 +612,6 @@ static void eeh_reset_pe_once(struct eeh_pe *pe)
#define PCI_BUS_RST_HOLD_TIME_MSEC 250 #define PCI_BUS_RST_HOLD_TIME_MSEC 250
msleep(PCI_BUS_RST_HOLD_TIME_MSEC); msleep(PCI_BUS_RST_HOLD_TIME_MSEC);
/* We might get hit with another EEH freeze as soon as the
* pci slot reset line is dropped. Make sure we don't miss
* these, and clear the flag now.
*/
eeh_pe_state_clear(pe, EEH_PE_ISOLATED);
eeh_ops->reset(pe, EEH_RESET_DEACTIVATE); eeh_ops->reset(pe, EEH_RESET_DEACTIVATE);
/* After a PCI slot has been reset, the PCI Express spec requires /* After a PCI slot has been reset, the PCI Express spec requires
...@@ -646,8 +640,10 @@ int eeh_reset_pe(struct eeh_pe *pe) ...@@ -646,8 +640,10 @@ int eeh_reset_pe(struct eeh_pe *pe)
eeh_reset_pe_once(pe); eeh_reset_pe_once(pe);
rc = eeh_ops->wait_state(pe, PCI_BUS_RESET_WAIT_MSEC); rc = eeh_ops->wait_state(pe, PCI_BUS_RESET_WAIT_MSEC);
if ((rc & flags) == flags) if ((rc & flags) == flags) {
eeh_pe_state_clear(pe, EEH_PE_ISOLATED);
return 0; return 0;
}
if (rc < 0) { if (rc < 0) {
pr_err("%s: Unrecoverable slot failure on PHB#%d-PE#%x", pr_err("%s: Unrecoverable slot failure on PHB#%d-PE#%x",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册