Thread (5 messages) flat view 5 messages, 2 authors, 2015-09-25
STALE4003d

[PATCH] powerpc/eeh: Avoid to handle EEH on a passed Child PE

From: Wei Yang <hidden>
Date: 2015-09-21 09:30:47
Subsystem: linux for powerpc (32-bit and 64-bit), pci enhanced error handling (eeh) for powerpc, the rest · Maintainers: Madhavan Srinivasan, Mahesh J Salgaonkar, Linus Torvalds

Current EEH infrastructure would avoid to handle EEH when a PE is passed to
guest, while if this PE is a Child PE of the one hit EEH, host would handle
this. By doing so, this would leads to guest hang. The correct way is
avoid to handle it on host and let guest to recover.

This patch avoids to handle EEH on a passed Child PE.

Signed-off-by: Wei Yang <redacted>
---
 arch/powerpc/kernel/eeh_pe.c | 5 +++++
 1 file changed, 5 insertions(+)
diff --git a/arch/powerpc/kernel/eeh_pe.c b/arch/powerpc/kernel/eeh_pe.c
index 5cde950..c6d0e9f 100644
--- a/arch/powerpc/kernel/eeh_pe.c
+++ b/arch/powerpc/kernel/eeh_pe.c
@@ -172,6 +172,7 @@ static struct eeh_pe *eeh_pe_next(struct eeh_pe *pe,
  * callback returns something other than NULL, or no more PEs
  * to be traversed.
  */
+static void *__eeh_pe_get(void *data, void *flag);
 void *eeh_pe_traverse(struct eeh_pe *root,
 		      eeh_traverse_func fn, void *flag)
 {
@@ -179,6 +180,8 @@ void *eeh_pe_traverse(struct eeh_pe *root,
 	void *ret;
 
 	for (pe = root; pe; pe = eeh_pe_next(pe, root)) {
+		if (eeh_pe_passed(pe) && (fn != __eeh_pe_get))
+			continue;
 		ret = fn(pe, flag);
 		if (ret) return ret;
 	}
@@ -210,6 +213,8 @@ void *eeh_pe_dev_traverse(struct eeh_pe *root,
 
 	/* Traverse root PE */
 	for (pe = root; pe; pe = eeh_pe_next(pe, root)) {
+		if (eeh_pe_passed(pe))
+			continue;
 		eeh_pe_for_each_dev(pe, edev, tmp) {
 			ret = fn(edev, flag);
 			if (ret)
-- 
2.5.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help