2 * kernel/power/pmdisk.c - Suspend-to-disk implmentation
4 * This STD implementation is initially derived from swsusp (suspend-to-swap).
5 * The original copyright on that was:
7 * Copyright (C) 1998-2001 Gabor Kuti <seasons@fornax.hu>
8 * Copyright (C) 1998,2001,2002 Pavel Machek <pavel@suse.cz>
10 * The additional parts are:
12 * Copyright (C) 2003 Patrick Mochel
13 * Copyright (C) 2003 Open Source Development Lab
15 * This file is released under the GPLv2.
17 * For more information, please see the text files in Documentation/power/
24 #include <linux/bio.h>
25 #include <linux/suspend.h>
26 #include <linux/version.h>
27 #include <linux/reboot.h>
28 #include <linux/device.h>
29 #include <linux/swapops.h>
30 #include <linux/bootmem.h>
31 #include <linux/utsname.h>
33 #include <asm/mmu_context.h>
38 extern asmlinkage int pmdisk_arch_suspend(int resume);
40 #define __ADDRESS(x) ((unsigned long) phys_to_virt(x))
41 #define ADDRESS(x) __ADDRESS((x) << PAGE_SHIFT)
42 #define ADDRESS2(x) __ADDRESS(__pa(x)) /* Needed for x86-64 where some pages are in memory twice */
44 /* References to section boundaries */
45 extern char __nosave_begin, __nosave_end;
47 extern int is_head_of_free_region(struct page *);
49 /* Variables to be preserved over suspend */
50 static int pagedir_order_check;
51 static int nr_copy_pages_check;
53 /* For resume= kernel option */
54 static char resume_file[256] = CONFIG_PM_DISK_PARTITION;
56 static dev_t resume_device;
57 /* Local variables that should not be affected by save */
58 unsigned int pmdisk_pages __nosavedata = 0;
60 /* Suspend pagedir is allocated before final copy, therefore it
61 must be freed after resume
63 Warning: this is evil. There are actually two pagedirs at time of
64 resume. One is "pagedir_save", which is empty frame allocated at
65 time of suspend, that must be freed. Second is "pagedir_nosave",
66 allocated at time of resume, that travels through memory not to
67 collide with anything.
69 suspend_pagedir_t *pm_pagedir_nosave __nosavedata = NULL;
70 static suspend_pagedir_t *pagedir_save;
71 static int pagedir_order __nosavedata = 0;
75 struct new_utsname uts;
77 unsigned long num_physpages;
79 unsigned long image_pages;
80 unsigned long pagedir_pages;
81 swp_entry_t pagedir[768];
82 } __attribute__((aligned(PAGE_SIZE))) pmdisk_info;
86 #define PMDISK_SIG "pmdisk-swap1"
88 struct pmdisk_header {
89 char reserved[PAGE_SIZE - 20 - sizeof(swp_entry_t)];
90 swp_entry_t pmdisk_info;
93 } __attribute__((packed, aligned(PAGE_SIZE))) pmdisk_header;
96 * XXX: We try to keep some more pages free so that I/O operations succeed
97 * without paging. Might this be more?
99 #define PAGES_FOR_IO 512
107 /* We memorize in swapfile_used what swap devices are used for suspension */
108 #define SWAPFILE_UNUSED 0
109 #define SWAPFILE_SUSPEND 1 /* This is the suspending device */
110 #define SWAPFILE_IGNORED 2 /* Those are other swap devices ignored for suspension */
112 static unsigned short swapfile_used[MAX_SWAPFILES];
113 static unsigned short root_swap;
116 static int mark_swapfiles(swp_entry_t prev)
120 rw_swap_page_sync(READ,
121 swp_entry(root_swap, 0),
122 virt_to_page((unsigned long)&pmdisk_header));
123 if (!memcmp("SWAP-SPACE",pmdisk_header.sig,10) ||
124 !memcmp("SWAPSPACE2",pmdisk_header.sig,10)) {
125 memcpy(pmdisk_header.orig_sig,pmdisk_header.sig,10);
126 memcpy(pmdisk_header.sig,PMDISK_SIG,10);
127 pmdisk_header.pmdisk_info = prev;
128 error = rw_swap_page_sync(WRITE,
129 swp_entry(root_swap, 0),
130 virt_to_page((unsigned long)
133 pr_debug("pmdisk: Partition is not swap space.\n");
139 static int read_swapfiles(void) /* This is called before saving image */
143 len=strlen(resume_file);
147 for(i=0; i<MAX_SWAPFILES; i++) {
148 if (swap_info[i].flags == 0) {
149 swapfile_used[i]=SWAPFILE_UNUSED;
152 pr_debug("pmdisk: Default resume partition not set.\n");
153 if(root_swap == 0xFFFF) {
154 swapfile_used[i] = SWAPFILE_SUSPEND;
157 swapfile_used[i] = SWAPFILE_IGNORED;
159 /* we ignore all swap devices that are not the resume_file */
161 // FIXME if(resume_device == swap_info[i].swap_device) {
162 swapfile_used[i] = SWAPFILE_SUSPEND;
165 swapfile_used[i] = SWAPFILE_IGNORED;
170 return (root_swap != 0xffff) ? 0 : -ENODEV;
174 /* This is called after saving image so modification
175 will be lost after resume... and that's what we want. */
176 static void lock_swapdevices(void)
181 for(i = 0; i< MAX_SWAPFILES; i++)
182 if(swapfile_used[i] == SWAPFILE_IGNORED) {
183 swap_info[i].flags ^= 0xFF; /* we make the device unusable. A new call to
184 lock_swapdevices can unlock the devices. */
192 * write_swap_page - Write one page to a fresh swap location.
193 * @addr: Address we're writing.
194 * @loc: Place to store the entry we used.
196 * Allocate a new swap entry and 'sync' it. Note we discard -EIO
197 * errors. That is an artifact left over from swsusp. It did not
198 * check the return of rw_swap_page_sync() at all, since most pages
199 * written back to swap would return -EIO.
200 * This is a partial improvement, since we will at least return other
201 * errors, though we need to eventually fix the damn code.
204 static int write_swap_page(unsigned long addr, swp_entry_t * loc)
209 entry = get_swap_page();
210 if (swp_offset(entry) &&
211 swapfile_used[swp_type(entry)] == SWAPFILE_SUSPEND) {
212 error = rw_swap_page_sync(WRITE, entry,
225 * free_data - Free the swap entries used by the saved image.
227 * Walk the list of used swap entries and free each one.
230 static void free_data(void)
235 for (i = 0; i < pmdisk_pages; i++) {
236 entry = (pm_pagedir_nosave + i)->swap_address;
241 (pm_pagedir_nosave + i)->swap_address = (swp_entry_t){0};
247 * write_data - Write saved image to swap.
249 * Walk the list of pages in the image and sync each one to swap.
252 static int write_data(void)
257 printk( "Writing data to swap (%d pages): ", pmdisk_pages );
258 for (i = 0; i < pmdisk_pages && !error; i++) {
261 error = write_swap_page((pm_pagedir_nosave+i)->address,
262 &((pm_pagedir_nosave+i)->swap_address));
264 printk(" %d Pages done.\n",i);
270 * free_pagedir - Free pages used by the page directory.
273 static void free_pagedir_entries(void)
275 int num = pmdisk_info.pagedir_pages;
278 for (i = 0; i < num; i++)
279 swap_free(pmdisk_info.pagedir[i]);
284 * write_pagedir - Write the array of pages holding the page directory.
285 * @last: Last swap entry we write (needed for header).
288 static int write_pagedir(void)
290 unsigned long addr = (unsigned long)pm_pagedir_nosave;
292 int n = SUSPEND_PD_PAGES(pmdisk_pages);
295 pmdisk_info.pagedir_pages = n;
296 printk( "Writing pagedir (%d pages)\n", n);
297 for (i = 0; i < n && !error; i++, addr += PAGE_SIZE)
298 error = write_swap_page(addr,&pmdisk_info.pagedir[i]);
304 static void dump_pmdisk_info(void)
306 printk(" pmdisk: Version: %u\n",pmdisk_info.version_code);
307 printk(" pmdisk: Num Pages: %ld\n",pmdisk_info.num_physpages);
308 printk(" pmdisk: UTS Sys: %s\n",pmdisk_info.uts.sysname);
309 printk(" pmdisk: UTS Node: %s\n",pmdisk_info.uts.nodename);
310 printk(" pmdisk: UTS Release: %s\n",pmdisk_info.uts.release);
311 printk(" pmdisk: UTS Version: %s\n",pmdisk_info.uts.version);
312 printk(" pmdisk: UTS Machine: %s\n",pmdisk_info.uts.machine);
313 printk(" pmdisk: UTS Domain: %s\n",pmdisk_info.uts.domainname);
314 printk(" pmdisk: CPUs: %d\n",pmdisk_info.cpus);
315 printk(" pmdisk: Image: %ld Pages\n",pmdisk_info.image_pages);
316 printk(" pmdisk: Pagedir: %ld Pages\n",pmdisk_info.pagedir_pages);
319 static void dump_pmdisk_info(void)
325 static void init_header(void)
327 memset(&pmdisk_info,0,sizeof(pmdisk_info));
328 pmdisk_info.version_code = LINUX_VERSION_CODE;
329 pmdisk_info.num_physpages = num_physpages;
330 memcpy(&pmdisk_info.uts,&system_utsname,sizeof(system_utsname));
332 pmdisk_info.cpus = num_online_cpus();
333 pmdisk_info.image_pages = pmdisk_pages;
337 * write_header - Fill and write the suspend header.
338 * @entry: Location of the last swap entry used.
340 * Allocate a page, fill header, write header.
342 * @entry is the location of the last pagedir entry written on
343 * entrance. On exit, it contains the location of the header.
346 static int write_header(swp_entry_t * entry)
349 return write_swap_page((unsigned long)&pmdisk_info,entry);
355 * write_suspend_image - Write entire image and metadata.
359 static int write_suspend_image(void)
362 swp_entry_t prev = { 0 };
366 if ((error = write_data()))
369 if ((error = write_pagedir()))
372 if ((error = write_header(&prev)))
375 error = mark_swapfiles(prev);
379 free_pagedir_entries();
388 * saveable - Determine whether a page should be cloned or not.
391 * We save a page if it's Reserved, and not in the range of pages
392 * statically defined as 'unsaveable', or if it isn't reserved, and
393 * isn't part of a free chunk of pages.
394 * If it is part of a free chunk, we update @pfn to point to the last
398 static int saveable(unsigned long * pfn)
400 struct page * page = pfn_to_page(*pfn);
402 if (PageNosave(page))
405 if (!PageReserved(page)) {
408 if ((chunk_size = is_head_of_free_region(page))) {
409 *pfn += chunk_size - 1;
412 } else if (PageReserved(page)) {
413 /* Just copy whole code segment.
414 * Hopefully it is not that big.
416 if ((ADDRESS(*pfn) >= (unsigned long) ADDRESS2(&__nosave_begin)) &&
417 (ADDRESS(*pfn) < (unsigned long) ADDRESS2(&__nosave_end))) {
418 pr_debug("[nosave %lx]\n", ADDRESS(*pfn));
421 /* Hmm, perhaps copying all reserved pages is not
422 * too healthy as they may contain
423 * critical bios data?
432 * count_pages - Determine size of page directory.
434 * Iterate over all the pages in the system and tally the number
438 static void count_pages(void)
443 for (pfn = 0; pfn < max_pfn; pfn++) {
452 * copy_pages - Atomically snapshot memory.
454 * Iterate over all the pages in the system and copy each one
455 * into its corresponding location in the pagedir.
456 * We rely on the fact that the number of pages that we're snap-
457 * shotting hasn't changed since we counted them.
460 static void copy_pages(void)
462 struct pbe * p = pagedir_save;
466 for (pfn = 0; pfn < max_pfn; pfn++) {
467 if (saveable(&pfn)) {
469 p->orig_address = ADDRESS(pfn);
470 copy_page((void *) p->address,
471 (void *) p->orig_address);
475 BUG_ON(n != pmdisk_pages);
480 * free_image_pages - Free each page allocated for snapshot.
483 static void free_image_pages(void)
488 for (i = 0, p = pagedir_save; i < pmdisk_pages; i++, p++) {
489 ClearPageNosave(virt_to_page(p->address));
490 free_page(p->address);
496 * free_pagedir - Free the page directory.
499 static void free_pagedir(void)
502 free_pages((unsigned long)pagedir_save, pagedir_order);
506 static void calc_order(void)
511 order = get_bitmask_order(SUSPEND_PD_PAGES(pmdisk_pages));
512 pmdisk_pages += 1 << order;
514 diff = get_bitmask_order(SUSPEND_PD_PAGES(pmdisk_pages)) - order;
517 pmdisk_pages += 1 << diff;
520 pagedir_order = order;
525 * alloc_pagedir - Allocate the page directory.
527 * First, determine exactly how many contiguous pages we need,
528 * allocate them, then mark each 'unsavable'.
531 static int alloc_pagedir(void)
534 pagedir_save = (suspend_pagedir_t *)__get_free_pages(GFP_ATOMIC | __GFP_COLD,
538 memset(pagedir_save,0,(1 << pagedir_order) * PAGE_SIZE);
539 pm_pagedir_nosave = pagedir_save;
545 * alloc_image_pages - Allocate pages for the snapshot.
549 static int alloc_image_pages(void)
554 for (i = 0, p = pagedir_save; i < pmdisk_pages; i++, p++) {
555 p->address = get_zeroed_page(GFP_ATOMIC | __GFP_COLD);
558 SetPageNosave(virt_to_page(p->address));
564 free_page(p->address);
566 } while (p-- > pagedir_save);
572 * enough_free_mem - Make sure we enough free memory to snapshot.
574 * Returns TRUE or FALSE after checking the number of available
578 static int enough_free_mem(void)
580 if(nr_free_pages() < (pmdisk_pages + PAGES_FOR_IO)) {
581 pr_debug("pmdisk: Not enough free pages: Have %d\n",
590 * enough_swap - Make sure we have enough swap to save the image.
592 * Returns TRUE or FALSE after checking the total amount of swap
595 * FIXME: si_swapinfo(&i) returns all swap devices information.
596 * We should only consider resume_device.
599 static int enough_swap(void)
604 if (i.freeswap < (pmdisk_pages + PAGES_FOR_IO)) {
605 pr_debug("pmdisk: Not enough swap. Need %ld\n",i.freeswap);
613 * pmdisk_suspend - Atomically snapshot the system.
615 * This must be called with interrupts disabled, to prevent the
616 * system changing at all from underneath us.
618 * To do this, we count the number of pages in the system that we
619 * need to save; make sure we have enough memory and swap to clone
620 * the pages and save them in swap, allocate the space to hold them,
621 * and then snapshot them all.
624 int pmdisk_suspend(void)
628 if ((error = read_swapfiles()))
633 pm_pagedir_nosave = NULL;
634 pr_debug("pmdisk: Counting pages to copy.\n" );
637 pr_debug("pmdisk: (pages needed: %d + %d free: %d)\n",
638 pmdisk_pages,PAGES_FOR_IO,nr_free_pages());
640 if (!enough_free_mem())
646 if ((error = alloc_pagedir())) {
647 pr_debug("pmdisk: Allocating pagedir failed.\n");
650 if ((error = alloc_image_pages())) {
651 pr_debug("pmdisk: Allocating image pages failed.\n");
656 nr_copy_pages_check = pmdisk_pages;
657 pagedir_order_check = pagedir_order;
659 /* During allocating of suspend pagedir, new cold pages may appear.
668 * End of critical section. From now on, we can write to memory,
669 * but we should not touch disk. This specially means we must _not_
670 * touch swap space! Except we must write out our image of course.
673 pr_debug("pmdisk: %d pages copied\n", pmdisk_pages );
679 * suspend_save_image - Prepare and write saved image to swap.
681 * IRQs are re-enabled here so we can resume devices and safely write
682 * to the swap devices. We disable them again before we leave.
684 * The second lock_swapdevices() will unlock ignored swap devices since
685 * writing is finished.
686 * It is important _NOT_ to umount filesystems at this point. We want
687 * them synced (in case something goes wrong) but we DO not want to mark
688 * filesystem clean: it is not. (And it does not matter, if we resume
689 * correctly, we'll mark system clean, anyway.)
692 static int suspend_save_image(void)
697 error = write_suspend_image();
706 int pmdisk_resume(void)
708 BUG_ON (nr_copy_pages_check != pmdisk_pages);
709 BUG_ON (pagedir_order_check != pagedir_order);
711 /* Even mappings of "global" things (vmalloc) need to be fixed */
712 __flush_tlb_global();
716 /* pmdisk_arch_suspend() is implemented in arch/?/power/pmdisk.S,
720 save_processor_state();
722 return pmdisk_suspend();
724 GO_TO_SWAPPER_PAGE_TABLES
727 restore_processor_state();
728 return pmdisk_resume();
733 /* More restore stuff */
735 #define does_collide(addr) does_collide_order(pm_pagedir_nosave, addr, 0)
738 * Returns true if given address/order collides with any orig_address
740 static int __init does_collide_order(suspend_pagedir_t *pagedir,
741 unsigned long addr, int order)
744 unsigned long addre = addr + (PAGE_SIZE<<order);
746 for(i=0; i < pmdisk_pages; i++)
747 if((pagedir+i)->orig_address >= addr &&
748 (pagedir+i)->orig_address < addre)
755 * We check here that pagedir & pages it points to won't collide with pages
756 * where we're going to restore from the loaded pages later
758 static int __init check_pagedir(void)
762 for(i=0; i < pmdisk_pages; i++) {
766 addr = get_zeroed_page(GFP_ATOMIC);
769 } while (does_collide(addr));
771 (pm_pagedir_nosave+i)->address = addr;
776 static int __init relocate_pagedir(void)
779 * We have to avoid recursion (not to overflow kernel stack),
780 * and that's why code looks pretty cryptic
782 suspend_pagedir_t *old_pagedir = pm_pagedir_nosave;
783 void **eaten_memory = NULL;
784 void **c = eaten_memory, *m, *f;
787 pr_debug("pmdisk: Relocating pagedir\n");
789 if(!does_collide_order(old_pagedir, (unsigned long)old_pagedir, pagedir_order)) {
790 pr_debug("pmdisk: Relocation not necessary\n");
795 while ((m = (void *) __get_free_pages(GFP_ATOMIC, pagedir_order)) != NULL) {
796 if (!does_collide_order(old_pagedir, (unsigned long)m,
799 memcpy(m, old_pagedir,
800 PAGE_SIZE << pagedir_order);
815 free_pages((unsigned long)f, pagedir_order);
822 static struct block_device * resume_bdev;
826 * Using bio to read from swap.
827 * This code requires a bit more work than just using buffer heads
828 * but, it is the recommended way for 2.5/2.6.
829 * The following are to signal the beginning and end of I/O. Bios
830 * finish asynchronously, while we want them to happen synchronously.
831 * A simple atomic_t, and a wait loop take care of this problem.
834 static atomic_t io_done = ATOMIC_INIT(0);
836 static void start_io(void)
838 atomic_set(&io_done,1);
841 static int end_io(struct bio * bio, unsigned int num, int err)
843 atomic_set(&io_done,0);
847 static void wait_io(void)
849 while(atomic_read(&io_done))
855 * submit - submit BIO request.
856 * @rw: READ or WRITE.
857 * @off physical offset of page.
858 * @page: page we're reading or writing.
860 * Straight from the textbook - allocate and initialize the bio.
861 * If we're writing, make sure the page is marked as dirty.
862 * Then submit it and wait.
865 static int submit(int rw, pgoff_t page_off, void * page)
870 bio = bio_alloc(GFP_ATOMIC,1);
873 bio->bi_sector = page_off * (PAGE_SIZE >> 9);
875 bio->bi_bdev = resume_bdev;
876 bio->bi_end_io = end_io;
878 if (bio_add_page(bio, virt_to_page(page), PAGE_SIZE, 0) < PAGE_SIZE) {
879 printk("pmdisk: ERROR: adding page to bio at %ld\n",page_off);
885 bio_set_pages_dirty(bio);
887 submit_bio(rw | (1 << BIO_RW_SYNC), bio);
895 read_page(pgoff_t page_off, void * page)
897 return submit(READ,page_off,page);
901 write_page(pgoff_t page_off, void * page)
903 return submit(WRITE,page_off,page);
907 extern dev_t __init name_to_dev_t(const char *line);
910 static int __init check_sig(void)
914 memset(&pmdisk_header,0,sizeof(pmdisk_header));
915 if ((error = read_page(0,&pmdisk_header)))
917 if (!memcmp(PMDISK_SIG,pmdisk_header.sig,10)) {
918 memcpy(pmdisk_header.sig,pmdisk_header.orig_sig,10);
921 * Reset swap signature now.
923 error = write_page(0,&pmdisk_header);
925 pr_debug(KERN_ERR "pmdisk: Invalid partition type.\n");
929 pr_debug("pmdisk: Signature found, resuming\n");
935 * Sanity check if this image makes sense with this kernel/swap context
936 * I really don't think that it's foolproof but more than nothing..
939 static const char * __init sanity_check(void)
942 if(pmdisk_info.version_code != LINUX_VERSION_CODE)
943 return "kernel version";
944 if(pmdisk_info.num_physpages != num_physpages)
945 return "memory size";
946 if (strcmp(pmdisk_info.uts.sysname,system_utsname.sysname))
947 return "system type";
948 if (strcmp(pmdisk_info.uts.release,system_utsname.release))
949 return "kernel release";
950 if (strcmp(pmdisk_info.uts.version,system_utsname.version))
952 if (strcmp(pmdisk_info.uts.machine,system_utsname.machine))
954 if(pmdisk_info.cpus != num_online_cpus())
955 return "number of cpus";
960 static int __init check_header(void)
962 const char * reason = NULL;
967 if ((error = read_page(swp_offset(pmdisk_header.pmdisk_info),
971 /* Is this same machine? */
972 if ((reason = sanity_check())) {
973 printk(KERN_ERR "pmdisk: Resume mismatch: %s\n",reason);
976 pmdisk_pages = pmdisk_info.image_pages;
981 static int __init read_pagedir(void)
984 int i, n = pmdisk_info.pagedir_pages;
987 pagedir_order = get_bitmask_order(n);
989 addr =__get_free_pages(GFP_ATOMIC, pagedir_order);
992 pm_pagedir_nosave = (struct pbe *)addr;
994 pr_debug("pmdisk: Reading pagedir (%d Pages)\n",n);
996 for (i = 0; i < n && !error; i++, addr += PAGE_SIZE) {
997 unsigned long offset = swp_offset(pmdisk_info.pagedir[i]);
999 error = read_page(offset, (void *)addr);
1004 free_pages((unsigned long)pm_pagedir_nosave,pagedir_order);
1010 * read_image_data - Read image pages from swap.
1012 * You do not need to check for overlaps, check_pagedir()
1016 static int __init read_image_data(void)
1022 printk( "Reading image data (%d pages): ", pmdisk_pages );
1023 for(i = 0, p = pm_pagedir_nosave; i < pmdisk_pages && !error; i++, p++) {
1026 error = read_page(swp_offset(p->swap_address),
1027 (void *)p->address);
1029 printk(" %d done.\n",i);
1034 static int __init read_suspend_image(void)
1038 if ((error = check_sig()))
1040 if ((error = check_header()))
1042 if ((error = read_pagedir()))
1044 if ((error = relocate_pagedir()))
1046 if ((error = check_pagedir()))
1048 if ((error = read_image_data()))
1053 free_pages((unsigned long)pm_pagedir_nosave,pagedir_order);
1058 * pmdisk_save - Snapshot memory
1061 int pmdisk_save(void)
1065 #if defined (CONFIG_HIGHMEM) || defined (CONFIG_DISCONTIGMEM)
1066 pr_debug("pmdisk: not supported with high- or discontig-mem.\n");
1069 if ((error = arch_prepare_suspend()))
1071 local_irq_disable();
1072 save_processor_state();
1073 error = pmdisk_arch_suspend(0);
1074 restore_processor_state();
1081 * pmdisk_write - Write saved memory image to swap.
1083 * pmdisk_arch_suspend(0) returns after system is resumed.
1085 * pmdisk_arch_suspend() copies all "used" memory to "free" memory,
1086 * then unsuspends all device drivers, and writes memory to disk
1087 * using normal kernel mechanism.
1090 int pmdisk_write(void)
1092 return suspend_save_image();
1097 * pmdisk_read - Read saved image from swap.
1100 int __init pmdisk_read(void)
1104 if (!strlen(resume_file))
1107 resume_device = name_to_dev_t(resume_file);
1108 pr_debug("pmdisk: Resume From Partition: %s\n", resume_file);
1110 resume_bdev = open_by_devnum(resume_device, FMODE_READ);
1111 if (!IS_ERR(resume_bdev)) {
1112 set_blocksize(resume_bdev, PAGE_SIZE);
1113 error = read_suspend_image();
1114 blkdev_put(resume_bdev);
1116 error = PTR_ERR(resume_bdev);
1119 pr_debug("Reading resume file was successful\n");
1121 pr_debug("pmdisk: Error %d resuming\n", error);
1127 * pmdisk_restore - Replace running kernel with saved image.
1130 int __init pmdisk_restore(void)
1133 local_irq_disable();
1134 save_processor_state();
1135 error = pmdisk_arch_suspend(1);
1136 restore_processor_state();
1143 * pmdisk_free - Free memory allocated to hold snapshot.
1146 int pmdisk_free(void)
1148 pr_debug( "Freeing prev allocated pagedir\n" );
1153 static int __init pmdisk_setup(char *str)
1156 if (!strcmp(str,"off"))
1157 resume_file[0] = '\0';
1159 strncpy(resume_file, str, 255);
1161 resume_file[0] = '\0';
1165 __setup("pmdisk=", pmdisk_setup);