lkml.org 
[lkml]   [2004]   [Mar]   [15]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateMon, 15 Mar 2004 21:57:52 +0100
FromPavel Machek <>
SubjectRe: Remove pmdisk from kernel
Hi!
> Pavel Machek <pavel@ucw.cz> wrote:
> >
> > This removes pmdisk from kernel.
> 
> It would be unfortunate if Pat had more development planned or even
> underway.  Have we checked?

Last time I attempted pmdisk removal, he did not react. Lets try one
more time.

> > PS: Alternatively, I'm wiling to kill swsusp, rename pmdisk to "swap
> > suspend", and submit patches to fix it. Its going to be slightly more
> > complicated, through... 
> 
> People have suggested that I incorporate swsusp2.  Where does this fit into
> things?

I believe that you don't want swsusp2 in 2.6. It has hooks all over
the place:

								Pavel

 Documentation/kernel-parameters.txt      |    9 
 Documentation/power/swsusp2.txt          |  495 +++++++++++++++++++++++++++++++
 arch/arm/kernel/ecard.c                  |    6 
 arch/i386/kernel/apm.c                   |    8 
 arch/i386/kernel/process.c               |   25 +
 arch/i386/kernel/signal.c                |    5 
 arch/i386/kernel/smp.c                   |    2 
 arch/i386/mm/pageattr.c                  |    2 
 arch/i386/power/Makefile                 |    1 
 arch/i386/power/cpu.c                    |    8 
 arch/i386/power/swsusp2-asm.S            |  259 ++++++++++++++++
 arch/i386/power/swsusp2.c                |  130 ++++++++
 arch/ppc/Kconfig                         |    2 
 arch/ppc/Makefile                        |    1 
 arch/ppc/kernel/signal.c                 |    6 
 arch/ppc/kernel/vmlinux.lds.S            |    6 
 arch/ppc/power/Makefile                  |    2 
 arch/ppc/power/cpu.c                     |   72 ++++
 arch/ppc/power/cpu_reg.S                 |  325 ++++++++++++++++++++
 arch/ppc/power/swsusp2-asm.S             |   51 +++
 arch/ppc/power/swsusp2-copyback.S        |   73 ++++
 arch/ppc/power/swsusp2.c                 |  170 ++++++++++
 drivers/acpi/sleep/proc.c                |    7 
 drivers/block/loop.c                     |    3 
 drivers/char/hvc_console.c               |    6 
 drivers/char/keyboard.c                  |   84 +++++
 drivers/char/n_tty.c                     |    4 
 drivers/char/tty_io.c                    |   14 
 drivers/char/vt.c                        |   20 -
 drivers/ide/ide-disk.c                   |    3 
 drivers/ieee1394/nodemgr.c               |   12 
 drivers/input/serio/serio.c              |   11 
 drivers/md/md.c                          |    3 
 drivers/media/video/msp3400.c            |   14 
 drivers/media/video/tvaudio.c            |    8 
 drivers/message/i2o/i2o_block.c          |   11 
 drivers/message/i2o/i2o_core.c           |   23 +
 drivers/mtd/mtdblock.c                   |    4 
 drivers/net/8139too.c                    |    2 
 drivers/net/irda/sir_kthread.c           |   10 
 drivers/net/wireless/airo.c              |    2 
 drivers/parport/ieee1284.c               |    4 
 drivers/pcmcia/cs.c                      |   11 
 drivers/scsi/scsi_error.c                |   16 -
 drivers/serial/8250.c                    |  100 ++++++
 drivers/usb/core/hub.c                   |   10 
 drivers/usb/storage/usb.c                |   14 
 fs/buffer.c                              |   89 ++++-
 fs/dcache.c                              |    5 
 fs/devfs/base.c                          |   14 
 fs/exec.c                                |   18 +
 fs/fcntl.c                               |   19 +
 fs/jbd/journal.c                         |   20 -
 fs/jffs/intrep.c                         |   15 
 fs/jffs2/background.c                    |   18 -
 fs/jfs/jfs_logmgr.c                      |   24 -
 fs/jfs/jfs_txnmgr.c                      |   61 ++-
 fs/lockd/clntlock.c                      |    8 
 fs/lockd/clntproc.c                      |    6 
 fs/lockd/svc.c                           |   12 
 fs/locks.c                               |    8 
 fs/namei.c                               |   54 +++
 fs/namespace.c                           |   16 -
 fs/nfsd/nfssvc.c                         |    8 
 fs/open.c                                |   84 +++++
 fs/pipe.c                                |    4 
 fs/proc/generic.c                        |    8 
 fs/proc/kmsg.c                           |    9 
 fs/read_write.c                          |   66 +++-
 fs/stat.c                                |   41 ++
 fs/super.c                               |    5 
 fs/sysfs/file.c                          |    4 
 fs/xfs/linux/xfs_buf.c                   |   11 
 fs/xfs/linux/xfs_super.c                 |   11 
 include/asm-i386/cpufeature.h            |    1 
 include/asm-i386/mtrr.h                  |    4 
 include/asm-i386/tlbflush.h              |    5 
 include/asm-ppc/suspend.h                |   14 
 include/linux/pagemap.h                  |    5 
 include/linux/sched.h                    |    8 
 include/linux/selection.h                |    4 
 include/linux/suspend-version-specific.h |   74 ++++
 include/linux/suspend.h                  |   75 ----
 include/linux/suspend1.h                 |   76 ++++
 kernel/exit.c                            |    7 
 kernel/fork.c                            |    7 
 kernel/module.c                          |   27 +
 kernel/panic.c                           |    5 
 kernel/power/Kconfig                     |  102 ++++++
 kernel/power/Makefile                    |   12 
 kernel/power/console.c                   |   51 ---
 kernel/power/disk.c                      |    3 
 kernel/power/main.c                      |    3 
 kernel/power/pmdisk.c                    |    2 
 kernel/power/process.c                   |  128 --------
 kernel/power/swsusp.c                    |    2 
 kernel/sched.c                           |   10 
 kernel/softirq.c                         |    3 
 kernel/sys.c                             |    6 
 kernel/workqueue.c                       |    3 
 mm/page_alloc.c                          |   30 +
 mm/pdflush.c                             |    8 
 mm/swapfile.c                            |    5 
 mm/vmscan.c                              |  443 ++++++++++++++++-----------
 net/bluetooth/bnep/core.c                |   11 
 net/bluetooth/rfcomm/core.c              |   11 
 net/socket.c                             |   21 +
 net/sunrpc/sched.c                       |   12 
 net/sunrpc/svcsock.c                     |    8 
 109 files changed, 3254 insertions(+), 624 deletions(-)
