diff options
| author | Pavel Machek <pavel@ucw.cz> | 2002-10-29 00:44:28 -0800 |
|---|---|---|
| committer | Christoph Hellwig <hch@lst.de> | 2002-10-29 00:44:28 -0800 |
| commit | 24cc3559af0029ab3fb732a55bd417e25e6f1f2b (patch) | |
| tree | 5342e5156b71cf7f2886eb8dc9424aee37c253b8 /kernel | |
| parent | d7952bdd97c3afefc636d4b71dc39ee7dc13efc9 (diff) | |
[PATCH] swsusp -- small fixes
Do not oops when no swapfile is available and make it compile on
DISCONTIGMEM machines.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/suspend.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/kernel/suspend.c b/kernel/suspend.c index 2aa820a6092b..2dd8fa50788f 100644 --- a/kernel/suspend.c +++ b/kernel/suspend.c @@ -57,12 +57,13 @@ #include <linux/pm.h> #include <linux/device.h> #include <linux/buffer_head.h> +#include <linux/swapops.h> +#include <linux/bootmem.h> #include <asm/uaccess.h> #include <asm/mmu_context.h> #include <asm/pgtable.h> #include <asm/io.h> -#include <linux/swapops.h> extern void signal_wake_up(struct task_struct *t); extern int sys_sync(void); @@ -225,7 +226,7 @@ int freeze_processes(void) todo++; } while_each_thread(g, p); read_unlock(&tasklist_lock); - yield(); + yield(); /* Yield is okay here */ if (time_after(jiffies, start_time + TIMEOUT)) { printk( "\n" ); printk(KERN_ERR " stopping tasks failed (%d tasks remaining)\n", todo ); @@ -309,6 +310,9 @@ static void mark_swapfiles(swp_entry_t prev, int mode) union diskpage *cur; struct page *page; + if (root_swap == 0xFFFF) /* ignored */ + return; + page = alloc_page(GFP_ATOMIC); if (!page) panic("Out of memory in mark_swapfiles"); @@ -474,9 +478,9 @@ static int count_and_copy_data_pages(struct pbe *pagedir_p) #ifdef CONFIG_DISCONTIGMEM panic("Discontingmem not supported"); #else - BUG_ON (max_mapnr != num_physpages); + BUG_ON (max_pfn != num_physpages); #endif - for (pfn = 0; pfn < max_mapnr; pfn++) { + for (pfn = 0; pfn < max_pfn; pfn++) { page = pfn_to_page(pfn); if (PageHighMem(page)) panic("Swsusp not supported on highmem boxes. Send 1GB of RAM to <pavel@ucw.cz> and try again ;-)."); @@ -686,6 +690,7 @@ static int suspend_save_image(void) if(nr_free_pages() < nr_needed_pages) { printk(KERN_CRIT "%sCouldn't get enough free pages, on %d pages short\n", name_suspend, nr_needed_pages-nr_free_pages()); + root_swap = 0xFFFF; spin_unlock_irq(&suspend_pagedir_lock); return 1; } |
