aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-12-01 08:40:17 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-12-01 08:40:17 -0500
commita0651c7fa2c088a605f63792279859608ed7f2c8 (patch)
treea0cc0a9563fc6766b345e93cf65b54160842cd5b /drivers
parentae753ee2771a1bacade56411bb98037b2545c929 (diff)
parent7e4d4233260be0611c7fbdb2730c12731c4b8dc0 (diff)
Merge tag 'powerpc-4.15-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc fixes from Michael Ellerman: "Two fixes for nasty kexec/kdump crashes in certain configurations. A couple of minor fixes for the new TIDR code. A fix for an oops in a CXL error handling path. Thanks to: Andrew Donnellan, Christophe Lombard, David Gibson, Mahesh Salgaonkar, Vaibhav Jain" * tag 'powerpc-4.15-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc: Do not assign thread.tidr if already assigned powerpc: Avoid signed to unsigned conversion in set_thread_tidr() powerpc/kexec: Fix kexec/kdump in P9 guest kernels powerpc/powernv: Fix kexec crashes caused by tlbie tracing cxl: Check if vphb exists before iterating over AFU devices
Diffstat (limited to 'drivers')
-rw-r--r--drivers/misc/cxl/pci.c12
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,
2083 /* There should only be one entry, but go through the list 2083 /* There should only be one entry, but go through the list
2084 * anyway 2084 * anyway
2085 */ 2085 */
2086 if (afu->phb == NULL)
2087 return result;
2088
2086 list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { 2089 list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
2087 if (!afu_dev->driver) 2090 if (!afu_dev->driver)
2088 continue; 2091 continue;
@@ -2124,8 +2127,7 @@ static pci_ers_result_t cxl_pci_error_detected(struct pci_dev *pdev,
2124 * Tell the AFU drivers; but we don't care what they 2127 * Tell the AFU drivers; but we don't care what they
2125 * say, we're going away. 2128 * say, we're going away.
2126 */ 2129 */
2127 if (afu->phb != NULL) 2130 cxl_vphb_error_detected(afu, state);
2128 cxl_vphb_error_detected(afu, state);
2129 } 2131 }
2130 return PCI_ERS_RESULT_DISCONNECT; 2132 return PCI_ERS_RESULT_DISCONNECT;
2131 } 2133 }
@@ -2265,6 +2267,9 @@ static pci_ers_result_t cxl_pci_slot_reset(struct pci_dev *pdev)
2265 if (cxl_afu_select_best_mode(afu)) 2267 if (cxl_afu_select_best_mode(afu))
2266 goto err; 2268 goto err;
2267 2269
2270 if (afu->phb == NULL)
2271 continue;
2272
2268 list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { 2273 list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
2269 /* Reset the device context. 2274 /* Reset the device context.
2270 * TODO: make this less disruptive 2275 * TODO: make this less disruptive
@@ -2327,6 +2332,9 @@ static void cxl_pci_resume(struct pci_dev *pdev)
2327 for (i = 0; i < adapter->slices; i++) { 2332 for (i = 0; i < adapter->slices; i++) {
2328 afu = adapter->afu[i]; 2333 afu = adapter->afu[i];
2329 2334
2335 if (afu->phb == NULL)
2336 continue;
2337
2330 list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) { 2338 list_for_each_entry(afu_dev, &afu->phb->bus->devices, bus_list) {
2331 if (afu_dev->driver && afu_dev->driver->err_handler && 2339 if (afu_dev->driver && afu_dev->driver->err_handler &&
2332 afu_dev->driver->err_handler->resume) 2340 afu_dev->driver->err_handler->resume)