[projects/geninitrd] - swsusp support from mis at pld-linux

arekm arekm at pld-linux.org
Sat Dec 26 01:06:40 CET 2020


commit 152a5bf18b37b825a9b6677153aa5af54df94d7b
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Sat Dec 26 01:03:50 2020 +0100

    - swsusp support from mis at pld-linux

 Makefile      |  2 +-
 geninitrd     | 10 +++++++-
 mod-swsusp.sh | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 84 insertions(+), 2 deletions(-)
---
diff --git a/Makefile b/Makefile
index 1994b97..a9039b1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 # when making release, make sure you do it as RELEASE document describes
 NAME		:= geninitrd
 VERSION		:= $(shell test -d .git && git describe --tags || echo git)
-MODS		:= ide luks multipath dmraid lvm md blkid udev tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd bcache
+MODS		:= ide luks multipath dmraid lvm md blkid udev tuxonice suspend swsusp fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd bcache
 FILES_MODS  := $(MODS:%=mod-%.sh)
 FILES_ADDON := extract-ikconfig
 FILES_UDEV  := 01-ignore.rules 59-persistent-storage.rules 61-persistent-storage.rules 11-dm.rules
diff --git a/geninitrd b/geninitrd
index 7f5495f..ea7d438 100755
--- a/geninitrd
+++ b/geninitrd
@@ -1209,7 +1209,7 @@ if [ ! -f /proc/mounts ]; then
 	warn "/proc filesystem not mounted, may cause wrong results or failure."
 fi
 
-geninitrd_load_mods ide luks multipath dmraid lvm md blkid udev tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd bcache
+geninitrd_load_mods ide luks multipath dmraid lvm md blkid udev swsusp tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd bcache
 
 while [ $# -gt 0 ]; do
 	case $1 in
@@ -1245,6 +1245,9 @@ while [ $# -gt 0 ]; do
 	--without-fbcondecor)
 		FB_CON_DECOR=no
 		;;
+	--without-swsusp)
+		USE_SWSUSP=no
+		;;
 	--with-suspend)
 		USE_SUSPEND=yes
 		;;
@@ -1508,6 +1511,10 @@ if is_yes "$USE_SUSPEND"; then
 	find_modules_suspend
 fi
 
+if is_yes "$USE_SWSUSP"; then
+	find_modules_swsusp
+fi
+
 find_root "$fstab" || exit
 verbose "Using $rootdev as device for rootfs"
 
@@ -1703,6 +1710,7 @@ initrd_gen_stop_uvesafb
 # resume after killing local processes
 initrd_gen_tuxonice
 initrd_gen_suspend
+initrd_gen_swsusp
 
 # clean up env
 add_linuxrc <<-'EOF'
diff --git a/mod-swsusp.sh b/mod-swsusp.sh
new file mode 100644
index 0000000..d6ade58
--- /dev/null
+++ b/mod-swsusp.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+# geninitrd mod: swsusp
+#
+USE_SWSUSP=${USE_SWSUSP:-yes}
+
+# resume device
+swap_dev=""
+
+# setup geninitrd module
+# @access	public
+setup_mod_swsusp() {
+    	if ! is_yes "$USE_SWSUSP"; then
+		return
+	fi
+
+	swap_dev="$(awk '/^\/dev\// { print $1 }' /proc/swaps | head -1)"
+	if [ -z "$swap_dev" ]; then
+	    warn "Cannot determine swap device. You may try add specific device to kernel command line"
+	else
+	    verbose "swsusp: will try to resume from swap device $swap_dev"
+	fi
+}
+
+# find modules for for swsusp
+# @access	public
+find_modules_swsusp() {
+    	swap_dev="$(awk '/^\/dev\// { print $1 }' /proc/swaps | head -1)"
+
+	# save state
+	local vgvolumes=$LVM_VGVOLUMES
+	find_modules_for_devpath $swap_dev
+
+	# check for saved state, differenciate between rootfs VG
+	if [ "$LVM_VGVOLUMES" != "$vgvolumes" ]; then
+		# add swap device to LVM_SUSPENDVG
+		LVM_SUSPENDVG="$LVM_SUSPENDVG $LVM_VGVOLUMES"
+		LVM_VGVOLUMES=$vgvolumes
+		verbose "swap device is on LVM"
+	fi
+}
+
+# generate initrd fragment
+# @access	public
+initrd_gen_swsusp() {
+	if ! is_yes "$USE_SWSUSP"; then
+		return
+	fi
+
+	verbose "Setting up swsusp..."
+
+	mkdir -p $DESTDIR${swap_dev%/*}
+	inst $swap_dev $swap_dev
+
+        mount_dev
+	mount_sys
+        echo "swap_dev=$swap_dev" | add_linuxrc
+
+	add_linuxrc <<-'EOF'
+	resume=no
+	for arg in $CMDLINE; do
+		if [ "${arg##resume=/dev/}" != "${arg}" ]; then
+			swap_dev=${arg##resume=}
+			resume=yes
+		elif [ "${arg##resume=}" != "${arg}" ]; then
+			resume=${arg##resume=}
+		fi
+	done
+
+	if [ "$resume" = "yes" ] && [ -n "$swap_dev" ]; then
+	        echo "Resuming from $swap_dev..."
+		echo "$swap_dev" > /sys/power/resume
+	fi
+	EOF
+}
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/projects/geninitrd.git/commitdiff/55248df65f545d53bb1cfb56edcf5a699a45f52f



More information about the pld-cvs-commit mailing list