@@ -879,6 +879,7 @@ static void eeh_clear_slot_attention(struct pci_dev *pdev)
* & devices under this slot, and then finally restarting the device
* drivers (which cause a second set of hotplug events to go out to
* userspace).
+ * Consumes the reference on 'pe'.
*/
void eeh_handle_normal_event(struct eeh_pe *pe)
{
@@ -898,6 +899,7 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
if (!bus) {
pr_err("%s: Cannot find PCI bus for PHB#%x-PE#%x\n",
__func__, pe->phb->global_number, pe->addr);
+ eeh_put_pe(pe); /* Release ref */
return;
}
@@ -1141,6 +1143,7 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
pci_hp_remove_devices(bus);
pci_unlock_rescan_remove();
/* The passed PE should no longer be used */
+ eeh_put_pe(pe); /* Release ref */
return;
}
}
@@ -1160,6 +1163,7 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true);
pr_info("PE state after recovery:\n");
eeh_tree_state_dump_kprintf(pe);
+ eeh_put_pe(pe); /* Release ref */
}
/**
Synchronize access to eeh_pe. Signed-off-by: Sam Bobroff <sbobroff@linux.ibm.com> --- arch/powerpc/kernel/eeh_driver.c | 4 ++++ 1 file changed, 4 insertions(+)