]> git.pld-linux.org Git - packages/geninitrd.git/blob - geninitrd-swsusp.patch
- swsusp as separate geninird module
[packages/geninitrd.git] / geninitrd-swsusp.patch
1 diff --git a/Makefile b/Makefile
2 index 1994b97..a9039b1 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6  # when making release, make sure you do it as RELEASE document describes
7  NAME           := geninitrd
8  VERSION                := $(shell test -d .git && git describe --tags || echo git)
9 -MODS           := ide luks multipath dmraid lvm md blkid udev tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd bcache
10 +MODS           := ide luks multipath dmraid lvm md blkid udev tuxonice suspend swsusp fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd bcache
11  FILES_MODS  := $(MODS:%=mod-%.sh)
12  FILES_ADDON := extract-ikconfig
13  FILES_UDEV  := 01-ignore.rules 59-persistent-storage.rules 61-persistent-storage.rules 11-dm.rules
14 diff --git a/geninitrd b/geninitrd
15 index 7f5495f..ea7d438 100755
16 --- a/geninitrd
17 +++ b/geninitrd
18 @@ -1209,7 +1209,7 @@ if [ ! -f /proc/mounts ]; then
19         warn "/proc filesystem not mounted, may cause wrong results or failure."
20  fi
21  
22 -geninitrd_load_mods ide luks multipath dmraid lvm md blkid udev tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd bcache
23 +geninitrd_load_mods ide luks multipath dmraid lvm md blkid udev swsusp tuxonice suspend fbsplash condecor bootsplash uvesafb nfs sata scsi usbkbd bcache
24  
25  while [ $# -gt 0 ]; do
26         case $1 in
27 @@ -1245,6 +1245,9 @@ while [ $# -gt 0 ]; do
28         --without-fbcondecor)
29                 FB_CON_DECOR=no
30                 ;;
31 +       --without-swsusp)
32 +               USE_SWSUSP=no
33 +               ;;
34         --with-suspend)
35                 USE_SUSPEND=yes
36                 ;;
37 @@ -1508,6 +1511,10 @@ if is_yes "$USE_SUSPEND"; then
38         find_modules_suspend
39  fi
40  
41 +if is_yes "$USE_SWSUSP"; then
42 +       find_modules_swsusp
43 +fi
44 +
45  find_root "$fstab" || exit
46  verbose "Using $rootdev as device for rootfs"
47  
48 @@ -1703,6 +1710,7 @@ initrd_gen_stop_uvesafb
49  # resume after killing local processes
50  initrd_gen_tuxonice
51  initrd_gen_suspend
52 +initrd_gen_swsusp
53  
54  # clean up env
55  add_linuxrc <<-'EOF'
56 diff --git a/mod-swsusp.sh b/mod-swsusp.sh
57 new file mode 100644
58 index 0000000..d6ade58
59 --- /dev/null
60 +++ b/mod-swsusp.sh
61 @@ -0,0 +1,74 @@
62 +#!/bin/sh
63 +# geninitrd mod: swsusp
64 +#
65 +USE_SWSUSP=${USE_SWSUSP:-yes}
66 +
67 +# resume device
68 +swap_dev=""
69 +
70 +# setup geninitrd module
71 +# @access      public
72 +setup_mod_swsusp() {
73 +       if ! is_yes "$USE_SWSUSP"; then
74 +               return
75 +       fi
76 +
77 +       swap_dev="$(awk '/^\/dev\// { print $1 }' /proc/swaps | head -1)"
78 +       if [ -z "$swap_dev" ]; then
79 +           warn "Cannot determine swap device. You may try add specific device to kernel command line"
80 +       else
81 +           verbose "swsusp: will try to resume from swap device $swap_dev"
82 +       fi
83 +}
84 +
85 +# find modules for for swsusp
86 +# @access      public
87 +find_modules_swsusp() {
88 +       swap_dev="$(awk '/^\/dev\// { print $1 }' /proc/swaps | head -1)"
89 +
90 +       # save state
91 +       local vgvolumes=$LVM_VGVOLUMES
92 +       find_modules_for_devpath $swap_dev
93 +
94 +       # check for saved state, differenciate between rootfs VG
95 +       if [ "$LVM_VGVOLUMES" != "$vgvolumes" ]; then
96 +               # add swap device to LVM_SUSPENDVG
97 +               LVM_SUSPENDVG="$LVM_SUSPENDVG $LVM_VGVOLUMES"
98 +               LVM_VGVOLUMES=$vgvolumes
99 +               verbose "swap device is on LVM"
100 +       fi
101 +}
102 +
103 +# generate initrd fragment
104 +# @access      public
105 +initrd_gen_swsusp() {
106 +       if ! is_yes "$USE_SWSUSP"; then
107 +               return
108 +       fi
109 +
110 +       verbose "Setting up swsusp..."
111 +
112 +       mkdir -p $DESTDIR${swap_dev%/*}
113 +       inst $swap_dev $swap_dev
114 +
115 +        mount_dev
116 +       mount_sys
117 +        echo "swap_dev=$swap_dev" | add_linuxrc
118 +
119 +       add_linuxrc <<-'EOF'
120 +       resume=no
121 +       for arg in $CMDLINE; do
122 +               if [ "${arg##resume=/dev/}" != "${arg}" ]; then
123 +                       swap_dev=${arg##resume=}
124 +                       resume=yes
125 +               elif [ "${arg##resume=}" != "${arg}" ]; then
126 +                       resume=${arg##resume=}
127 +               fi
128 +       done
129 +
130 +       if [ "$resume" = "yes" ] && [ -n "$swap_dev" ]; then
131 +               echo "Resuming from $swap_dev..."
132 +               echo "$swap_dev" > /sys/power/resume
133 +       fi
134 +       EOF
135 +}
This page took 0.052941 seconds and 4 git commands to generate.