diff options
Diffstat (limited to 'drivers/misc/cxl/pci.c')
| -rw-r--r-- | drivers/misc/cxl/pci.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c index bb7fd3f4edab..19969ee86d6f 100644 --- a/drivers/misc/cxl/pci.c +++ b/drivers/misc/cxl/pci.c @@ -2083,6 +2083,9 @@ static pci_ers_result_t cxl_vphb_error_detected(struct cxl_afu *afu,  	/* There should only be one entry, but go through the list  	 * anyway  	 */ +	if (afu->phb == NULL) +		return result; +  	list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {  		if (!afu_dev->driver)  			continue; @@ -2124,8 +2127,7 @@ static pci_ers_result_t cxl_pci_error_detected(struct pci_dev *pdev,  			 * Tell the AFU drivers; but we don't care what they  			 * say, we're going away.  			 */ -			if (afu->phb != NULL) -				cxl_vphb_error_detected(afu, state); +			cxl_vphb_error_detected(afu, state);  		}  		return PCI_ERS_RESULT_DISCONNECT;  	} @@ -2265,6 +2267,9 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev)  		if (cxl_afu_select_best_mode(afu))  			goto err; +		if (afu->phb == NULL) +			continue; +  		list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {  			/* Reset the device context.  			 * TODO: make this less disruptive @@ -2327,6 +2332,9 @@ static void cxl_pci_resume(struct pci_dev *pdev)  	for (i = 0; i < adapter->slices; i++) {  		afu = adapter->afu[i]; +		if (afu->phb == NULL) +			continue; +  		list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {  			if (afu_dev->driver && afu_dev->driver->err_handler &&  			    afu_dev->driver->err_handler->resume)  | 
