Messages in this thread Patches in this message | | | Date | Fri, 4 Apr 2003 15:30:37 +0200 | From | Pavel Machek <> | Subject | Re: New Software Suspend Patch for testing. |
| |
Hi!
> Hopefully I'll soon find time to start bombarding Pavel, Patrick and > Linus with incremental patches for merging :>. In the meantime, please > give it a go.
Okay, lets take a look.
diff -ruN linux-2.5.66-original/arch/i386/kernel/cpu/mtrr/main.c linux-2.5.66-04/arch/i386/kernel/cpu/mtrr/main.c --- linux-2.5.66-original/arch/i386/kernel/cpu/mtrr/main.c 2003-01-15 17:00:38.000000000 +1300 +++ linux-2.5.66-04/arch/i386/kernel/cpu/mtrr/main.c 2003-03-26 09:00:29.000000000 +1200 @@ -35,6 +35,7 @@ #include <linux/init.h> #include <linux/pci.h> #include <linux/smp.h> +#include <linux/suspend.h> #include <asm/mtrr.h> @@ -644,6 +645,65 @@ "write-protect", /* 5 */ "write-back", /* 6 */ }; - + +#ifdef SOFTWARE_SUSPEND_MTRR +struct mtrr_suspend_state +{ + mtrr_type ltype; + unsigned long lbase; + unsigned int lsize; +}; ...
Please convert this to driver model and submit to mtrr maintainer.
diff -ruN linux-2.5.66-original/drivers/base/power.c linux-2.5.66-04/drivers/base/power.c --- linux-2.5.66-original/drivers/base/power.c 2003-01-15 17:01:06.000000000 +1300 +++ linux-2.5.66-04/drivers/base/power.c 2003-04-04 20:51:40.000000000 +1200 @@ -35,8 +35,6 @@ struct list_head * node; int error = 0; - printk(KERN_EMERG "Suspending devices\n"); - down_write(&devices_subsys.rwsem); list_for_each(node,&devices_subsys.kset.list) { struct device * dev = to_dev(node); @@ -73,7 +71,7 @@ } up_write(&devices_subsys.rwsem); - printk(KERN_EMERG "Devices Resumed\n"); + printk(KERN_INFO "Devices Resumed\n"); } /** @@ -83,7 +81,7 @@ { struct list_head * entry; - printk(KERN_EMERG "Shutting down devices\n"); + printk(KERN_INFO "Shutting down devices\n"); down_write(&devices_subsys.rwsem); list_for_each(entry,&devices_subsys.kset.list) { I guess that submitting this as trivial is okay.
diff -ruN linux-2.5.66-original/drivers/char/vt.c linux-2.5.66-04/drivers/char/vt.c --- linux-2.5.66-original/drivers/char/vt.c 2003-03-26 08:56:47.000000000 +1200 +++ linux-2.5.66-04/drivers/char/vt.c 2003-03-26 09:00:29.000000000 +1200 @@ -149,13 +149,13 @@ static void vc_init(unsigned int console, unsigned int rows, unsigned int cols, int do_clear); static void blank_screen(unsigned long dummy); -static void gotoxy(int currcons, int new_x, int new_y); +void gotoxy(int currcons, int new_x, int new_y); static void save_cur(int currcons); -static void reset_terminal(int currcons, int do_clear); +void reset_terminal(int currcons, int do_clear); static void con_flush_chars(struct tty_struct *tty); static void set_vesa_blanking(unsigned long arg); static void set_cursor(int currcons); -static void hide_cursor(int currcons); +void hide_cursor(int currcons); static void unblank_screen_t(unsigned long dummy); static void console_callback(void *ignored); static void __init con_init_devfs (void); This is ugly as night. Is not there any public function (sys_write?) you could use instead?
diff -ruN linux-2.5.66-original/drivers/ide/ide-disk.c linux-2.5.66-04/drivers/ide/ide-disk.c --- linux-2.5.66-original/drivers/ide/ide-disk.c 2003-03-26 08:56:49.000000000 +1200 +++ linux-2.5.66-04/drivers/ide/ide-disk.c 2003-04-04 20:22:09.000000000 +1200 @@ -1515,8 +1515,6 @@ { ide_drive_t *drive = dev->driver_data; - printk("Suspending device %p\n", dev->driver_data); - /* I hope that every freeze operation from the upper levels have * already been done... */ @@ -1525,7 +1523,6 @@ return 0; /* set the drive to standby */ - printk(KERN_INFO "suspending: %s ", drive->name); do_idedisk_standby(drive); drive->blocked = 1; @@ -1539,8 +1536,8 @@ if (level != RESUME_RESTORE_STATE) return 0; - BUG_ON(!drive->blocked); - drive->blocked = 0; + if (drive->blocked) + drive->blocked--; return 0; } Please submitt this to alan, as soon as possible.
@@ -1804,7 +1801,8 @@ if ((!drive->head || drive->head > 16) && !drive->select.b.lba) { printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n", drive->name, drive->head); - if ((drive->id->cfs_enable_2 & 0x3000) && drive->wcache) + if (((drive->id->cfs_enable_2 & 0x3000) && drive->wcache) || + ((drive->id->command_set_1 & 0x20) && drive->id->cfs_enable_1 & 0x20)) if (do_idedisk_flushcache(drive)) printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n", drive->name); Is this swsusp related?
diff -ruN linux-2.5.66-original/include/linux/pagemap.h linux-2.5.66-04/include/linux/pagemap.h --- linux-2.5.66-original/include/linux/pagemap.h 2003-03-26 08:57:06.000000000 +1200 +++ linux-2.5.66-04/include/linux/pagemap.h 2003-03-26 09:00:29.000000000 +1200 @@ -8,6 +8,9 @@ #include <linux/fs.h> #include <linux/list.h> #include <linux/highmem.h> +#ifdef CONFIG_SOFTWARE_SUSPEND +#include <linux/suspend.h> +#endif #include <asm/uaccess.h> /* Do not use #ifdefs around includes.
@@ -123,6 +126,8 @@ page->mapping = mapping; page->index = index;
+ if (suspend_task) + last_suspend_cache_page = page; mapping->nrpages++; pagecache_acct(1); } diff -ruN linux-2.5.66-original/include/linux/suspend-debug.h linux-2.5.66-04/include/linux/suspend-debug.h --- linux-2.5.66-original/include/linux/suspend-debug.h 1970-01-01 12:00:00.000000000 +1200 +++ linux-2.5.66-04/include/linux/suspend-debug.h 2003-04-04 19:37:44.000000000 +1200 @@ -0,0 +1,61 @@ + +#ifndef _LINUX_SWSUSP_DEBUG_H +#define _LINUX_SWSUSP_DEBUG_H + +#include <linux/suspend.h> + +#define name_suspend "Suspend Machine: " +#define name_resume "Resume Machine: " +#define swsusp_version "beta 19-20" +#define name_swsusp "Swsusp " swsusp_version ": " +#define console_suspend "S U S P E N D T O D I S K" +#define console_resume "R E S U M E F R O M D I S K" This is ugly. Are you trying to make it hard to read on purpose?
diff -ruN linux-2.5.66-original/include/linux/sysctl.h linux-2.5.66-04/include/linux/sysctl.h --- linux-2.5.66-original/include/linux/sysctl.h 2003-03-01 15:10:38.000000000 +1300 +++ linux-2.5.66-04/include/linux/sysctl.h 2003-03-26 09:00:29.000000000 +1200 @@ -129,6 +129,7 @@ KERN_CADPID=54, /* int: PID of the process to notify on CAD */ KERN_PIDMAX=55, /* int: PID # limit */ KERN_CORE_PATTERN=56, /* string: pattern for core-file names */ + KERN_SWSUSP=57, /* struct: interface to configure & activate software suspension */ }; Is sysctl being used besides debugging?
unsigned char software_suspend_enabled = 0; +unsigned int suspend_task = 0; +/* + * Poll the swsusp state every second + */ +#define SWSUSP_CHECK_TIMEOUT (HZ) What is this?
/* * XXX: We try to keep some more pages free so that I/O operations succeed * without paging. Might this be more? */ -#define PAGES_FOR_IO 512 +#define PAGES_FOR_IO 512 + +#ifdef DEBUG_DEFAULT +int currentstage = 0; +int swsusp_state[5] = {0, /* when set to 1 swsusp_mainloop activates software_suspend (2.4 only) + bit 0: off = normal state, on = suspend required + bit 1: aborting suspend + */ Please kill 2.4 stuff from 2.5 patch.
- if (mode == MARK_SWAP_RESUME) { - if (!memcmp("S1",cur->swh.magic.magic,2)) - memcpy(cur->swh.magic.magic,"SWAP-SPACE",10); - else if (!memcmp("S2",cur->swh.magic.magic,2)) - memcpy(cur->swh.magic.magic,"SWAPSPACE2",10); - else printk("%sUnable to find suspended-data signature (%.10s - misspelled?\n", - name_resume, cur->swh.magic.magic); - } else { - if ((!memcmp("SWAP-SPACE",cur->swh.magic.magic,10))) - memcpy(cur->swh.magic.magic,"S1SUSP....",10); - else if ((!memcmp("SWAPSPACE2",cur->swh.magic.magic,10))) - memcpy(cur->swh.magic.magic,"S2SUSP....",10); - else panic("\nSwapspace is not swapspace (%.10s)\n", cur->swh.magic.magic); - cur->link.next = prev; /* prev is the first/last swap page of the resume area */ - /* link.next lies *no more* in last 4/8 bytes of magic */ + switch(mode) { + case MARK_SWAP_RESUME: + if (!memcmp("1R",cur.pointer->swh.magic.magic,2)) + memcpy(cur.pointer->swh.magic.magic,"SWAP-SPACE",10); + else if (!memcmp("2R",cur.pointer->swh.magic.magic,2)) + memcpy(cur.pointer->swh.magic.magic,"SWAPSPACE2",10); + else printk(name_resume "Unable to find suspended-data signature (%.10s - misspelled?\n", + cur.pointer->swh.magic.magic); + break; I guess this is nicer than previous code, good.
Snip. Sorry, have to go. Pavel
-- When do you have heart between your knees? - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |