aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinas Vepstas <linas@austin.ibm.com>2006-06-19 16:07:40 -0400
committerPaul Mackerras <paulus@samba.org>2006-06-21 01:01:32 -0400
commit0aa8d15b01881ccaab5f2fb31eef33ced97ccb5f (patch)
tree398d2b5c20d56073ade09e2e3bc1032bf6130324
parent379507181a1e330d4f5b0fabe61cd43eccf09763 (diff)
[POWERPC] pseries: Print PCI slot location code on failure
The PCI error recovery code will printk diagnostic info when a PCI error event occurs. Change the messages to include the slot location code, which is how most sysadmins will know the device. Signed-off-by: Linas Vepstas <linas@austin.ibm.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/platforms/pseries/eeh_driver.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c
index 4d45347afabc..0ec9a5445b95 100644
--- a/arch/powerpc/platforms/pseries/eeh_driver.c
+++ b/arch/powerpc/platforms/pseries/eeh_driver.c
@@ -261,16 +261,22 @@ struct pci_dn * handle_eeh_events (struct eeh_event *event)
261 struct pci_bus *frozen_bus; 261 struct pci_bus *frozen_bus;
262 int rc = 0; 262 int rc = 0;
263 enum pci_ers_result result = PCI_ERS_RESULT_NONE; 263 enum pci_ers_result result = PCI_ERS_RESULT_NONE;
264 const char *pci_str, *drv_str; 264 const char *location, *pci_str, *drv_str;
265 265
266 frozen_dn = find_device_pe(event->dn); 266 frozen_dn = find_device_pe(event->dn);
267 frozen_bus = pcibios_find_pci_bus(frozen_dn); 267 frozen_bus = pcibios_find_pci_bus(frozen_dn);
268 268
269 if (!frozen_dn) { 269 if (!frozen_dn) {
270 printk(KERN_ERR "EEH: Error: Cannot find partition endpoint for %s\n", 270
271 pci_name(event->dev)); 271 location = (char *) get_property(event->dn, "ibm,loc-code", NULL);
272 location = location ? location : "unknown";
273 printk(KERN_ERR "EEH: Error: Cannot find partition endpoint "
274 "for location=%s pci addr=%s\n",
275 location, pci_name(event->dev));
272 return NULL; 276 return NULL;
273 } 277 }
278 location = (char *) get_property(frozen_dn, "ibm,loc-code", NULL);
279 location = location ? location : "unknown";
274 280
275 /* There are two different styles for coming up with the PE. 281 /* There are two different styles for coming up with the PE.
276 * In the old style, it was the highest EEH-capable device 282 * In the old style, it was the highest EEH-capable device
@@ -282,8 +288,9 @@ struct pci_dn * handle_eeh_events (struct eeh_event *event)
282 frozen_bus = pcibios_find_pci_bus (frozen_dn->parent); 288 frozen_bus = pcibios_find_pci_bus (frozen_dn->parent);
283 289
284 if (!frozen_bus) { 290 if (!frozen_bus) {
285 printk(KERN_ERR "EEH: Cannot find PCI bus for %s\n", 291 printk(KERN_ERR "EEH: Cannot find PCI bus "
286 frozen_dn->full_name); 292 "for location=%s dn=%s\n",
293 location, frozen_dn->full_name);
287 return NULL; 294 return NULL;
288 } 295 }
289 296
@@ -318,8 +325,9 @@ struct pci_dn * handle_eeh_events (struct eeh_event *event)
318 325
319 eeh_slot_error_detail(frozen_pdn, 1 /* Temporary Error */); 326 eeh_slot_error_detail(frozen_pdn, 1 /* Temporary Error */);
320 printk(KERN_WARNING 327 printk(KERN_WARNING
321 "EEH: This PCI device has failed %d times since last reboot: %s - %s\n", 328 "EEH: This PCI device has failed %d times since last reboot: "
322 frozen_pdn->eeh_freeze_count, drv_str, pci_str); 329 "location=%s driver=%s pci addr=%s\n",
330 frozen_pdn->eeh_freeze_count, location, drv_str, pci_str);
323 331
324 /* Walk the various device drivers attached to this slot through 332 /* Walk the various device drivers attached to this slot through
325 * a reset sequence, giving each an opportunity to do what it needs 333 * a reset sequence, giving each an opportunity to do what it needs
@@ -368,17 +376,18 @@ excess_failures:
368 * due to actual, failed cards. 376 * due to actual, failed cards.
369 */ 377 */
370 printk(KERN_ERR 378 printk(KERN_ERR
371 "EEH: PCI device %s - %s has failed %d times \n" 379 "EEH: PCI device at location=%s driver=%s pci addr=%s \n"
372 "and has been permanently disabled. Please try reseating\n" 380 "has failed %d times and has been permanently disabled. \n"
373 "this device or replacing it.\n", 381 "Please try reseating this device or replacing it.\n",
374 drv_str, pci_str, frozen_pdn->eeh_freeze_count); 382 location, drv_str, pci_str, frozen_pdn->eeh_freeze_count);
375 goto perm_error; 383 goto perm_error;
376 384
377hard_fail: 385hard_fail:
378 printk(KERN_ERR 386 printk(KERN_ERR
379 "EEH: Unable to recover from failure of PCI device %s - %s\n" 387 "EEH: Unable to recover from failure of PCI device "
388 "at location=%s driver=%s pci addr=%s \n"
380 "Please try reseating this device or replacing it.\n", 389 "Please try reseating this device or replacing it.\n",
381 drv_str, pci_str); 390 location, drv_str, pci_str);
382 391
383perm_error: 392perm_error:
384 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */); 393 eeh_slot_error_detail(frozen_pdn, 2 /* Permanent Error */);