This is one small example what swsusp2 needs:

diff -ruN linux-2.6.2/fs/buffer.c software-suspend-linux-2.6.2/fs/buffer.c
--- linux-2.6.2/fs/buffer.c	2004-02-06 17:27:46.000000000 +1300
+++ software-suspend-linux-2.6.2/fs/buffer.c	2004-02-06 17:41:09.000000000 +1300
@@ -37,6 +37,7 @@
 #include <linux/bio.h>
 #include <linux/notifier.h>
 #include <linux/cpu.h>
+#include <linux/init.h>
 #include <asm/bitops.h>
 
 static void invalidate_bh_lrus(void);
@@ -229,16 +230,24 @@
  */
 int fsync_super(struct super_block *sb)
 {
-	sync_inodes_sb(sb, 0);
-	DQUOT_SYNC(sb);
-	lock_super(sb);
-	if (sb->s_dirt && sb->s_op->write_super)
-		sb->s_op->write_super(sb);
-	unlock_super(sb);
-	if (sb->s_op->sync_fs)
-		sb->s_op->sync_fs(sb, 1);
-	sync_blockdev(sb->s_bdev);
-	sync_inodes_sb(sb, 1);
+#ifdef CONFIG_SOFTWARE_SUSPEND2
+	/* A safety net. During suspend, we might overwrite
+	 * memory containing filesystem info. We don't then
+	 * want to sync it to disk. */
+	if (likely(!(swsusp_state & FREEZE_UNREFRIGERATED)))
+#endif
+	{
+		sync_inodes_sb(sb, 0);
+		DQUOT_SYNC(sb);
+		lock_super(sb);
+		if (sb->s_dirt && sb->s_op->write_super)
+			sb->s_op->write_super(sb);
+		unlock_super(sb);
+		if (sb->s_op->sync_fs)
+			sb->s_op->sync_fs(sb, 1);
+		sync_blockdev(sb->s_bdev);
+		sync_inodes_sb(sb, 1);
+	}
 
 	return sync_blockdev(sb->s_bdev);
 }
