]> err.no Git - linux-2.6/blobdiff - kernel/power/snapshot.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
[linux-2.6] / kernel / power / snapshot.c
index cc349437fb727db782945c4fbd04c5b0fca85ab0..c5863d02c89efc08ef430752bb062f0aafcb4bc7 100644 (file)
@@ -37,6 +37,7 @@
 struct pbe *pagedir_nosave;
 static unsigned int nr_copy_pages;
 static unsigned int nr_meta_pages;
+static unsigned long *buffer;
 
 #ifdef CONFIG_HIGHMEM
 unsigned int count_highmem_pages(void)
@@ -82,7 +83,7 @@ static int save_highmem_zone(struct zone *zone)
                void *kaddr;
                unsigned long pfn = zone_pfn + zone->zone_start_pfn;
 
-               if (!(pfn%1000))
+               if (!(pfn%10000))
                        printk(".");
                if (!pfn_valid(pfn))
                        continue;
@@ -121,13 +122,15 @@ int save_highmem(void)
        struct zone *zone;
        int res = 0;
 
-       pr_debug("swsusp: Saving Highmem\n");
+       pr_debug("swsusp: Saving Highmem");
+       drain_local_pages();
        for_each_zone (zone) {
                if (is_highmem(zone))
                        res = save_highmem_zone(zone);
                if (res)
                        return res;
        }
+       printk("\n");
        return 0;
 }
 
@@ -389,7 +392,7 @@ struct pbe *alloc_pagedir(unsigned int nr_pages, gfp_t gfp_mask, int safe_needed
                free_pagedir(pblist);
                pblist = NULL;
         } else
-               create_pbe_list(pblist, nr_pages);
+               create_pbe_list(pblist, nr_pages);
        return pblist;
 }
 
@@ -418,6 +421,7 @@ void swsusp_free(void)
        nr_copy_pages = 0;
        nr_meta_pages = 0;
        pagedir_nosave = NULL;
+       buffer = NULL;
 }
 
 
@@ -523,6 +527,8 @@ static void init_header(struct swsusp_info *info)
        info->cpus = num_online_cpus();
        info->image_pages = nr_copy_pages;
        info->pages = nr_copy_pages + nr_meta_pages + 1;
+       info->size = info->pages;
+       info->size <<= PAGE_SHIFT;
 }
 
 /**
@@ -568,8 +574,6 @@ static inline struct pbe *pack_orig_addresses(unsigned long *buf, struct pbe *pb
 
 int snapshot_read_next(struct snapshot_handle *handle, size_t count)
 {
-       static unsigned long *buffer;
-
        if (handle->page > nr_meta_pages + nr_copy_pages)
                return 0;
        if (!buffer) {
@@ -774,7 +778,6 @@ static int create_image(struct snapshot_handle *handle)
 
 int snapshot_write_next(struct snapshot_handle *handle, size_t count)
 {
-       static unsigned long *buffer;
        int error = 0;
 
        if (handle->prev && handle->page > nr_meta_pages + nr_copy_pages)