diff options
Diffstat (limited to 'drivers/pci/pcie')
-rw-r--r-- | drivers/pci/pcie/pme.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/pci/pcie/pme.c b/drivers/pci/pcie/pme.c index 0057344a3fcb..001f1b78f39c 100644 --- a/drivers/pci/pcie/pme.c +++ b/drivers/pci/pcie/pme.c | |||
@@ -84,6 +84,9 @@ static bool pcie_pme_walk_bus(struct pci_bus *bus) | |||
84 | list_for_each_entry(dev, &bus->devices, bus_list) { | 84 | list_for_each_entry(dev, &bus->devices, bus_list) { |
85 | /* Skip PCIe devices in case we started from a root port. */ | 85 | /* Skip PCIe devices in case we started from a root port. */ |
86 | if (!pci_is_pcie(dev) && pci_check_pme_status(dev)) { | 86 | if (!pci_is_pcie(dev) && pci_check_pme_status(dev)) { |
87 | if (dev->pme_poll) | ||
88 | dev->pme_poll = false; | ||
89 | |||
87 | pci_wakeup_event(dev); | 90 | pci_wakeup_event(dev); |
88 | pm_request_resume(&dev->dev); | 91 | pm_request_resume(&dev->dev); |
89 | ret = true; | 92 | ret = true; |
@@ -142,6 +145,9 @@ static void pcie_pme_handle_request(struct pci_dev *port, u16 req_id) | |||
142 | 145 | ||
143 | /* First, check if the PME is from the root port itself. */ | 146 | /* First, check if the PME is from the root port itself. */ |
144 | if (port->devfn == devfn && port->bus->number == busnr) { | 147 | if (port->devfn == devfn && port->bus->number == busnr) { |
148 | if (port->pme_poll) | ||
149 | port->pme_poll = false; | ||
150 | |||
145 | if (pci_check_pme_status(port)) { | 151 | if (pci_check_pme_status(port)) { |
146 | pm_request_resume(&port->dev); | 152 | pm_request_resume(&port->dev); |
147 | found = true; | 153 | found = true; |
@@ -187,6 +193,9 @@ static void pcie_pme_handle_request(struct pci_dev *port, u16 req_id) | |||
187 | /* The device is there, but we have to check its PME status. */ | 193 | /* The device is there, but we have to check its PME status. */ |
188 | found = pci_check_pme_status(dev); | 194 | found = pci_check_pme_status(dev); |
189 | if (found) { | 195 | if (found) { |
196 | if (dev->pme_poll) | ||
197 | dev->pme_poll = false; | ||
198 | |||
190 | pci_wakeup_event(dev); | 199 | pci_wakeup_event(dev); |
191 | pm_request_resume(&dev->dev); | 200 | pm_request_resume(&dev->dev); |
192 | } | 201 | } |