You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6: (23 commits) at_hdmac: Rework suspend_late()/resume_early() PM: Reset transition_started at dpm_resume_noirq PM: Update kerneldoc comments in drivers/base/power/main.c PM: Add convenience macro to make switching to dev_pm_ops less error-prone hp-wmi: Switch driver to dev_pm_ops floppy: Switch driver to dev_pm_ops PM: Trivial fixes PM / Hibernate / Memory hotplug: Always use for_each_populated_zone() PM/Hibernate: Do not try to allocate too much memory too hard (rev. 2) PM/Hibernate: Do not release preallocated memory unnecessarily (rev. 2) PM/Hibernate: Rework shrinking of memory PM: Fix typo in label name s/Platofrm_finish/Platform_finish/ PM: Run-time PM platform device bus support PM: Introduce core framework for run-time PM of I/O devices (rev. 17) Driver Core: Make PM operations a const pointer PM: Remove platform device suspend_late()/resume_early() V2 USB: Rework musb suspend()/resume_early() I2C: Rework i2c-s3c2410 suspend_late()/resume() V2 I2C: Rework i2c-pxa suspend_late()/resume_early() DMA: Rework txx9dmac suspend_late()/resume_early() ... Fix trivial conflict in drivers/base/platform.c (due to same constification patch being merged in both sides, along with some other PM work in the PM branch)
This commit is contained in:
@@ -208,3 +208,17 @@ config APM_EMULATION
|
||||
random kernel OOPSes or reboots that don't seem to be related to
|
||||
anything, try disabling/enabling this option (or disabling/enabling
|
||||
APM in your BIOS).
|
||||
|
||||
config PM_RUNTIME
|
||||
bool "Run-time PM core functionality"
|
||||
depends on PM
|
||||
---help---
|
||||
Enable functionality allowing I/O devices to be put into energy-saving
|
||||
(low power) states at run time (or autosuspended) after a specified
|
||||
period of inactivity and woken up in response to a hardware-generated
|
||||
wake-up event or a driver's request.
|
||||
|
||||
Hardware support is generally required for this functionality to work
|
||||
and the bus type drivers of the buses the devices are on are
|
||||
responsible for the actual handling of the autosuspend requests and
|
||||
wake-up events.
|
||||
|
||||
@@ -298,8 +298,8 @@ int hibernation_snapshot(int platform_mode)
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/* Free memory before shutting down devices. */
|
||||
error = swsusp_shrink_memory();
|
||||
/* Preallocate image memory before shutting down devices. */
|
||||
error = hibernate_preallocate_memory();
|
||||
if (error)
|
||||
goto Close;
|
||||
|
||||
@@ -315,6 +315,10 @@ int hibernation_snapshot(int platform_mode)
|
||||
/* Control returns here after successful restore */
|
||||
|
||||
Resume_devices:
|
||||
/* We may need to release the preallocated image pages here. */
|
||||
if (error || !in_suspend)
|
||||
swsusp_free();
|
||||
|
||||
dpm_resume_end(in_suspend ?
|
||||
(error ? PMSG_RECOVER : PMSG_THAW) : PMSG_RESTORE);
|
||||
resume_console();
|
||||
@@ -460,11 +464,11 @@ int hibernation_platform_enter(void)
|
||||
|
||||
error = hibernation_ops->prepare();
|
||||
if (error)
|
||||
goto Platofrm_finish;
|
||||
goto Platform_finish;
|
||||
|
||||
error = disable_nonboot_cpus();
|
||||
if (error)
|
||||
goto Platofrm_finish;
|
||||
goto Platform_finish;
|
||||
|
||||
local_irq_disable();
|
||||
sysdev_suspend(PMSG_HIBERNATE);
|
||||
@@ -476,7 +480,7 @@ int hibernation_platform_enter(void)
|
||||
* We don't need to reenable the nonboot CPUs or resume consoles, since
|
||||
* the system is going to be halted anyway.
|
||||
*/
|
||||
Platofrm_finish:
|
||||
Platform_finish:
|
||||
hibernation_ops->finish();
|
||||
|
||||
dpm_suspend_noirq(PMSG_RESTORE);
|
||||
@@ -578,7 +582,10 @@ int hibernate(void)
|
||||
goto Thaw;
|
||||
|
||||
error = hibernation_snapshot(hibernation_mode == HIBERNATION_PLATFORM);
|
||||
if (in_suspend && !error) {
|
||||
if (error)
|
||||
goto Thaw;
|
||||
|
||||
if (in_suspend) {
|
||||
unsigned int flags = 0;
|
||||
|
||||
if (hibernation_mode == HIBERNATION_PLATFORM)
|
||||
@@ -590,8 +597,8 @@ int hibernate(void)
|
||||
power_down();
|
||||
} else {
|
||||
pr_debug("PM: Image restored successfully.\n");
|
||||
swsusp_free();
|
||||
}
|
||||
|
||||
Thaw:
|
||||
thaw_processes();
|
||||
Finish:
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/kobject.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/resume-trace.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#include "power.h"
|
||||
|
||||
@@ -217,8 +218,24 @@ static struct attribute_group attr_group = {
|
||||
.attrs = g,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PM_RUNTIME
|
||||
struct workqueue_struct *pm_wq;
|
||||
|
||||
static int __init pm_start_workqueue(void)
|
||||
{
|
||||
pm_wq = create_freezeable_workqueue("pm");
|
||||
|
||||
return pm_wq ? 0 : -ENOMEM;
|
||||
}
|
||||
#else
|
||||
static inline int pm_start_workqueue(void) { return 0; }
|
||||
#endif
|
||||
|
||||
static int __init pm_init(void)
|
||||
{
|
||||
int error = pm_start_workqueue();
|
||||
if (error)
|
||||
return error;
|
||||
power_kobj = kobject_create_and_add("power", NULL);
|
||||
if (!power_kobj)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -74,7 +74,7 @@ extern asmlinkage int swsusp_arch_resume(void);
|
||||
|
||||
extern int create_basic_memory_bitmaps(void);
|
||||
extern void free_basic_memory_bitmaps(void);
|
||||
extern int swsusp_shrink_memory(void);
|
||||
extern int hibernate_preallocate_memory(void);
|
||||
|
||||
/**
|
||||
* Auxiliary structure used for reading the snapshot image data and
|
||||
|
||||
+314
-100
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user