From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Westerberg Subject: [PATCH v3 3/4] ACPI / hotplug / PCI: Runtime resume bridge before rescan Date: Thu, 14 Apr 2016 13:04:27 +0300 Message-ID: <1460628268-16204-4-git-send-email-mika.westerberg@linux.intel.com> References: <1460628268-16204-1-git-send-email-mika.westerberg@linux.intel.com> Return-path: In-Reply-To: <1460628268-16204-1-git-send-email-mika.westerberg@linux.intel.com> Sender: linux-pci-owner@vger.kernel.org To: Bjorn Helgaas , "Rafael J. Wysocki" Cc: Qipeng Zha , Qi Zheng , Dave Airlie , Mathias Nyman , Greg Kroah-Hartman , Lukas Wunner , Andreas Noever , Mika Westerberg , linux-pci@vger.kernel.org, linux-pm@vger.kernel.org List-Id: linux-pm@vger.kernel.org If a PCI bridge (or PCIe port) that is runtime suspended gets an ACPI hotplug event, such as BUS_CHECK we need to make sure it is resumed before devices below the bridge are re-scanned. Otherwise the devices behind the port are not accessible and will be treated as hot-unplugged. To fix this, resume PCI bridges from runtime suspend while rescanning. Signed-off-by: Mika Westerberg --- drivers/pci/hotplug/acpiphp_glue.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index fa49f9143b80..d64ce8aa99b3 100644 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c @@ -756,8 +756,10 @@ static void hotplug_event(u32 type, struct acpiphp_context *context) acpi_lock_hp_context(); bridge = context->bridge; - if (bridge) + if (bridge) { get_bridge(bridge); + pm_runtime_get_sync(&bridge->pci_dev->dev); + } acpi_unlock_hp_context(); @@ -797,8 +799,10 @@ static void hotplug_event(u32 type, struct acpiphp_context *context) } pci_unlock_rescan_remove(); - if (bridge) + if (bridge) { + pm_runtime_put(&bridge->pci_dev->dev); put_bridge(bridge); + } } static int acpiphp_hotplug_notify(struct acpi_device *adev, u32 type) -- 2.8.0.rc3