Message ID | 1461578004-129094-4-git-send-email-mika.westerberg@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
On Mon, Apr 25, 2016 at 11:53 AM, Mika Westerberg <mika.westerberg@linux.intel.com> wrote: > 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 <mika.westerberg@linux.intel.com> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> > --- > 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 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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)
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 <mika.westerberg@linux.intel.com> --- drivers/pci/hotplug/acpiphp_glue.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)