Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d98e0929 authored by Bjorn Helgaas's avatar Bjorn Helgaas
Browse files

Revert "PCI: pciehp: Add runtime PM support for PCIe hotplug ports"

This reverts commit 68db9bc8.

Yinghai reported that the following manual hotplug sequence:

  # echo 0 > /sys/bus/pci/slots/8/power
  # echo 1 > /sys/bus/pci/slots/8/power

worked in v4.9, but fails in v4.10-rc1, and that reverting 68db9bc8
("PCI: pciehp: Add runtime PM support for PCIe hotplug ports") makes it
work again.

Fixes: 68db9bc8 ("PCI: pciehp: Add runtime PM support for PCIe hotplug ports")
Link: https://lkml.kernel.org/r/CAE9FiQVCMCa7iVyuwp9z6VrY0cE7V_xghuXip28Ft52=8QmTWw@mail.gmail.com
Link: https://bugzilla.kernel.org/show_bug.cgi?id=193951


Reported-by: default avatarYinghai Lu <yinghai@kernel.org>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
parent dfef358b
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/pm_runtime.h>
#include <linux/pci.h>
#include "../pci.h"
#include "pciehp.h"
@@ -99,7 +98,6 @@ static int board_added(struct slot *p_slot)
	pciehp_green_led_blink(p_slot);

	/* Check link training status */
	pm_runtime_get_sync(&ctrl->pcie->port->dev);
	retval = pciehp_check_link_status(ctrl);
	if (retval) {
		ctrl_err(ctrl, "Failed to check link status\n");
@@ -120,14 +118,12 @@ static int board_added(struct slot *p_slot)
		if (retval != -EEXIST)
			goto err_exit;
	}
	pm_runtime_put(&ctrl->pcie->port->dev);

	pciehp_green_led_on(p_slot);
	pciehp_set_attention_status(p_slot, 0);
	return 0;

err_exit:
	pm_runtime_put(&ctrl->pcie->port->dev);
	set_slot_off(ctrl, p_slot);
	return retval;
}
@@ -141,9 +137,7 @@ static int remove_board(struct slot *p_slot)
	int retval;
	struct controller *ctrl = p_slot->ctrl;

	pm_runtime_get_sync(&ctrl->pcie->port->dev);
	retval = pciehp_unconfigure_device(p_slot);
	pm_runtime_put(&ctrl->pcie->port->dev);
	if (retval)
		return retval;

+6 −6
Original line number Diff line number Diff line
@@ -2241,10 +2241,13 @@ bool pci_bridge_d3_possible(struct pci_dev *bridge)
			return false;

		/*
		 * Hotplug ports handled by firmware in System Management Mode
		 * Hotplug interrupts cannot be delivered if the link is down,
		 * so parents of a hotplug port must stay awake. In addition,
		 * hotplug ports handled by firmware in System Management Mode
		 * may not be put into D3 by the OS (Thunderbolt on non-Macs).
		 * For simplicity, disallow in general for now.
		 */
		if (bridge->is_hotplug_bridge && !pciehp_is_native(bridge))
		if (bridge->is_hotplug_bridge)
			return false;

		if (pci_bridge_d3_force)
@@ -2276,10 +2279,7 @@ static int pci_dev_check_d3cold(struct pci_dev *dev, void *data)
	     !pci_pme_capable(dev, PCI_D3cold)) ||

	    /* If it is a bridge it must be allowed to go to D3. */
	    !pci_power_manageable(dev) ||

	    /* Hotplug interrupts cannot be delivered if the link is down. */
	    dev->is_hotplug_bridge)
	    !pci_power_manageable(dev))

		*d3cold_ok = false;