55# Author: Alexey Kodanev <alexey.kodanev@oracle.com>
66# Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
77
8- MODULE=0
98dev_makeswap=-1
109dev_mounted=-1
11-
10+ dev_start=0
11+ dev_end=-1
12+ module_load=-1
13+ sys_control=-1
1214# Kselftest framework requirement - SKIP code is 4.
1315ksft_skip=4
1416kernel_version=` uname -r | cut -d' .' -f1,2`
@@ -46,57 +48,72 @@ zram_cleanup()
4648{
4749 echo " zram cleanup"
4850 local i=
49- for i in $( seq 0 $dev_makeswap ) ; do
51+ for i in $( seq $dev_start $dev_makeswap ) ; do
5052 swapoff /dev/zram$i
5153 done
5254
53- for i in $( seq 0 $dev_mounted ) ; do
55+ for i in $( seq $dev_start $dev_mounted ) ; do
5456 umount /dev/zram$i
5557 done
5658
57- for i in $( seq 0 $(( $dev_num - 1 )) ) ; do
59+ for i in $( seq $dev_start $dev_end ) ; do
5860 echo 1 > /sys/block/zram${i} /reset
5961 rm -rf zram$i
6062 done
6163
62- }
64+ if [ $sys_control -eq 1 ]; then
65+ for i in $( seq $dev_start $dev_end ) ; do
66+ echo $i > /sys/class/zram-control/hot_remove
67+ done
68+ fi
6369
64- zram_unload ()
65- {
66- if [ $MODULE -ne 0 ] ; then
67- echo " zram rmmod zram"
70+ if [ $module_load -eq 1 ]; then
6871 rmmod zram > /dev/null 2>&1
6972 fi
7073}
7174
7275zram_load ()
7376{
74- # check zram module exists
75- MODULE_PATH=/lib/modules/` uname -r` /kernel/drivers/block/zram/zram.ko
76- if [ -f $MODULE_PATH ]; then
77- MODULE=1
78- echo " create '$dev_num ' zram device(s)"
79- modprobe zram num_devices=$dev_num
80- if [ $? -ne 0 ]; then
81- echo " failed to insert zram module"
82- exit 1
83- fi
84-
85- dev_num_created=$( ls /dev/zram* | wc -w)
77+ echo " create '$dev_num ' zram device(s)"
78+
79+ # zram module loaded, new kernel
80+ if [ -d " /sys/class/zram-control" ]; then
81+ echo " zram modules already loaded, kernel supports" \
82+ " zram-control interface"
83+ dev_start=$( ls /dev/zram* | wc -w)
84+ dev_end=$(( $dev_start + $dev_num - 1 ))
85+ sys_control=1
86+
87+ for i in $( seq $dev_start $dev_end ) ; do
88+ cat /sys/class/zram-control/hot_add > /dev/null
89+ done
90+
91+ echo " all zram devices (/dev/zram$dev_start ~$dev_end " \
92+ " successfully created"
93+ return 0
94+ fi
8695
87- if [ " $dev_num_created " -ne " $dev_num " ]; then
88- echo " unexpected num of devices: $dev_num_created "
89- ERR_CODE=-1
96+ # detect old kernel or built-in
97+ modprobe zram num_devices=$dev_num
98+ if [ ! -d " /sys/class/zram-control" ]; then
99+ if grep -q ' ^zram' /proc/modules; then
100+ rmmod zram > /dev/null 2>&1
101+ if [ $? -ne 0 ]; then
102+ echo " zram module is being used on old kernel" \
103+ " without zram-control interface"
104+ exit $ksft_skip
105+ fi
90106 else
91- echo " zram load module successful"
107+ echo " test needs CONFIG_ZRAM=m on old kernel without" \
108+ " zram-control interface"
109+ exit $ksft_skip
92110 fi
93- elif [ -b /dev/zram0 ]; then
94- echo " /dev/zram0 device file found: OK"
95- else
96- echo " ERROR: No zram.ko module or no /dev/zram0 device found"
97- echo " $TCID : CONFIG_ZRAM is not set"
98- exit 1
111+ modprobe zram num_devices=$dev_num
99112 fi
113+
114+ module_load=1
115+ dev_end=$(( $dev_num - 1 ))
116+ echo " all zram devices (/dev/zram0~$dev_end ) successfully created"
100117}
101118
102119zram_max_streams ()
@@ -110,7 +127,7 @@ zram_max_streams()
110127 return 0
111128 fi
112129
113- local i=0
130+ local i=$dev_start
114131 for max_s in $zram_max_streams ; do
115132 local sys_path=" /sys/block/zram${i} /max_comp_streams"
116133 echo $max_s > $sys_path || \
@@ -122,7 +139,7 @@ zram_max_streams()
122139 echo " FAIL can't set max_streams '$max_s ', get $max_stream "
123140
124141 i=$(( $i + 1 ))
125- echo " $sys_path = '$max_streams ' ( $i / $dev_num ) "
142+ echo " $sys_path = '$max_streams '"
126143 done
127144
128145 echo " zram max streams: OK"
@@ -132,15 +149,16 @@ zram_compress_alg()
132149{
133150 echo " test that we can set compression algorithm"
134151
135- local algs=$( cat /sys/block/zram0/comp_algorithm)
152+ local i=$dev_start
153+ local algs=$( cat /sys/block/zram${i} /comp_algorithm)
136154 echo " supported algs: $algs "
137- local i=0
155+
138156 for alg in $zram_algs ; do
139157 local sys_path=" /sys/block/zram${i} /comp_algorithm"
140158 echo " $alg " > $sys_path || \
141159 echo " FAIL can't set '$alg ' to $sys_path "
142160 i=$(( $i + 1 ))
143- echo " $sys_path = '$alg ' ( $i / $dev_num ) "
161+ echo " $sys_path = '$alg '"
144162 done
145163
146164 echo " zram set compression algorithm: OK"
@@ -149,14 +167,14 @@ zram_compress_alg()
149167zram_set_disksizes ()
150168{
151169 echo " set disk size to zram device(s)"
152- local i=0
170+ local i=$dev_start
153171 for ds in $zram_sizes ; do
154172 local sys_path=" /sys/block/zram${i} /disksize"
155173 echo " $ds " > $sys_path || \
156174 echo " FAIL can't set '$ds ' to $sys_path "
157175
158176 i=$(( $i + 1 ))
159- echo " $sys_path = '$ds ' ( $i / $dev_num ) "
177+ echo " $sys_path = '$ds '"
160178 done
161179
162180 echo " zram set disksizes: OK"
@@ -166,14 +184,14 @@ zram_set_memlimit()
166184{
167185 echo " set memory limit to zram device(s)"
168186
169- local i=0
187+ local i=$dev_start
170188 for ds in $zram_mem_limits ; do
171189 local sys_path=" /sys/block/zram${i} /mem_limit"
172190 echo " $ds " > $sys_path || \
173191 echo " FAIL can't set '$ds ' to $sys_path "
174192
175193 i=$(( $i + 1 ))
176- echo " $sys_path = '$ds ' ( $i / $dev_num ) "
194+ echo " $sys_path = '$ds '"
177195 done
178196
179197 echo " zram set memory limit: OK"
@@ -182,8 +200,8 @@ zram_set_memlimit()
182200zram_makeswap ()
183201{
184202 echo " make swap with zram device(s)"
185- local i=0
186- for i in $( seq 0 $(( $dev_num - 1 )) ) ; do
203+ local i=$dev_start
204+ for i in $( seq $dev_start $dev_end ) ; do
187205 mkswap /dev/zram$i > err.log 2>&1
188206 if [ $? -ne 0 ]; then
189207 cat err.log
@@ -206,7 +224,7 @@ zram_makeswap()
206224zram_swapoff ()
207225{
208226 local i=
209- for i in $( seq 0 $dev_makeswap ) ; do
227+ for i in $( seq $dev_start $dev_end ) ; do
210228 swapoff /dev/zram$i > err.log 2>&1
211229 if [ $? -ne 0 ]; then
212230 cat err.log
@@ -220,7 +238,7 @@ zram_swapoff()
220238
221239zram_makefs ()
222240{
223- local i=0
241+ local i=$dev_start
224242 for fs in $zram_filesystems ; do
225243 # if requested fs not supported default it to ext2
226244 which mkfs.$fs > /dev/null 2>&1 || fs=ext2
@@ -239,7 +257,7 @@ zram_makefs()
239257zram_mount ()
240258{
241259 local i=0
242- for i in $( seq 0 $(( $dev_num - 1 )) ) ; do
260+ for i in $( seq $dev_start $dev_end ) ; do
243261 echo " mount /dev/zram$i "
244262 mkdir zram$i
245263 mount /dev/zram$i zram$i > /dev/null || \
0 commit comments