@@ -251,12 +260,20 @@
 int fsync_bdev(struct block_device *bdev)
 {
 	struct super_block *sb = get_super(bdev);
+	int result = 0;
+ 	DECLARE_SWSUSP_LOCAL_VAR;
+	
+	SWSUSP_ACTIVITY_START(PF_SYNCTHREAD);
+	current->flags |= PF_SYNCTHREAD;
 	if (sb) {
 		int res = fsync_super(sb);
 		drop_super(sb);
 		return res;
 	}
-	return sync_blockdev(bdev);
+	result = sync_blockdev(bdev);
+	current->flags &= ~PF_SYNCTHREAD;
+ 	SWSUSP_ACTIVITY_END;
+	return result;
 }
 
 /*
@@ -265,20 +282,34 @@
  */
 static void do_sync(unsigned long wait)
 {
-	wakeup_bdflush(0);
-	sync_inodes(0);		/* All mappings, inodes and their blockdevs */
-	DQUOT_SYNC(NULL);
-	sync_supers();		/* Write the superblocks */
-	sync_filesystems(0);	/* Start syncing the filesystems */
-	sync_filesystems(wait);	/* Waitingly sync the filesystems */
-	sync_inodes(wait);	/* Mappings, inodes and blockdevs, again. */
-	if (!wait)
-		printk("Emergency Sync complete\n");
+#ifdef CONFIG_SOFTWARE_SUSPEND2
+	/* A safety net. During suspend, we might overwrite
+	 * memory containing filesystem info. We don't then
+	 * want to sync it to disk. */
+	if (likely(!(swsusp_state & FREEZE_UNREFRIGERATED)))
+#endif
+	{
+		wakeup_bdflush(0);
+		sync_inodes(0);		/* All mappings, inodes and their blockdevs */
+		DQUOT_SYNC(NULL);
+		sync_supers();		/* Write the superblocks */
+		sync_filesystems(0);	/* Start syncing the filesystems */
+		sync_filesystems(wait);	/* Waitingly sync the filesystems */
+		sync_inodes(wait);	/* Mappings, inodes and blockdevs, again. */
+		if (!wait)
+			printk("Emergency Sync complete\n");
+	}
 }
 
 asmlinkage long sys_sync(void)
 {
+ 	DECLARE_SWSUSP_LOCAL_VAR;
+
+	SWSUSP_ACTIVITY_START(PF_SYNCTHREAD);
+	current->flags |= PF_SYNCTHREAD;
 	do_sync(1);
+	current->flags &= ~PF_SYNCTHREAD;
+ 	SWSUSP_ACTIVITY_END;
 	return 0;
 }
 
@@ -319,6 +350,10 @@
 	struct file * file;
 	struct address_space *mapping;
 	int ret, err;
+ 	DECLARE_SWSUSP_LOCAL_VAR;
+
+	SWSUSP_ACTIVITY_START(PF_SYNCTHREAD);
+	current->flags |= PF_SYNCTHREAD;
 
 	ret = -EBADF;
 	file = fget(fd);
@@ -349,6 +384,8 @@
 out_putf:
 	fput(file);
 out:
+	current->flags &= ~PF_SYNCTHREAD;
+	SWSUSP_ACTIVITY_END;
 	return ret;
 }
 
@@ -357,6 +394,10 @@
 	struct file * file;
 	struct address_space *mapping;
 	int ret, err;
+ 	DECLARE_SWSUSP_LOCAL_VAR;
+
+	SWSUSP_ACTIVITY_START(PF_SYNCTHREAD);
+	current->flags |= PF_SYNCTHREAD;
 
 	ret = -EBADF;
 	file = fget(fd);
@@ -384,6 +425,8 @@
 out_putf:
 	fput(file);
 out:
+	current->flags &= ~PF_SYNCTHREAD;
+	SWSUSP_ACTIVITY_END;
 	return ret;
 }
 
@@ -1071,6 +1114,10 @@
 	 * async buffer heads in use.
 	 */
 	free_more_memory();
+#ifdef CONFIG_SOFTWARE_SUSPEND2
+	if (suspend_task == current->pid)
+		cleanup_finished_swsusp_io();
+#endif
 	goto try_again;
 }
 
@@ -2800,7 +2847,7 @@
  *
  * try_to_free_buffers() is non-blocking.
  */
-static inline int buffer_busy(struct buffer_head *bh)
+inline int buffer_busy(struct buffer_head *bh)
 {
 	return atomic_read(&bh->b_count) |
 		(bh->b_state & ((1 << BH_Dirty) | (1 << BH_Lock)));

-- 
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]
-
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/

\
 
 \ /
  Last update: 2005-03-22 13:01    [from the cache]
©2003-2008