Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Bjorn Helgaas <bhelgaas@google.com>

+41 -24
+17 -13
drivers/misc/cxl/guest.c
··· 20 20 pci_channel_state_t state) 21 21 { 22 22 struct pci_dev *afu_dev; 23 + struct pci_driver *afu_drv; 24 + const struct pci_error_handlers *err_handler; 23 25 24 26 if (afu->phb == NULL) 25 27 return; 26 28 27 29 list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { 28 - if (!afu_dev->driver) 30 + afu_drv = afu_dev->driver; 31 + if (!afu_drv) 29 32 continue; 30 33 34 + err_handler = afu_drv->err_handler; 31 35 switch (bus_error_event) { 32 36 case CXL_ERROR_DETECTED_EVENT: 33 37 afu_dev->error_state = state; 34 38 35 - if (afu_dev->driver->err_handler && 36 - afu_dev->driver->err_handler->error_detected) 37 - afu_dev->driver->err_handler->error_detected(afu_dev, state); 38 - break; 39 + if (err_handler && 40 + err_handler->error_detected) 41 + err_handler->error_detected(afu_dev, state); 42 + break; 39 43 case CXL_SLOT_RESET_EVENT: 40 44 afu_dev->error_state = state; 41 45 42 - if (afu_dev->driver->err_handler && 43 - afu_dev->driver->err_handler->slot_reset) 44 - afu_dev->driver->err_handler->slot_reset(afu_dev); 45 - break; 46 + if (err_handler && 47 + err_handler->slot_reset) 48 + err_handler->slot_reset(afu_dev); 49 + break; 46 50 case CXL_RESUME_EVENT: 47 - if (afu_dev->driver->err_handler && 48 - afu_dev->driver->err_handler->resume) 49 - afu_dev->driver->err_handler->resume(afu_dev); 50 - break; 51 + if (err_handler && 52 + err_handler->resume) 53 + err_handler->resume(afu_dev); 54 + break; 51 55 } 52 56 } 53 57 }
+24 -11
drivers/misc/cxl/pci.c
··· 1795 1795 pci_channel_state_t state) 1796 1796 { 1797 1797 struct pci_dev *afu_dev; 1798 + struct pci_driver *afu_drv; 1799 + const struct pci_error_handlers *err_handler; 1798 1800 pci_ers_result_t result = PCI_ERS_RESULT_NEED_RESET; 1799 1801 pci_ers_result_t afu_result = PCI_ERS_RESULT_NEED_RESET; 1800 1802 ··· 1807 1805 return result; 1808 1806 1809 1807 list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { 1810 - if (!afu_dev->driver) 1808 + afu_drv = afu_dev->driver; 1809 + if (!afu_drv) 1811 1810 continue; 1812 1811 1813 1812 afu_dev->error_state = state; 1814 1813 1815 - if (afu_dev->driver->err_handler) 1816 - afu_result = afu_dev->driver->err_handler->error_detected(afu_dev, 1817 - state); 1814 + err_handler = afu_drv->err_handler; 1815 + if (err_handler) 1816 + afu_result = err_handler->error_detected(afu_dev, 1817 + state); 1818 1818 /* Disconnect trumps all, NONE trumps NEED_RESET */ 1819 1819 if (afu_result == PCI_ERS_RESULT_DISCONNECT) 1820 1820 result = PCI_ERS_RESULT_DISCONNECT; ··· 1976 1972 struct cxl_afu *afu; 1977 1973 struct cxl_context *ctx; 1978 1974 struct pci_dev *afu_dev; 1975 + struct pci_driver *afu_drv; 1976 + const struct pci_error_handlers *err_handler; 1979 1977 pci_ers_result_t afu_result = PCI_ERS_RESULT_RECOVERED; 1980 1978 pci_ers_result_t result = PCI_ERS_RESULT_RECOVERED; 1981 1979 int i; ··· 2034 2028 * shouldn't start new work until we call 2035 2029 * their resume function. 2036 2030 */ 2037 - if (!afu_dev->driver) 2031 + afu_drv = afu_dev->driver; 2032 + if (!afu_drv) 2038 2033 continue; 2039 2034 2040 - if (afu_dev->driver->err_handler && 2041 - afu_dev->driver->err_handler->slot_reset) 2042 - afu_result = afu_dev->driver->err_handler->slot_reset(afu_dev); 2035 + err_handler = afu_drv->err_handler; 2036 + if (err_handler && err_handler->slot_reset) 2037 + afu_result = err_handler->slot_reset(afu_dev); 2043 2038 2044 2039 if (afu_result == PCI_ERS_RESULT_DISCONNECT) 2045 2040 result = PCI_ERS_RESULT_DISCONNECT; ··· 2067 2060 struct cxl *adapter = pci_get_drvdata(pdev); 2068 2061 struct cxl_afu *afu; 2069 2062 struct pci_dev *afu_dev; 2063 + struct pci_driver *afu_drv; 2064 + const struct pci_error_handlers *err_handler; 2070 2065 int i; 2071 2066 2072 2067 /* Everything is back now. Drivers should restart work now. ··· 2083 2074 continue; 2084 2075 2085 2076 list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { 2086 - if (afu_dev->driver && afu_dev->driver->err_handler && 2087 - afu_dev->driver->err_handler->resume) 2088 - afu_dev->driver->err_handler->resume(afu_dev); 2077 + afu_drv = afu_dev->driver; 2078 + if (!afu_drv) 2079 + continue; 2080 + 2081 + err_handler = afu_drv->err_handler; 2082 + if (err_handler && err_handler->resume) 2083 + err_handler->resume(afu_dev); 2089 2084 } 2090 2085 } 2091 2086 spin_unlock(&adapter->afu_list_lock);