diff options
| -rw-r--r-- | drivers/pci/pci-driver.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 6613bef25bf2..fdb6a697e05a 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c | |||
| @@ -355,6 +355,8 @@ static int pci_legacy_suspend(struct device *dev, pm_message_t state) | |||
| 355 | int i = 0; | 355 | int i = 0; |
| 356 | 356 | ||
| 357 | if (drv && drv->suspend) { | 357 | if (drv && drv->suspend) { |
| 358 | pci_power_t prev = pci_dev->current_state; | ||
| 359 | |||
| 358 | pci_dev->state_saved = false; | 360 | pci_dev->state_saved = false; |
| 359 | 361 | ||
| 360 | i = drv->suspend(pci_dev, state); | 362 | i = drv->suspend(pci_dev, state); |
| @@ -365,12 +367,16 @@ static int pci_legacy_suspend(struct device *dev, pm_message_t state) | |||
| 365 | if (pci_dev->state_saved) | 367 | if (pci_dev->state_saved) |
| 366 | goto Fixup; | 368 | goto Fixup; |
| 367 | 369 | ||
| 368 | if (WARN_ON_ONCE(pci_dev->current_state != PCI_D0)) | 370 | if (pci_dev->current_state != PCI_D0 |
| 371 | && pci_dev->current_state != PCI_UNKNOWN) { | ||
| 372 | WARN_ONCE(pci_dev->current_state != prev, | ||
| 373 | "PCI PM: Device state not saved by %pF\n", | ||
| 374 | drv->suspend); | ||
| 369 | goto Fixup; | 375 | goto Fixup; |
| 376 | } | ||
| 370 | } | 377 | } |
| 371 | 378 | ||
| 372 | pci_save_state(pci_dev); | 379 | pci_save_state(pci_dev); |
| 373 | pci_dev->state_saved = true; | ||
| 374 | /* | 380 | /* |
| 375 | * This is for compatibility with existing code with legacy PM support. | 381 | * This is for compatibility with existing code with legacy PM support. |
| 376 | */ | 382 | */ |
