Re: [Update][PATCH] PCI / PM: Disable runtime PM of PCIe ports

Bjorn Helgaas
2013-04-03T22:34:51Z

On Sat, Mar 30, 2013 at 4:38 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> The runtime PM of PCIe ports turns out to be quite fragile, as in
> some cases things work while in some other cases they don't and we
> don't seem to have a good way to determine whether or not they are
> going to work in advance.
>
> For this reason, avoid enabling runtime PM for PCIe ports by
> keeping their runtime PM reference counters always above 0 for the
> time being.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> ---
>
> This version also removes the no longer necessary (and empty anyway)
> port_runtime_pm_black_list[] table.

I applied this to for-linus for v3.9, and added a stable tag for v3.6+. Thanks!

> ---
> drivers/pci/pcie/portdrv_pci.c | 13 -------------
> 1 file changed, 13 deletions(-)
>
> Index: linux-pm/drivers/pci/pcie/portdrv_pci.c
> ===================================================================
> --- linux-pm.orig/drivers/pci/pcie/portdrv_pci.c
> +++ linux-pm/drivers/pci/pcie/portdrv_pci.c
> @@ -185,14 +185,6 @@ static const struct dev_pm_ops pcie_port
> #endif /* !PM */
>
> /*
> - * PCIe port runtime suspend is broken for some chipsets, so use a
> - * black list to disable runtime PM for these chipsets.
> - */
> -static const struct pci_device_id port_runtime_pm_black_list[] = {
> - { /* end: all zeroes */ }
> -};
> -
> -/*
> * pcie_portdrv_probe - Probe PCI-Express port devices
> * @dev: PCI-Express port device being probed
> *
> @@ -225,16 +217,11 @@ static int pcie_portdrv_probe(struct pci
> * it by default.
> */
> dev->d3cold_allowed = false;
> - if (!pci_match_id(port_runtime_pm_black_list, dev))
> - pm_runtime_put_noidle(&dev->dev);
> -
> return 0;
> }
>
> static void pcie_portdrv_remove(struct pci_dev *dev)
> {
> - if (!pci_match_id(port_runtime_pm_black_list, dev))
> - pm_runtime_get_noresume(&dev->dev);
> pcie_port_device_remove(dev);
> pci_disable_device(dev);
> }
>