summaryrefslogtreecommitdiffstats
path: root/drivers/pci/pcie/pme.c
diff options
context:
space:
mode:
authorJoel Stanley <joel@jms.id.au>2019-04-08 12:35:00 +0930
committerJoel Stanley <joel@jms.id.au>2019-04-08 12:35:05 +0930
commit0b37f9a0bd24d9622f75d981feac67e72351b6e8 (patch)
treed40154b713e136a2d9dfb3fcb1903dd730bd234f /drivers/pci/pcie/pme.c
parentdf66fbc97853fbba90a0bfa44de32f3d5f7602b4 (diff)
parent8b298d3a0bd5feeb47129c4889356b38b78ab231 (diff)
downloadtalos-obmc-linux-0b37f9a0bd24d9622f75d981feac67e72351b6e8.tar.gz
talos-obmc-linux-0b37f9a0bd24d9622f75d981feac67e72351b6e8.zip
Merge tag 'v5.0.7' into dev-5.0
This is the 5.0.7 stable release Signed-off-by: Joel Stanley <joel@jms.id.au>
Diffstat (limited to 'drivers/pci/pcie/pme.c')
-rw-r--r--drivers/pci/pcie/pme.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/pci/pcie/pme.c b/drivers/pci/pcie/pme.c
index 1a8b85051b1b..efa5b552914b 100644
--- a/drivers/pci/pcie/pme.c
+++ b/drivers/pci/pcie/pme.c
@@ -363,6 +363,16 @@ static bool pcie_pme_check_wakeup(struct pci_bus *bus)
return false;
}
+static void pcie_pme_disable_interrupt(struct pci_dev *port,
+ struct pcie_pme_service_data *data)
+{
+ spin_lock_irq(&data->lock);
+ pcie_pme_interrupt_enable(port, false);
+ pcie_clear_root_pme_status(port);
+ data->noirq = true;
+ spin_unlock_irq(&data->lock);
+}
+
/**
* pcie_pme_suspend - Suspend PCIe PME service device.
* @srv: PCIe service device to suspend.
@@ -387,11 +397,7 @@ static int pcie_pme_suspend(struct pcie_device *srv)
return 0;
}
- spin_lock_irq(&data->lock);
- pcie_pme_interrupt_enable(port, false);
- pcie_clear_root_pme_status(port);
- data->noirq = true;
- spin_unlock_irq(&data->lock);
+ pcie_pme_disable_interrupt(port, data);
synchronize_irq(srv->irq);
@@ -427,9 +433,11 @@ static int pcie_pme_resume(struct pcie_device *srv)
*/
static void pcie_pme_remove(struct pcie_device *srv)
{
- pcie_pme_suspend(srv);
+ struct pcie_pme_service_data *data = get_service_data(srv);
+
+ pcie_pme_disable_interrupt(srv->port, data);
free_irq(srv->irq, srv);
- kfree(get_service_data(srv));
+ kfree(data);
}
static struct pcie_port_service_driver pcie_pme_driver = {
OpenPOWER on IntegriCloud