0f7347c20c
The following patch makes swsusp avoid problems during resume if there are too many pages to save on suspend. It adds a constant that allows us to verify if we are going to save too many pages and implements the check (this is done as early as we can tell that the check will trigger, which is in swsusp_alloc()). Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Acked-by: Pavel Machek <pavel@suse.cz> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
#include <linux/suspend.h>
|
|
#include <linux/utsname.h>
|
|
|
|
/* With SUSPEND_CONSOLE defined suspend looks *really* cool, but
|
|
we probably do not take enough locks for switching consoles, etc,
|
|
so bad things might happen.
|
|
*/
|
|
#if defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
|
|
#define SUSPEND_CONSOLE (MAX_NR_CONSOLES-1)
|
|
#endif
|
|
|
|
#define MAX_PBES ((PAGE_SIZE - sizeof(struct new_utsname) \
|
|
- 4 - 3*sizeof(unsigned long) - sizeof(int) \
|
|
- sizeof(void *)) / sizeof(swp_entry_t))
|
|
|
|
struct swsusp_info {
|
|
struct new_utsname uts;
|
|
u32 version_code;
|
|
unsigned long num_physpages;
|
|
int cpus;
|
|
unsigned long image_pages;
|
|
unsigned long pagedir_pages;
|
|
suspend_pagedir_t * suspend_pagedir;
|
|
swp_entry_t pagedir[MAX_PBES];
|
|
} __attribute__((aligned(PAGE_SIZE)));
|
|
|
|
|
|
|
|
#ifdef CONFIG_SOFTWARE_SUSPEND
|
|
extern int pm_suspend_disk(void);
|
|
|
|
#else
|
|
static inline int pm_suspend_disk(void)
|
|
{
|
|
return -EPERM;
|
|
}
|
|
#endif
|
|
extern struct semaphore pm_sem;
|
|
#define power_attr(_name) \
|
|
static struct subsys_attribute _name##_attr = { \
|
|
.attr = { \
|
|
.name = __stringify(_name), \
|
|
.mode = 0644, \
|
|
}, \
|
|
.show = _name##_show, \
|
|
.store = _name##_store, \
|
|
}
|
|
|
|
extern struct subsystem power_subsys;
|
|
|
|
extern int freeze_processes(void);
|
|
extern void thaw_processes(void);
|
|
|
|
extern int pm_prepare_console(void);
|
|
extern void pm_restore_console(void);
|