brintos

brintos / linux-shallow public Read only

0
0
Text · 4.1 KiB · d5dc7e0 Raw
226 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4SYSFS=5# Kselftest framework requirement - SKIP code is 4.6ksft_skip=47retval=08 9prerequisite()10{11	msg="skip all tests:"12 13	if [ $UID != 0 ]; then14		echo $msg must be run as root >&215		exit $ksft_skip16	fi17 18	taskset -p 01 $$19 20	SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`21 22	if [ ! -d "$SYSFS" ]; then23		echo $msg sysfs is not mounted >&224		exit $ksft_skip25	fi26 27	if ! ls $SYSFS/devices/system/cpu/cpu* > /dev/null 2>&1; then28		echo $msg cpu hotplug is not supported >&229		exit $ksft_skip30	fi31 32	echo "CPU online/offline summary:"33	online_cpus=`cat $SYSFS/devices/system/cpu/online`34	online_max=${online_cpus##*-}35 36	if [[ "$online_cpus" = "$online_max" ]]; then37		echo "$msg: since there is only one cpu: $online_cpus"38		exit $ksft_skip39	fi40 41	present_cpus=`cat $SYSFS/devices/system/cpu/present`42	present_max=${present_cpus##*-}43	echo "present_cpus = $present_cpus present_max = $present_max"44 45	echo -e "\t Cpus in online state: $online_cpus"46 47	offline_cpus=`cat $SYSFS/devices/system/cpu/offline`48	if [[ "a$offline_cpus" = "a" ]]; then49		offline_cpus=050	else51		offline_max=${offline_cpus##*-}52	fi53	echo -e "\t Cpus in offline state: $offline_cpus"54}55 56#57# list all hot-pluggable CPUs58#59hotpluggable_cpus()60{61	local state=${1:-.\*}62 63	for cpu in $SYSFS/devices/system/cpu/cpu*; do64		if [ -f $cpu/online ] && grep -q $state $cpu/online; then65			echo ${cpu##/*/cpu}66		fi67	done68}69 70hotplaggable_offline_cpus()71{72	hotpluggable_cpus 073}74 75hotpluggable_online_cpus()76{77	hotpluggable_cpus 178}79 80cpu_is_online()81{82	grep -q 1 $SYSFS/devices/system/cpu/cpu$1/online83}84 85cpu_is_offline()86{87	grep -q 0 $SYSFS/devices/system/cpu/cpu$1/online88}89 90online_cpu()91{92	echo 1 > $SYSFS/devices/system/cpu/cpu$1/online93}94 95offline_cpu()96{97	echo 0 > $SYSFS/devices/system/cpu/cpu$1/online98}99 100online_cpu_expect_success()101{102	local cpu=$1103 104	if ! online_cpu $cpu; then105		echo $FUNCNAME $cpu: unexpected fail >&2106		retval=1107	elif ! cpu_is_online $cpu; then108		echo $FUNCNAME $cpu: unexpected offline >&2109		retval=1110	fi111}112 113online_cpu_expect_fail()114{115	local cpu=$1116 117	if online_cpu $cpu 2> /dev/null; then118		echo $FUNCNAME $cpu: unexpected success >&2119		retval=1120	elif ! cpu_is_offline $cpu; then121		echo $FUNCNAME $cpu: unexpected online >&2122		retval=1123	fi124}125 126offline_cpu_expect_success()127{128	local cpu=$1129 130	if ! offline_cpu $cpu; then131		echo $FUNCNAME $cpu: unexpected fail >&2132		retval=1133	elif ! cpu_is_offline $cpu; then134		echo $FUNCNAME $cpu: unexpected offline >&2135		retval=1136	fi137}138 139offline_cpu_expect_fail()140{141	local cpu=$1142 143	if offline_cpu $cpu 2> /dev/null; then144		echo $FUNCNAME $cpu: unexpected success >&2145		retval=1146	elif ! cpu_is_online $cpu; then147		echo $FUNCNAME $cpu: unexpected offline >&2148		retval=1149	fi150}151 152online_all_hot_pluggable_cpus()153{154	for cpu in `hotplaggable_offline_cpus`; do155		online_cpu_expect_success $cpu156	done157}158 159offline_all_hot_pluggable_cpus()160{161	local reserve_cpu=$online_max162	for cpu in `hotpluggable_online_cpus`; do163		# Reserve one cpu oneline at least.164		if [ $cpu -eq $reserve_cpu ];then165			continue166		fi167		offline_cpu_expect_success $cpu168	done169}170 171allcpus=0172online_cpus=0173online_max=0174offline_cpus=0175offline_max=0176present_cpus=0177present_max=0178 179while getopts ah opt; do180	case $opt in181	a)182		allcpus=1183		;;184	h)185		echo "Usage $0 [ -a ]"186		echo -e "\t default offline one cpu"187		echo -e "\t run with -a option to offline all cpus"188		exit189		;;190	esac191done192 193prerequisite194 195#196# Safe test (default) - offline and online one cpu197#198if [ $allcpus -eq 0 ]; then199	echo "Limited scope test: one hotplug cpu"200	echo -e "\t (leaves cpu in the original state):"201	echo -e "\t online to offline to online: cpu $online_max"202	offline_cpu_expect_success $online_max203	online_cpu_expect_success $online_max204 205	if [[ $offline_cpus -gt 0 ]]; then206		echo -e "\t online to offline to online: cpu $present_max"207		online_cpu_expect_success $present_max208		offline_cpu_expect_success $present_max209		online_cpu $present_max210	fi211	exit $retval212else213	echo "Full scope test: all hotplug cpus"214	echo -e "\t online all offline cpus"215	echo -e "\t offline all online cpus"216	echo -e "\t online all offline cpus"217fi218 219online_all_hot_pluggable_cpus220 221offline_all_hot_pluggable_cpus222 223online_all_hot_pluggable_cpus224 225exit $retval226