diff options
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh.c | 8 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh_driver.c | 16 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/eeh_event.c | 6 | ||||
-rw-r--r-- | include/asm-powerpc/eeh_event.h | 6 |
4 files changed, 6 insertions, 30 deletions
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c index c4604f71c962..1d05c9b55605 100644 --- a/arch/powerpc/platforms/pseries/eeh.c +++ b/arch/powerpc/platforms/pseries/eeh.c | |||
@@ -346,7 +346,6 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev) | |||
346 | int rets[3]; | 346 | int rets[3]; |
347 | unsigned long flags; | 347 | unsigned long flags; |
348 | struct pci_dn *pdn; | 348 | struct pci_dn *pdn; |
349 | enum pci_channel_state state; | ||
350 | int rc = 0; | 349 | int rc = 0; |
351 | 350 | ||
352 | total_mmio_ffs++; | 351 | total_mmio_ffs++; |
@@ -452,12 +451,7 @@ int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev) | |||
452 | eeh_mark_slot (dn, EEH_MODE_ISOLATED); | 451 | eeh_mark_slot (dn, EEH_MODE_ISOLATED); |
453 | spin_unlock_irqrestore(&confirm_error_lock, flags); | 452 | spin_unlock_irqrestore(&confirm_error_lock, flags); |
454 | 453 | ||
455 | state = pci_channel_io_normal; | 454 | eeh_send_failure_event (dn, dev); |
456 | if ((rets[0] == 1) || (rets[0] == 2) || (rets[0] == 4)) | ||
457 | state = pci_channel_io_frozen; | ||
458 | if (rets[0] == 5) | ||
459 | state = pci_channel_io_perm_failure; | ||
460 | eeh_send_failure_event (dn, dev, state, rets[2]); | ||
461 | 455 | ||
462 | /* Most EEH events are due to device driver bugs. Having | 456 | /* Most EEH events are due to device driver bugs. Having |
463 | * a stack trace will help the device-driver authors figure | 457 | * a stack trace will help the device-driver authors figure |
diff --git a/arch/powerpc/platforms/pseries/eeh_driver.c b/arch/powerpc/platforms/pseries/eeh_driver.c index 5ec6edf19ece..6493f593687f 100644 --- a/arch/powerpc/platforms/pseries/eeh_driver.c +++ b/arch/powerpc/platforms/pseries/eeh_driver.c | |||
@@ -342,13 +342,6 @@ struct pci_dn * handle_eeh_events (struct eeh_event *event) | |||
342 | return NULL; | 342 | return NULL; |
343 | } | 343 | } |
344 | 344 | ||
345 | #if 0 | ||
346 | /* We may get "permanent failure" messages on empty slots. | ||
347 | * These are false alarms. Empty slots have no child dn. */ | ||
348 | if ((event->state == pci_channel_io_perm_failure) && (frozen_device == NULL)) | ||
349 | return; | ||
350 | #endif | ||
351 | |||
352 | frozen_pdn = PCI_DN(frozen_dn); | 345 | frozen_pdn = PCI_DN(frozen_dn); |
353 | frozen_pdn->eeh_freeze_count++; | 346 | frozen_pdn->eeh_freeze_count++; |
354 | 347 | ||
@@ -363,12 +356,9 @@ struct pci_dn * handle_eeh_events (struct eeh_event *event) | |||
363 | if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES) | 356 | if (frozen_pdn->eeh_freeze_count > EEH_MAX_ALLOWED_FREEZES) |
364 | goto excess_failures; | 357 | goto excess_failures; |
365 | 358 | ||
366 | /* If the reset state is a '5' and the time to reset is 0 (infinity) | 359 | /* Get the current PCI slot state. */ |
367 | * or is more then 15 seconds, then mark this as a permanent failure. | 360 | rc = eeh_wait_for_slot_status (frozen_pdn, MAX_WAIT_FOR_RECOVERY*1000); |
368 | */ | 361 | if (rc < 0) { |
369 | if ((event->state == pci_channel_io_perm_failure) && | ||
370 | ((event->time_unavail <= 0) || | ||
371 | (event->time_unavail > MAX_WAIT_FOR_RECOVERY*1000))) { | ||
372 | printk(KERN_WARNING "EEH: Permanent failure\n"); | 362 | printk(KERN_WARNING "EEH: Permanent failure\n"); |
373 | goto hard_fail; | 363 | goto hard_fail; |
374 | } | 364 | } |
diff --git a/arch/powerpc/platforms/pseries/eeh_event.c b/arch/powerpc/platforms/pseries/eeh_event.c index 49037edf7d39..221dec8c16bd 100644 --- a/arch/powerpc/platforms/pseries/eeh_event.c +++ b/arch/powerpc/platforms/pseries/eeh_event.c | |||
@@ -118,9 +118,7 @@ static void eeh_thread_launcher(struct work_struct *dummy) | |||
118 | * (from a workqueue). | 118 | * (from a workqueue). |
119 | */ | 119 | */ |
120 | int eeh_send_failure_event (struct device_node *dn, | 120 | int eeh_send_failure_event (struct device_node *dn, |
121 | struct pci_dev *dev, | 121 | struct pci_dev *dev) |
122 | enum pci_channel_state state, | ||
123 | int time_unavail) | ||
124 | { | 122 | { |
125 | unsigned long flags; | 123 | unsigned long flags; |
126 | struct eeh_event *event; | 124 | struct eeh_event *event; |
@@ -144,8 +142,6 @@ int eeh_send_failure_event (struct device_node *dn, | |||
144 | 142 | ||
145 | event->dn = dn; | 143 | event->dn = dn; |
146 | event->dev = dev; | 144 | event->dev = dev; |
147 | event->state = state; | ||
148 | event->time_unavail = time_unavail; | ||
149 | 145 | ||
150 | /* We may or may not be called in an interrupt context */ | 146 | /* We may or may not be called in an interrupt context */ |
151 | spin_lock_irqsave(&eeh_eventlist_lock, flags); | 147 | spin_lock_irqsave(&eeh_eventlist_lock, flags); |
diff --git a/include/asm-powerpc/eeh_event.h b/include/asm-powerpc/eeh_event.h index dc6bf0ffb796..cc3cb04539ac 100644 --- a/include/asm-powerpc/eeh_event.h +++ b/include/asm-powerpc/eeh_event.h | |||
@@ -30,8 +30,6 @@ struct eeh_event { | |||
30 | struct list_head list; | 30 | struct list_head list; |
31 | struct device_node *dn; /* struct device node */ | 31 | struct device_node *dn; /* struct device node */ |
32 | struct pci_dev *dev; /* affected device */ | 32 | struct pci_dev *dev; /* affected device */ |
33 | enum pci_channel_state state; /* PCI bus state for the affected device */ | ||
34 | int time_unavail; /* milliseconds until device might be available */ | ||
35 | }; | 33 | }; |
36 | 34 | ||
37 | /** | 35 | /** |
@@ -46,9 +44,7 @@ struct eeh_event { | |||
46 | * (from a workqueue). | 44 | * (from a workqueue). |
47 | */ | 45 | */ |
48 | int eeh_send_failure_event (struct device_node *dn, | 46 | int eeh_send_failure_event (struct device_node *dn, |
49 | struct pci_dev *dev, | 47 | struct pci_dev *dev); |
50 | enum pci_channel_state state, | ||
51 | int time_unavail); | ||
52 | 48 | ||
53 | /* Main recovery function */ | 49 | /* Main recovery function */ |
54 | struct pci_dn * handle_eeh_events (struct eeh_event *); | 50 | struct pci_dn * handle_eeh_events (struct eeh_event *); |