Commit 4e59b754 authored by Bjorn Helgaas's avatar Bjorn Helgaas

cxl: Factor out common dev->driver expressions

Save the struct pci_driver and struct pci_error_handlers pointers from
pdev->driver instead of chasing the pointers several times.  No functional
change intended.
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
parent 43e85554
...@@ -20,34 +20,38 @@ static void pci_error_handlers(struct cxl_afu *afu, ...@@ -20,34 +20,38 @@ static void pci_error_handlers(struct cxl_afu *afu,
pci_channel_state_t state) pci_channel_state_t state)
{ {
struct pci_dev *afu_dev; struct pci_dev *afu_dev;
struct pci_driver *afu_drv;
const struct pci_error_handlers *err_handler;
if (afu->phb == NULL) if (afu->phb == NULL)
return; return;
list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
if (!afu_dev->driver) afu_drv = afu_dev->driver;
if (!afu_drv)
continue; continue;
err_handler = afu_drv->err_handler;
switch (bus_error_event) { switch (bus_error_event) {
case CXL_ERROR_DETECTED_EVENT: case CXL_ERROR_DETECTED_EVENT:
afu_dev->error_state = state; afu_dev->error_state = state;
if (afu_dev->driver->err_handler && if (err_handler &&
afu_dev->driver->err_handler->error_detected) err_handler->error_detected)
afu_dev->driver->err_handler->error_detected(afu_dev, state); err_handler->error_detected(afu_dev, state);
break; break;
case CXL_SLOT_RESET_EVENT: case CXL_SLOT_RESET_EVENT:
afu_dev->error_state = state; afu_dev->error_state = state;
if (afu_dev->driver->err_handler && if (err_handler &&
afu_dev->driver->err_handler->slot_reset) err_handler->slot_reset)
afu_dev->driver->err_handler->slot_reset(afu_dev); err_handler->slot_reset(afu_dev);
break; break;
case CXL_RESUME_EVENT: case CXL_RESUME_EVENT:
if (afu_dev->driver->err_handler && if (err_handler &&
afu_dev->driver->err_handler->resume) err_handler->resume)
afu_dev->driver->err_handler->resume(afu_dev); err_handler->resume(afu_dev);
break; break;
} }
} }
} }
......
...@@ -1795,6 +1795,8 @@ static pci_ers_result_t cxl_vphb_error_detected(struct cxl_afu *afu, ...@@ -1795,6 +1795,8 @@ static pci_ers_result_t cxl_vphb_error_detected(struct cxl_afu *afu,
pci_channel_state_t state) pci_channel_state_t state)
{ {
struct pci_dev *afu_dev; struct pci_dev *afu_dev;
struct pci_driver *afu_drv;
const struct pci_error_handlers *err_handler;
pci_ers_result_t result = PCI_ERS_RESULT_NEED_RESET; pci_ers_result_t result = PCI_ERS_RESULT_NEED_RESET;
pci_ers_result_t afu_result = PCI_ERS_RESULT_NEED_RESET; pci_ers_result_t afu_result = PCI_ERS_RESULT_NEED_RESET;
...@@ -1805,14 +1807,16 @@ static pci_ers_result_t cxl_vphb_error_detected(struct cxl_afu *afu, ...@@ -1805,14 +1807,16 @@ static pci_ers_result_t cxl_vphb_error_detected(struct cxl_afu *afu,
return result; return result;
list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
if (!afu_dev->driver) afu_drv = afu_dev->driver;
if (!afu_drv)
continue; continue;
afu_dev->error_state = state; afu_dev->error_state = state;
if (afu_dev->driver->err_handler) err_handler = afu_drv->err_handler;
afu_result = afu_dev->driver->err_handler->error_detected(afu_dev, if (err_handler)
state); afu_result = err_handler->error_detected(afu_dev,
state);
/* Disconnect trumps all, NONE trumps NEED_RESET */ /* Disconnect trumps all, NONE trumps NEED_RESET */
if (afu_result == PCI_ERS_RESULT_DISCONNECT) if (afu_result == PCI_ERS_RESULT_DISCONNECT)
result = PCI_ERS_RESULT_DISCONNECT; result = PCI_ERS_RESULT_DISCONNECT;
...@@ -1972,6 +1976,8 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev) ...@@ -1972,6 +1976,8 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev)
struct cxl_afu *afu; struct cxl_afu *afu;
struct cxl_context *ctx; struct cxl_context *ctx;
struct pci_dev *afu_dev; struct pci_dev *afu_dev;
struct pci_driver *afu_drv;
const struct pci_error_handlers *err_handler;
pci_ers_result_t afu_result = PCI_ERS_RESULT_RECOVERED; pci_ers_result_t afu_result = PCI_ERS_RESULT_RECOVERED;
pci_ers_result_t result = PCI_ERS_RESULT_RECOVERED; pci_ers_result_t result = PCI_ERS_RESULT_RECOVERED;
int i; int i;
...@@ -2028,12 +2034,13 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev) ...@@ -2028,12 +2034,13 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev)
* shouldn't start new work until we call * shouldn't start new work until we call
* their resume function. * their resume function.
*/ */
if (!afu_dev->driver) afu_drv = afu_dev->driver;
if (!afu_drv)
continue; continue;
if (afu_dev->driver->err_handler && err_handler = afu_drv->err_handler;
afu_dev->driver->err_handler->slot_reset) if (err_handler && err_handler->slot_reset)
afu_result = afu_dev->driver->err_handler->slot_reset(afu_dev); afu_result = err_handler->slot_reset(afu_dev);
if (afu_result == PCI_ERS_RESULT_DISCONNECT) if (afu_result == PCI_ERS_RESULT_DISCONNECT)
result = PCI_ERS_RESULT_DISCONNECT; result = PCI_ERS_RESULT_DISCONNECT;
...@@ -2060,6 +2067,8 @@ static void cxl_pci_resume(struct pci_dev *pdev) ...@@ -2060,6 +2067,8 @@ static void cxl_pci_resume(struct pci_dev *pdev)
struct cxl *adapter = pci_get_drvdata(pdev); struct cxl *adapter = pci_get_drvdata(pdev);
struct cxl_afu *afu; struct cxl_afu *afu;
struct pci_dev *afu_dev; struct pci_dev *afu_dev;
struct pci_driver *afu_drv;
const struct pci_error_handlers *err_handler;
int i; int i;
/* Everything is back now. Drivers should restart work now. /* Everything is back now. Drivers should restart work now.
...@@ -2074,9 +2083,13 @@ static void cxl_pci_resume(struct pci_dev *pdev) ...@@ -2074,9 +2083,13 @@ static void cxl_pci_resume(struct pci_dev *pdev)
continue; continue;
list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
if (afu_dev->driver && afu_dev->driver->err_handler && afu_drv = afu_dev->driver;
afu_dev->driver->err_handler->resume) if (!afu_drv)
afu_dev->driver->err_handler->resume(afu_dev); continue;
err_handler = afu_drv->err_handler;
if (err_handler && err_handler->resume)
err_handler->resume(afu_dev);
} }
} }
spin_unlock(&adapter->afu_list_lock); spin_unlock(&adapter->afu_list_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment