diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-07 19:17:18 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-01-07 19:17:18 -0500 |
commit | 2a893f91f57314c593f36cee689ad6e353af9daf (patch) | |
tree | 6c8287371612ddc9070991cd5c6b6c011c7d5dc1 /drivers/base/power/main.c | |
parent | 127aa93066261c2b8f03cb38e7165de8cd71736e (diff) | |
parent | f67ffa95836b31be5d8fe336aee3bfc6412c5696 (diff) |
Merge tag 'pm+acpi-for-3.8-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI and power management fixes from Rafael Wysocki:
- Removal of some ACPICA code that the kernel will never use from Lv
Zheng.
- APEI fix from Adrian Huang.
- Removal of unnecessary ACPI memory hotplug driver code from Liu
Jinsong.
- Minor ACPI power management fixes.
- ACPI debug code fix from Joe Perches.
- ACPI fix to make system bus device nodes get the right names.
- PNP resources handling fixes from Witold Szczeponik.
- cpuidle fix for a recent regression stalling boot on systems with
great numbers of CPUs from Daniel Lezcano.
- cpuidle fixes from Sivaram Nair.
- intel_idle debug message fix from Youquan Song.
- cpufreq build regression fix from Larry Finger.
- cpufreq fix for an obscure initialization race related to statistics
from Konstantin Khlebnikov.
- cpufreq change disabling the Longhaul driver by default from RafaĆ
Bilski.
- PM core fix preventing device suspend errors from happening during
system suspend due to obscure race conditions.
- PM QoS local variable name cleanup.
* tag 'pm+acpi-for-3.8-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
PM: Move disabling/enabling runtime PM to late suspend/early resume
PM / QoS: Rename local variable in dev_pm_qos_add_ancestor_request()
ACPI / scan: Do not use dummy HID for system bus ACPI nodes
cpufreq / governor: Fix problem with cpufreq_ondemand or cpufreq_conservative
cpufreq / Longhaul: Disable driver by default
cpufreq / stats: fix race between stats allocation and first usage
cpuidle: fix lock contention in the idle path
intel_idle: pr_debug information need separated
cpuidle / coupled: fix ready counter decrement
cpuidle: Fix finding state with min power_usage
PNP: Handle IORESOURCE_BITS in resource allocation
PNP: Simplify setting of resources
ACPI / power: Remove useless message from device registering routine
ACPI / glue: Update DBG macro to include KERN_DEBUG
ACPI / PM: Do not apply ACPI_SUCCESS() to acpi_bus_get_device() result
ACPI / memhotplug: remove redundant logic of acpi memory hotadd
ACPI / APEI: Fix the returned value in erst_dbg_read
ACPICA: Remove useless mini-C library.
Diffstat (limited to 'drivers/base/power/main.c')
-rw-r--r-- | drivers/base/power/main.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index a3c1404c7933..2b7f77d3fcb0 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c | |||
@@ -513,6 +513,8 @@ static int device_resume_early(struct device *dev, pm_message_t state) | |||
513 | 513 | ||
514 | Out: | 514 | Out: |
515 | TRACE_RESUME(error); | 515 | TRACE_RESUME(error); |
516 | |||
517 | pm_runtime_enable(dev); | ||
516 | return error; | 518 | return error; |
517 | } | 519 | } |
518 | 520 | ||
@@ -589,8 +591,6 @@ static int device_resume(struct device *dev, pm_message_t state, bool async) | |||
589 | if (!dev->power.is_suspended) | 591 | if (!dev->power.is_suspended) |
590 | goto Unlock; | 592 | goto Unlock; |
591 | 593 | ||
592 | pm_runtime_enable(dev); | ||
593 | |||
594 | if (dev->pm_domain) { | 594 | if (dev->pm_domain) { |
595 | info = "power domain "; | 595 | info = "power domain "; |
596 | callback = pm_op(&dev->pm_domain->ops, state); | 596 | callback = pm_op(&dev->pm_domain->ops, state); |
@@ -930,6 +930,8 @@ static int device_suspend_late(struct device *dev, pm_message_t state) | |||
930 | pm_callback_t callback = NULL; | 930 | pm_callback_t callback = NULL; |
931 | char *info = NULL; | 931 | char *info = NULL; |
932 | 932 | ||
933 | __pm_runtime_disable(dev, false); | ||
934 | |||
933 | if (dev->power.syscore) | 935 | if (dev->power.syscore) |
934 | return 0; | 936 | return 0; |
935 | 937 | ||
@@ -1133,11 +1135,8 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async) | |||
1133 | 1135 | ||
1134 | Complete: | 1136 | Complete: |
1135 | complete_all(&dev->power.completion); | 1137 | complete_all(&dev->power.completion); |
1136 | |||
1137 | if (error) | 1138 | if (error) |
1138 | async_error = error; | 1139 | async_error = error; |
1139 | else if (dev->power.is_suspended) | ||
1140 | __pm_runtime_disable(dev, false); | ||
1141 | 1140 | ||
1142 | return error; | 1141 | return error; |
1143 | } | 1142 | } |