mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
cxl: Route eeh events to all slices for pci_channel_io_perm_failure state
Fix a boundary condition where in some cases an eeh event with state == pci_channel_io_perm_failure wont be passed on to a driver attached to the virtual PCI device associated with a slice. This will happen in case the slice just before (n-1) doesn't have any vPHB bus associated with it, that results in an early return from cxl_pci_error_detected() callback. With state == pci_channel_io_perm_failure, the adapter will be removed irrespective of the return value of cxl_vphb_error_detected(). So we now always return PCI_ERS_RESULT_DISCONNECTED for this case i.e even if the AFU isn't using a vPHB (currently returns PCI_ERS_RESULT_NONE). Fixes: e4f5fc001a6("cxl: Do not create vPHB if there are no AFU configuration records") Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com> Reviewed-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com> Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com> Acked-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
97da3854c5
commit
07f5ab6002
1 changed files with 6 additions and 7 deletions
|
@ -1792,15 +1792,14 @@ static pci_ers_result_t cxl_pci_error_detected(struct pci_dev *pdev,
|
||||||
|
|
||||||
/* If we're permanently dead, give up. */
|
/* If we're permanently dead, give up. */
|
||||||
if (state == pci_channel_io_perm_failure) {
|
if (state == pci_channel_io_perm_failure) {
|
||||||
/* Tell the AFU drivers; but we don't care what they
|
|
||||||
* say, we're going away.
|
|
||||||
*/
|
|
||||||
for (i = 0; i < adapter->slices; i++) {
|
for (i = 0; i < adapter->slices; i++) {
|
||||||
afu = adapter->afu[i];
|
afu = adapter->afu[i];
|
||||||
/* Only participate in EEH if we are on a virtual PHB */
|
/*
|
||||||
if (afu->phb == NULL)
|
* Tell the AFU drivers; but we don't care what they
|
||||||
return PCI_ERS_RESULT_NONE;
|
* say, we're going away.
|
||||||
cxl_vphb_error_detected(afu, state);
|
*/
|
||||||
|
if (afu->phb != NULL)
|
||||||
|
cxl_vphb_error_detected(afu, state);
|
||||||
}
|
}
|
||||||
return PCI_ERS_RESULT_DISCONNECT;
|
return PCI_ERS_RESULT_DISCONNECT;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue