cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

zram_lib.sh (5568B)


      1#!/bin/sh
      2# SPDX-License-Identifier: GPL-2.0-or-later
      3# Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
      4#
      5# Author: Alexey Kodanev <alexey.kodanev@oracle.com>
      6# Modified: Naresh Kamboju <naresh.kamboju@linaro.org>
      7
      8dev_makeswap=-1
      9dev_mounted=-1
     10dev_start=0
     11dev_end=-1
     12module_load=-1
     13sys_control=-1
     14# Kselftest framework requirement - SKIP code is 4.
     15ksft_skip=4
     16kernel_version=`uname -r | cut -d'.' -f1,2`
     17kernel_major=${kernel_version%.*}
     18kernel_minor=${kernel_version#*.}
     19
     20trap INT
     21
     22check_prereqs()
     23{
     24	local msg="skip all tests:"
     25	local uid=$(id -u)
     26
     27	if [ $uid -ne 0 ]; then
     28		echo $msg must be run as root >&2
     29		exit $ksft_skip
     30	fi
     31}
     32
     33kernel_gte()
     34{
     35	major=${1%.*}
     36	minor=${1#*.}
     37
     38	if [ $kernel_major -gt $major ]; then
     39		return 0
     40	elif [[ $kernel_major -eq $major && $kernel_minor -ge $minor ]]; then
     41		return 0
     42	fi
     43
     44	return 1
     45}
     46
     47zram_cleanup()
     48{
     49	echo "zram cleanup"
     50	local i=
     51	for i in $(seq $dev_start $dev_makeswap); do
     52		swapoff /dev/zram$i
     53	done
     54
     55	for i in $(seq $dev_start $dev_mounted); do
     56		umount /dev/zram$i
     57	done
     58
     59	for i in $(seq $dev_start $dev_end); do
     60		echo 1 > /sys/block/zram${i}/reset
     61		rm -rf zram$i
     62	done
     63
     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
     69
     70	if [ $module_load -eq 1 ]; then
     71		rmmod zram > /dev/null 2>&1
     72	fi
     73}
     74
     75zram_load()
     76{
     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
     95
     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
    106		else
    107			echo "test needs CONFIG_ZRAM=m on old kernel without" \
    108				"zram-control interface"
    109			exit $ksft_skip
    110		fi
    111		modprobe zram num_devices=$dev_num
    112	fi
    113
    114	module_load=1
    115	dev_end=$(($dev_num - 1))
    116	echo "all zram devices (/dev/zram0~$dev_end) successfully created"
    117}
    118
    119zram_max_streams()
    120{
    121	echo "set max_comp_streams to zram device(s)"
    122
    123	kernel_gte 4.7
    124	if [ $? -eq 0 ]; then
    125		echo "The device attribute max_comp_streams was"\
    126		               "deprecated in 4.7"
    127		return 0
    128	fi
    129
    130	local i=$dev_start
    131	for max_s in $zram_max_streams; do
    132		local sys_path="/sys/block/zram${i}/max_comp_streams"
    133		echo $max_s > $sys_path || \
    134			echo "FAIL failed to set '$max_s' to $sys_path"
    135		sleep 1
    136		local max_streams=$(cat $sys_path)
    137
    138		[ "$max_s" -ne "$max_streams" ] && \
    139			echo "FAIL can't set max_streams '$max_s', get $max_stream"
    140
    141		i=$(($i + 1))
    142		echo "$sys_path = '$max_streams'"
    143	done
    144
    145	echo "zram max streams: OK"
    146}
    147
    148zram_compress_alg()
    149{
    150	echo "test that we can set compression algorithm"
    151
    152	local i=$dev_start
    153	local algs=$(cat /sys/block/zram${i}/comp_algorithm)
    154	echo "supported algs: $algs"
    155
    156	for alg in $zram_algs; do
    157		local sys_path="/sys/block/zram${i}/comp_algorithm"
    158		echo "$alg" >	$sys_path || \
    159			echo "FAIL can't set '$alg' to $sys_path"
    160		i=$(($i + 1))
    161		echo "$sys_path = '$alg'"
    162	done
    163
    164	echo "zram set compression algorithm: OK"
    165}
    166
    167zram_set_disksizes()
    168{
    169	echo "set disk size to zram device(s)"
    170	local i=$dev_start
    171	for ds in $zram_sizes; do
    172		local sys_path="/sys/block/zram${i}/disksize"
    173		echo "$ds" >	$sys_path || \
    174			echo "FAIL can't set '$ds' to $sys_path"
    175
    176		i=$(($i + 1))
    177		echo "$sys_path = '$ds'"
    178	done
    179
    180	echo "zram set disksizes: OK"
    181}
    182
    183zram_set_memlimit()
    184{
    185	echo "set memory limit to zram device(s)"
    186
    187	local i=$dev_start
    188	for ds in $zram_mem_limits; do
    189		local sys_path="/sys/block/zram${i}/mem_limit"
    190		echo "$ds" >	$sys_path || \
    191			echo "FAIL can't set '$ds' to $sys_path"
    192
    193		i=$(($i + 1))
    194		echo "$sys_path = '$ds'"
    195	done
    196
    197	echo "zram set memory limit: OK"
    198}
    199
    200zram_makeswap()
    201{
    202	echo "make swap with zram device(s)"
    203	local i=$dev_start
    204	for i in $(seq $dev_start $dev_end); do
    205		mkswap /dev/zram$i > err.log 2>&1
    206		if [ $? -ne 0 ]; then
    207			cat err.log
    208			echo "FAIL mkswap /dev/zram$1 failed"
    209		fi
    210
    211		swapon /dev/zram$i > err.log 2>&1
    212		if [ $? -ne 0 ]; then
    213			cat err.log
    214			echo "FAIL swapon /dev/zram$1 failed"
    215		fi
    216
    217		echo "done with /dev/zram$i"
    218		dev_makeswap=$i
    219	done
    220
    221	echo "zram making zram mkswap and swapon: OK"
    222}
    223
    224zram_swapoff()
    225{
    226	local i=
    227	for i in $(seq $dev_start $dev_end); do
    228		swapoff /dev/zram$i > err.log 2>&1
    229		if [ $? -ne 0 ]; then
    230			cat err.log
    231			echo "FAIL swapoff /dev/zram$i failed"
    232		fi
    233	done
    234	dev_makeswap=-1
    235
    236	echo "zram swapoff: OK"
    237}
    238
    239zram_makefs()
    240{
    241	local i=$dev_start
    242	for fs in $zram_filesystems; do
    243		# if requested fs not supported default it to ext2
    244		which mkfs.$fs > /dev/null 2>&1 || fs=ext2
    245
    246		echo "make $fs filesystem on /dev/zram$i"
    247		mkfs.$fs /dev/zram$i > err.log 2>&1
    248		if [ $? -ne 0 ]; then
    249			cat err.log
    250			echo "FAIL failed to make $fs on /dev/zram$i"
    251		fi
    252		i=$(($i + 1))
    253		echo "zram mkfs.$fs: OK"
    254	done
    255}
    256
    257zram_mount()
    258{
    259	local i=0
    260	for i in $(seq $dev_start $dev_end); do
    261		echo "mount /dev/zram$i"
    262		mkdir zram$i
    263		mount /dev/zram$i zram$i > /dev/null || \
    264			echo "FAIL mount /dev/zram$i failed"
    265		dev_mounted=$i
    266	done
    267
    268	echo "zram mount of zram device(s): OK"
    269}