powerpc/eeh: Remove eeh_handle_event()
The function eeh_handle_event(pe) does nothing other than switching between calling eeh_handle_normal_event(pe) and eeh_handle_special_event(). However it is only called in two places, one where pe can't be NULL and the other where it must be NULL (see eeh_event_handler()) so it does nothing but obscure the flow of control. So, remove it. Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com> Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
d41ce7b1bc
commit
6870178071
@ -34,7 +34,8 @@ struct eeh_event {
|
|||||||
int eeh_event_init(void);
|
int eeh_event_init(void);
|
||||||
int eeh_send_failure_event(struct eeh_pe *pe);
|
int eeh_send_failure_event(struct eeh_pe *pe);
|
||||||
void eeh_remove_event(struct eeh_pe *pe, bool force);
|
void eeh_remove_event(struct eeh_pe *pe, bool force);
|
||||||
void eeh_handle_event(struct eeh_pe *pe);
|
bool eeh_handle_normal_event(struct eeh_pe *pe);
|
||||||
|
void eeh_handle_special_event(void);
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
#endif /* ASM_POWERPC_EEH_EVENT_H */
|
#endif /* ASM_POWERPC_EEH_EVENT_H */
|
||||||
|
@ -738,9 +738,22 @@ static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus,
|
|||||||
* Attempts to recover the given PE. If recovery fails or the PE has failed
|
* Attempts to recover the given PE. If recovery fails or the PE has failed
|
||||||
* too many times, remove the PE.
|
* too many times, remove the PE.
|
||||||
*
|
*
|
||||||
|
* While PHB detects address or data parity errors on particular PCI
|
||||||
|
* slot, the associated PE will be frozen. Besides, DMA's occurring
|
||||||
|
* to wild addresses (which usually happen due to bugs in device
|
||||||
|
* drivers or in PCI adapter firmware) can cause EEH error. #SERR,
|
||||||
|
* #PERR or other misc PCI-related errors also can trigger EEH errors.
|
||||||
|
*
|
||||||
|
* Recovery process consists of unplugging the device driver (which
|
||||||
|
* generated hotplug events to userspace), then issuing a PCI #RST to
|
||||||
|
* the device, then reconfiguring the PCI config space for all bridges
|
||||||
|
* & devices under this slot, and then finally restarting the device
|
||||||
|
* drivers (which cause a second set of hotplug events to go out to
|
||||||
|
* userspace).
|
||||||
|
*
|
||||||
* Returns true if @pe should no longer be used, else false.
|
* Returns true if @pe should no longer be used, else false.
|
||||||
*/
|
*/
|
||||||
static bool eeh_handle_normal_event(struct eeh_pe *pe)
|
bool eeh_handle_normal_event(struct eeh_pe *pe)
|
||||||
{
|
{
|
||||||
struct pci_bus *frozen_bus;
|
struct pci_bus *frozen_bus;
|
||||||
struct eeh_dev *edev, *tmp;
|
struct eeh_dev *edev, *tmp;
|
||||||
@ -942,7 +955,7 @@ hard_fail:
|
|||||||
* specific PE. Iterates through possible failures and handles them as
|
* specific PE. Iterates through possible failures and handles them as
|
||||||
* necessary.
|
* necessary.
|
||||||
*/
|
*/
|
||||||
static void eeh_handle_special_event(void)
|
void eeh_handle_special_event(void)
|
||||||
{
|
{
|
||||||
struct eeh_pe *pe, *phb_pe;
|
struct eeh_pe *pe, *phb_pe;
|
||||||
struct pci_bus *bus;
|
struct pci_bus *bus;
|
||||||
@ -1049,28 +1062,3 @@ static void eeh_handle_special_event(void)
|
|||||||
break;
|
break;
|
||||||
} while (rc != EEH_NEXT_ERR_NONE);
|
} while (rc != EEH_NEXT_ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* eeh_handle_event - Reset a PCI device after hard lockup.
|
|
||||||
* @pe: EEH PE
|
|
||||||
*
|
|
||||||
* While PHB detects address or data parity errors on particular PCI
|
|
||||||
* slot, the associated PE will be frozen. Besides, DMA's occurring
|
|
||||||
* to wild addresses (which usually happen due to bugs in device
|
|
||||||
* drivers or in PCI adapter firmware) can cause EEH error. #SERR,
|
|
||||||
* #PERR or other misc PCI-related errors also can trigger EEH errors.
|
|
||||||
*
|
|
||||||
* Recovery process consists of unplugging the device driver (which
|
|
||||||
* generated hotplug events to userspace), then issuing a PCI #RST to
|
|
||||||
* the device, then reconfiguring the PCI config space for all bridges
|
|
||||||
* & devices under this slot, and then finally restarting the device
|
|
||||||
* drivers (which cause a second set of hotplug events to go out to
|
|
||||||
* userspace).
|
|
||||||
*/
|
|
||||||
void eeh_handle_event(struct eeh_pe *pe)
|
|
||||||
{
|
|
||||||
if (pe)
|
|
||||||
eeh_handle_normal_event(pe);
|
|
||||||
else
|
|
||||||
eeh_handle_special_event();
|
|
||||||
}
|
|
||||||
|
@ -81,10 +81,10 @@ static int eeh_event_handler(void * dummy)
|
|||||||
pr_info("EEH: Detected PCI bus error on "
|
pr_info("EEH: Detected PCI bus error on "
|
||||||
"PHB#%x-PE#%x\n",
|
"PHB#%x-PE#%x\n",
|
||||||
pe->phb->global_number, pe->addr);
|
pe->phb->global_number, pe->addr);
|
||||||
eeh_handle_event(pe);
|
eeh_handle_normal_event(pe);
|
||||||
eeh_pe_state_clear(pe, EEH_PE_RECOVERING);
|
eeh_pe_state_clear(pe, EEH_PE_RECOVERING);
|
||||||
} else {
|
} else {
|
||||||
eeh_handle_event(NULL);
|
eeh_handle_special_event();
|
||||||
}
|
}
|
||||||
|
|
||||||
kfree(event);
|
kfree(event);
|
||||||
|
Loading…
Reference in New Issue
Block a user