| From 17a7115220b8f5b9cb9721e2ff856fefb1bf99e2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 11 Feb 2021 12:24:35 -0600 |
| Subject: powerpc/pseries: extract host bridge from pci_bus prior to bus |
| removal |
| |
| From: Tyrel Datwyler <tyreld@linux.ibm.com> |
| |
| [ Upstream commit 38d0b1c9cec71e6d0f3bddef0bbce41d05a3e796 ] |
| |
| The pci_bus->bridge reference may no longer be valid after |
| pci_bus_remove() resulting in passing a bad value to device_unregister() |
| for the associated bridge device. |
| |
| Store the host_bridge reference in a separate variable prior to |
| pci_bus_remove(). |
| |
| Fixes: 7340056567e3 ("powerpc/pci: Reorder pci bus/bridge unregistration during PHB removal") |
| Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Link: https://lore.kernel.org/r/20210211182435.47968-1-tyreld@linux.ibm.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/powerpc/platforms/pseries/pci_dlpar.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/arch/powerpc/platforms/pseries/pci_dlpar.c b/arch/powerpc/platforms/pseries/pci_dlpar.c |
| index f9ae17e8a0f4..a8f9140a24fa 100644 |
| --- a/arch/powerpc/platforms/pseries/pci_dlpar.c |
| +++ b/arch/powerpc/platforms/pseries/pci_dlpar.c |
| @@ -50,6 +50,7 @@ EXPORT_SYMBOL_GPL(init_phb_dynamic); |
| int remove_phb_dynamic(struct pci_controller *phb) |
| { |
| struct pci_bus *b = phb->bus; |
| + struct pci_host_bridge *host_bridge = to_pci_host_bridge(b->bridge); |
| struct resource *res; |
| int rc, i; |
| |
| @@ -76,7 +77,8 @@ int remove_phb_dynamic(struct pci_controller *phb) |
| /* Remove the PCI bus and unregister the bridge device from sysfs */ |
| phb->bus = NULL; |
| pci_remove_bus(b); |
| - device_unregister(b->bridge); |
| + host_bridge->bus = NULL; |
| + device_unregister(&host_bridge->dev); |
| |
| /* Now release the IO resource */ |
| if (res->flags & IORESOURCE_IO) |
| -- |
| 2.30.2 |
| |