Synchronize access to eeh_pe. Signed-off-by: Sam Bobroff <sbobr...@linux.ibm.com> --- arch/powerpc/kernel/eeh_driver.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c index b3245d0cfb22..c9d73070793e 100644 --- a/arch/powerpc/kernel/eeh_driver.c +++ b/arch/powerpc/kernel/eeh_driver.c @@ -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 */ } /** -- 2.22.0.216.g00a2a96fc9