diff options
| author | Paul Mackerras <paulus@samba.org> | 2005-09-25 08:51:50 -0400 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2005-09-25 08:51:50 -0400 |
| commit | e5baa396af7560382d2cf3f0871d616b61fc284c (patch) | |
| tree | 6afc166894b8c8b3b2cf6add72a726be14ae2443 /kernel/power | |
| parent | d6a4c847e43c851cc0ddf73087a730227223f989 (diff) | |
| parent | ef6bd6eb90ad72ee8ee7ba8b271f27102e9a90c1 (diff) | |
Merge from Linus' tree.
Diffstat (limited to 'kernel/power')
| -rw-r--r-- | kernel/power/Kconfig | 2 | ||||
| -rw-r--r-- | kernel/power/disk.c | 6 | ||||
| -rw-r--r-- | kernel/power/power.h | 2 | ||||
| -rw-r--r-- | kernel/power/swsusp.c | 12 |
4 files changed, 12 insertions, 10 deletions
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index 396c7873e804..46a5e5acff97 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig | |||
| @@ -29,7 +29,7 @@ config PM_DEBUG | |||
| 29 | 29 | ||
| 30 | config SOFTWARE_SUSPEND | 30 | config SOFTWARE_SUSPEND |
| 31 | bool "Software Suspend" | 31 | bool "Software Suspend" |
| 32 | depends on PM && SWAP && (X86 || ((FVR || PPC32) && !SMP)) | 32 | depends on PM && SWAP && (X86 && (!SMP || SUSPEND_SMP)) || ((FVR || PPC32) && !SMP) |
| 33 | ---help--- | 33 | ---help--- |
| 34 | Enable the possibility of suspending the machine. | 34 | Enable the possibility of suspending the machine. |
| 35 | It doesn't need APM. | 35 | It doesn't need APM. |
diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 2d8bf054d036..761956e813f5 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c | |||
| @@ -17,12 +17,12 @@ | |||
| 17 | #include <linux/delay.h> | 17 | #include <linux/delay.h> |
| 18 | #include <linux/fs.h> | 18 | #include <linux/fs.h> |
| 19 | #include <linux/mount.h> | 19 | #include <linux/mount.h> |
| 20 | #include <linux/pm.h> | ||
| 20 | 21 | ||
| 21 | #include "power.h" | 22 | #include "power.h" |
| 22 | 23 | ||
| 23 | 24 | ||
| 24 | extern suspend_disk_method_t pm_disk_mode; | 25 | extern suspend_disk_method_t pm_disk_mode; |
| 25 | extern struct pm_ops * pm_ops; | ||
| 26 | 26 | ||
| 27 | extern int swsusp_suspend(void); | 27 | extern int swsusp_suspend(void); |
| 28 | extern int swsusp_write(void); | 28 | extern int swsusp_write(void); |
| @@ -49,13 +49,11 @@ dev_t swsusp_resume_device; | |||
| 49 | 49 | ||
| 50 | static void power_down(suspend_disk_method_t mode) | 50 | static void power_down(suspend_disk_method_t mode) |
| 51 | { | 51 | { |
| 52 | unsigned long flags; | ||
| 53 | int error = 0; | 52 | int error = 0; |
| 54 | 53 | ||
| 55 | local_irq_save(flags); | ||
| 56 | switch(mode) { | 54 | switch(mode) { |
| 57 | case PM_DISK_PLATFORM: | 55 | case PM_DISK_PLATFORM: |
| 58 | device_shutdown(); | 56 | kernel_power_off_prepare(); |
| 59 | error = pm_ops->enter(PM_SUSPEND_DISK); | 57 | error = pm_ops->enter(PM_SUSPEND_DISK); |
| 60 | break; | 58 | break; |
| 61 | case PM_DISK_SHUTDOWN: | 59 | case PM_DISK_SHUTDOWN: |
diff --git a/kernel/power/power.h b/kernel/power/power.h index cd6a3493cc0d..9c9167d910dd 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | #include <linux/suspend.h> | 1 | #include <linux/suspend.h> |
| 2 | #include <linux/utsname.h> | 2 | #include <linux/utsname.h> |
| 3 | 3 | ||
| 4 | /* With SUSPEND_CONSOLE defined, it suspend looks *really* cool, but | 4 | /* With SUSPEND_CONSOLE defined suspend looks *really* cool, but |
| 5 | we probably do not take enough locks for switching consoles, etc, | 5 | we probably do not take enough locks for switching consoles, etc, |
| 6 | so bad things might happen. | 6 | so bad things might happen. |
| 7 | */ | 7 | */ |
diff --git a/kernel/power/swsusp.c b/kernel/power/swsusp.c index d967e875ee82..1cc9ff25e479 100644 --- a/kernel/power/swsusp.c +++ b/kernel/power/swsusp.c | |||
| @@ -363,7 +363,7 @@ static void lock_swapdevices(void) | |||
| 363 | } | 363 | } |
| 364 | 364 | ||
| 365 | /** | 365 | /** |
| 366 | * write_swap_page - Write one page to a fresh swap location. | 366 | * write_page - Write one page to a fresh swap location. |
| 367 | * @addr: Address we're writing. | 367 | * @addr: Address we're writing. |
| 368 | * @loc: Place to store the entry we used. | 368 | * @loc: Place to store the entry we used. |
| 369 | * | 369 | * |
| @@ -863,6 +863,9 @@ static int alloc_image_pages(void) | |||
| 863 | return 0; | 863 | return 0; |
| 864 | } | 864 | } |
| 865 | 865 | ||
| 866 | /* Free pages we allocated for suspend. Suspend pages are alocated | ||
| 867 | * before atomic copy, so we need to free them after resume. | ||
| 868 | */ | ||
| 866 | void swsusp_free(void) | 869 | void swsusp_free(void) |
| 867 | { | 870 | { |
| 868 | BUG_ON(PageNosave(virt_to_page(pagedir_save))); | 871 | BUG_ON(PageNosave(virt_to_page(pagedir_save))); |
| @@ -918,6 +921,7 @@ static int swsusp_alloc(void) | |||
| 918 | 921 | ||
| 919 | pagedir_nosave = NULL; | 922 | pagedir_nosave = NULL; |
| 920 | nr_copy_pages = calc_nr(nr_copy_pages); | 923 | nr_copy_pages = calc_nr(nr_copy_pages); |
| 924 | nr_copy_pages_check = nr_copy_pages; | ||
| 921 | 925 | ||
| 922 | pr_debug("suspend: (pages needed: %d + %d free: %d)\n", | 926 | pr_debug("suspend: (pages needed: %d + %d free: %d)\n", |
| 923 | nr_copy_pages, PAGES_FOR_IO, nr_free_pages()); | 927 | nr_copy_pages, PAGES_FOR_IO, nr_free_pages()); |
| @@ -940,7 +944,6 @@ static int swsusp_alloc(void) | |||
| 940 | return error; | 944 | return error; |
| 941 | } | 945 | } |
| 942 | 946 | ||
| 943 | nr_copy_pages_check = nr_copy_pages; | ||
| 944 | return 0; | 947 | return 0; |
| 945 | } | 948 | } |
| 946 | 949 | ||
| @@ -1213,8 +1216,9 @@ static struct pbe * swsusp_pagedir_relocate(struct pbe *pblist) | |||
| 1213 | free_pagedir(pblist); | 1216 | free_pagedir(pblist); |
| 1214 | free_eaten_memory(); | 1217 | free_eaten_memory(); |
| 1215 | pblist = NULL; | 1218 | pblist = NULL; |
| 1216 | } | 1219 | /* Is this even worth handling? It should never ever happen, and we |
| 1217 | else | 1220 | have just lost user's state, anyway... */ |
| 1221 | } else | ||
| 1218 | printk("swsusp: Relocated %d pages\n", rel); | 1222 | printk("swsusp: Relocated %d pages\n", rel); |
| 1219 | 1223 | ||
| 1220 | return pblist; | 1224 | return pblist; |
