diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-12-01 08:40:17 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-12-01 08:40:17 -0500 |
commit | a0651c7fa2c088a605f63792279859608ed7f2c8 (patch) | |
tree | a0cc0a9563fc6766b345e93cf65b54160842cd5b /drivers | |
parent | ae753ee2771a1bacade56411bb98037b2545c929 (diff) | |
parent | 7e4d4233260be0611c7fbdb2730c12731c4b8dc0 (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.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, | |||
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) |