--- /dev/null
+From 82fee4d67ab86d6fe5eb0f9a9e988ca9d654d765 Mon Sep 17 00:00:00 2001
+From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
+Date: Mon, 4 Feb 2013 15:56:05 +0400
+Subject: PCI/PM: Clear state_saved during suspend
+
+From: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
+
+commit 82fee4d67ab86d6fe5eb0f9a9e988ca9d654d765 upstream.
+
+This patch clears pci_dev->state_saved at the beginning of suspending.
+PCI config state may be saved long before that. Some drivers call
+pci_save_state() from the ->probe() callback to get snapshot of sane
+configuration space to use in the ->slot_reset() callback.
+
+[wangyj: adjust context]
+Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org> # add comment
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Signed-off-by: Yijing Wang <wangyijing@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/pci/pci-driver.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/pci/pci-driver.c
++++ b/drivers/pci/pci-driver.c
+@@ -680,6 +680,7 @@ static int pci_pm_suspend(struct device
+ goto Fixup;
+ }
+
++ pci_dev->state_saved = false;
+ if (pm->suspend) {
+ pci_power_t prev = pci_dev->current_state;
+ int error;
+@@ -826,6 +827,7 @@ static int pci_pm_freeze(struct device *
+ return 0;
+ }
+
++ pci_dev->state_saved = false;
+ if (pm->freeze) {
+ int error;
+
+@@ -914,6 +916,7 @@ static int pci_pm_poweroff(struct device
+ goto Fixup;
+ }
+
++ pci_dev->state_saved = false;
+ if (pm->poweroff) {
+ int error;
+
+@@ -1032,6 +1035,7 @@ static int pci_pm_runtime_suspend(struct
+ if (!pm || !pm->runtime_suspend)
+ return -ENOSYS;
+
++ pci_dev->state_saved = false;
+ error = pm->runtime_suspend(dev);
+ suspend_report_result(pm->runtime_suspend, error);
+ if (error)