diff options
author | Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com> | 2014-06-17 23:29:13 -0300 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2014-06-19 15:11:57 +1000 |
commit | 4ee0ae50269a19245f9518e86e109027ccb233b0 (patch) | |
tree | 0faf03a0bc430789d3cb1f83d8afada4829982ea | |
parent | 824c5e65678f330ae7c33eb05b6bc08fd4a70f6a (diff) | |
download | powerpc-4ee0ae50269a19245f9518e86e109027ccb233b0.tar.gz |
powerpc/eeh: Drop taken reference to driver on eeh_rmv_device
Commit f5c57710dd62dd06f176934a8b4b8accbf00f9f8 ("powerpc/eeh: Use
partial hotplug for EEH unaware drivers") introduces eeh_rmv_device,
which may grab a reference to a driver, but not release it.
That prevents a driver from being removed after it has gone through EEH
recovery.
This patch drops the reference if it was taken.
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
Acked-by: Gavin Shan <shangw@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
(cherry picked from commit 8cc6b6cd8713457be80202fc4264f05d20bc5e1b)
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r-- | arch/powerpc/kernel/eeh_driver.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c index 615eaa39e90d16..51f64859a425e5 100644 --- a/arch/powerpc/kernel/eeh_driver.c +++ b/arch/powerpc/kernel/eeh_driver.c @@ -387,8 +387,11 @@ static void *eeh_rmv_device(void *data, void *userdata) return NULL; driver = eeh_pcid_get(dev); - if (driver && driver->err_handler) - return NULL; + if (driver) { + eeh_pcid_put(dev); + if (driver->err_handler) + return NULL; + } /* Remove it from PCI subsystem */ pr_debug("EEH: Removing %s without EEH sensitive driver\n", |