diff options
author | Keith Busch <keith.busch@intel.com> | 2018-09-20 12:27:12 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2018-09-26 15:23:14 -0400 |
commit | bdb5ac85777de67c909c9ad4327f03f7648b543f (patch) | |
tree | 06ffd1c0d73efa4807579a2a5b9bc04da8fcca1b /Documentation/PCI | |
parent | c4eed62a214330908eec11b0dc170d34fa50b412 (diff) |
PCI/ERR: Handle fatal error recovery
We don't need to be paranoid about the topology changing while handling an
error. If the device has changed in a hotplug capable slot, we can rely on
the presence detection handling to react to a changing topology.
Restore the fatal error handling behavior that existed before merging DPC
with AER with 7e9084b36740 ("PCI/AER: Handle ERR_FATAL with removal and
re-enumeration of devices").
Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Sinan Kaya <okaya@kernel.org>
Diffstat (limited to 'Documentation/PCI')
-rw-r--r-- | Documentation/PCI/pci-error-recovery.txt | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/Documentation/PCI/pci-error-recovery.txt b/Documentation/PCI/pci-error-recovery.txt index 688b69121e82..0b6bb3ef449e 100644 --- a/Documentation/PCI/pci-error-recovery.txt +++ b/Documentation/PCI/pci-error-recovery.txt | |||
@@ -110,7 +110,7 @@ The actual steps taken by a platform to recover from a PCI error | |||
110 | event will be platform-dependent, but will follow the general | 110 | event will be platform-dependent, but will follow the general |
111 | sequence described below. | 111 | sequence described below. |
112 | 112 | ||
113 | STEP 0: Error Event: ERR_NONFATAL | 113 | STEP 0: Error Event |
114 | ------------------- | 114 | ------------------- |
115 | A PCI bus error is detected by the PCI hardware. On powerpc, the slot | 115 | A PCI bus error is detected by the PCI hardware. On powerpc, the slot |
116 | is isolated, in that all I/O is blocked: all reads return 0xffffffff, | 116 | is isolated, in that all I/O is blocked: all reads return 0xffffffff, |
@@ -228,7 +228,13 @@ proceeds to either STEP3 (Link Reset) or to STEP 5 (Resume Operations). | |||
228 | If any driver returned PCI_ERS_RESULT_NEED_RESET, then the platform | 228 | If any driver returned PCI_ERS_RESULT_NEED_RESET, then the platform |
229 | proceeds to STEP 4 (Slot Reset) | 229 | proceeds to STEP 4 (Slot Reset) |
230 | 230 | ||
231 | STEP 3: Slot Reset | 231 | STEP 3: Link Reset |
232 | ------------------ | ||
233 | The platform resets the link. This is a PCI-Express specific step | ||
234 | and is done whenever a fatal error has been detected that can be | ||
235 | "solved" by resetting the link. | ||
236 | |||
237 | STEP 4: Slot Reset | ||
232 | ------------------ | 238 | ------------------ |
233 | 239 | ||
234 | In response to a return value of PCI_ERS_RESULT_NEED_RESET, the | 240 | In response to a return value of PCI_ERS_RESULT_NEED_RESET, the |
@@ -314,7 +320,7 @@ Failure). | |||
314 | >>> However, it probably should. | 320 | >>> However, it probably should. |
315 | 321 | ||
316 | 322 | ||
317 | STEP 4: Resume Operations | 323 | STEP 5: Resume Operations |
318 | ------------------------- | 324 | ------------------------- |
319 | The platform will call the resume() callback on all affected device | 325 | The platform will call the resume() callback on all affected device |
320 | drivers if all drivers on the segment have returned | 326 | drivers if all drivers on the segment have returned |
@@ -326,7 +332,7 @@ a result code. | |||
326 | At this point, if a new error happens, the platform will restart | 332 | At this point, if a new error happens, the platform will restart |
327 | a new error recovery sequence. | 333 | a new error recovery sequence. |
328 | 334 | ||
329 | STEP 5: Permanent Failure | 335 | STEP 6: Permanent Failure |
330 | ------------------------- | 336 | ------------------------- |
331 | A "permanent failure" has occurred, and the platform cannot recover | 337 | A "permanent failure" has occurred, and the platform cannot recover |
332 | the device. The platform will call error_detected() with a | 338 | the device. The platform will call error_detected() with a |
@@ -349,27 +355,6 @@ errors. See the discussion in powerpc/eeh-pci-error-recovery.txt | |||
349 | for additional detail on real-life experience of the causes of | 355 | for additional detail on real-life experience of the causes of |
350 | software errors. | 356 | software errors. |
351 | 357 | ||
352 | STEP 0: Error Event: ERR_FATAL | ||
353 | ------------------- | ||
354 | PCI bus error is detected by the PCI hardware. On powerpc, the slot is | ||
355 | isolated, in that all I/O is blocked: all reads return 0xffffffff, all | ||
356 | writes are ignored. | ||
357 | |||
358 | STEP 1: Remove devices | ||
359 | -------------------- | ||
360 | Platform removes the devices depending on the error agent, it could be | ||
361 | this port for all subordinates or upstream component (likely downstream | ||
362 | port) | ||
363 | |||
364 | STEP 2: Reset link | ||
365 | -------------------- | ||
366 | The platform resets the link. This is a PCI-Express specific step and is | ||
367 | done whenever a fatal error has been detected that can be "solved" by | ||
368 | resetting the link. | ||
369 | |||
370 | STEP 3: Re-enumerate the devices | ||
371 | -------------------- | ||
372 | Initiates the re-enumeration. | ||
373 | 358 | ||
374 | Conclusion; General Remarks | 359 | Conclusion; General Remarks |
375 | --------------------------- | 360 | --------------------------- |