lkml.org 
[lkml]   [2009]   [Mar]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 11/11] PCI PM: Restore config spaces of all devices during early resume
    Date
    From: Rafael J. Wysocki <rjw@sisk.pl>

    At present the configuration spaces of PCI devices that have no
    drivers or no PM support in the drivers (either legacy or through a
    pm object) are not saved during suspend and, consequently, they are
    not restored during resume. This generally may lead to the state of
    the system being slightly inconsistent after the resume, so it's
    better to save and restore the configuration spaces of these devices
    as well.

    Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
    ---
    drivers/pci/pci-driver.c | 16 +++++++++-------
    1 file changed, 9 insertions(+), 7 deletions(-)

    Index: linux-2.6/drivers/pci/pci-driver.c
    ===================================================================
    --- linux-2.6.orig/drivers/pci/pci-driver.c
    +++ linux-2.6/drivers/pci/pci-driver.c
    @@ -516,13 +516,13 @@ static int pci_pm_suspend(struct device
    if (pci_has_legacy_pm_support(pci_dev))
    return pci_legacy_suspend(dev, PMSG_SUSPEND);

    + pci_dev->state_saved = false;
    +
    if (!pm) {
    pci_pm_default_suspend(pci_dev);
    goto Fixup;
    }

    - pci_dev->state_saved = false;
    -
    if (pm->suspend) {
    pci_power_t prev = pci_dev->current_state;
    int error;
    @@ -554,8 +554,10 @@ static int pci_pm_suspend_noirq(struct d
    if (pci_has_legacy_pm_support(pci_dev))
    return pci_legacy_suspend_late(dev, PMSG_SUSPEND);

    - if (!pm)
    + if (!pm) {
    + pci_save_state(pci_dev);
    return 0;
    + }

    if (pm->suspend_noirq) {
    pci_power_t prev = pci_dev->current_state;
    @@ -650,13 +652,13 @@ static int pci_pm_freeze(struct device *
    if (pci_has_legacy_pm_support(pci_dev))
    return pci_legacy_suspend(dev, PMSG_FREEZE);

    + pci_dev->state_saved = false;
    +
    if (!pm) {
    pci_pm_default_suspend(pci_dev);
    return 0;
    }

    - pci_dev->state_saved = false;
    -
    if (pm->freeze) {
    int error;

    @@ -738,13 +740,13 @@ static int pci_pm_poweroff(struct device
    if (pci_has_legacy_pm_support(pci_dev))
    return pci_legacy_suspend(dev, PMSG_HIBERNATE);

    + pci_dev->state_saved = false;
    +
    if (!pm) {
    pci_pm_default_suspend(pci_dev);
    goto Fixup;
    }

    - pci_dev->state_saved = false;
    -
    if (pm->poweroff) {
    int error;


    \
     
     \ /
      Last update: 2009-03-14 12:41    [W:0.036 / U:0.488 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site