Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ddddda9b authored by Shuah Khan's avatar Shuah Khan Committed by Greg Kroah-Hartman
Browse files

tools: selftests - create a separate hotplug target for full range test



On some systems, hot-plug tests could hang forever waiting for cpu and
memory to be ready to be offlined. A special hot-plug target is created
to run full range of hot-plug tests. In default mode, hot-plug tests run
in safe mode with a limited scope. In limited mode, cpu-hotplug test is
run on a single cpu as opposed to all hotplug capable cpus, and memory
hotplug test is run on 2% of hotplug capable memory instead of 10%. In
addition to the above change, cpu-hotplug is chnged to change processor
affinity to cpu 0 so it doesn't impact itself while the test runs.

Signed-off-by: default avatarShuah Khan <shuah.kh@samsung.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Michael Ellerman <michael@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6e7e6c34
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -12,6 +12,9 @@ TARGETS += powerpc
TARGETS += user
TARGETS += sysctl

TARGETS_HOTPLUG = cpu-hotplug
TARGETS_HOTPLUG += memory-hotplug

all:
	for TARGET in $(TARGETS); do \
		make -C $$TARGET; \
@@ -22,6 +25,21 @@ run_tests: all
		make -C $$TARGET run_tests; \
	done;

hotplug:
	for TARGET in $(TARGETS_HOTPLUG); do \
		make -C $$TARGET; \
	done;

run_hotplug: hotplug
	for TARGET in $(TARGETS_HOTPLUG); do \
		make -C $$TARGET run_full_test; \
	done;

clean_hotplug:
	for TARGET in $(TARGETS_HOTPLUG); do \
		make -C $$TARGET clean; \
	done;

clean:
	for TARGET in $(TARGETS); do \
		make -C $$TARGET clean; \
+23 −4
Original line number Diff line number Diff line
@@ -4,8 +4,15 @@ The kernel contains a set of "self tests" under the tools/testing/selftests/
directory. These are intended to be small unit tests to exercise individual
code paths in the kernel.

Running the selftests
=====================
On some systems, hot-plug tests could hang forever waiting for cpu and
memory to be ready to be offlined. A special hot-plug target is created
to run full range of hot-plug tests. In default mode, hot-plug tests run
in safe mode with a limited scope. In limited mode, cpu-hotplug test is
run on a single cpu as opposed to all hotplug capable cpus, and memory
hotplug test is run on 2% of hotplug capable memory instead of 10%.

Running the selftests (hotplug tests are run in limited mode)
=============================================================

To build the tests:

@@ -18,14 +25,26 @@ To run the tests:

- note that some tests will require root privileges.


To run only tests targetted for a single subsystem:
To run only tests targeted for a single subsystem: (including
hotplug targets in limited mode)

  $  make -C tools/testing/selftests TARGETS=cpu-hotplug run_tests

See the top-level tools/testing/selftests/Makefile for the list of all possible
targets.

Running the full range hotplug selftests
========================================

To build the tests:

  $ make -C tools/testing/selftests hotplug

To run the tests:

  $ make -C tools/testing/selftests run_hotplug

- note that some tests will require root privileges.

Contributing new tests
======================
+3 −0
Original line number Diff line number Diff line
@@ -3,4 +3,7 @@ all:
run_tests:
	@/bin/bash ./on-off-test.sh || echo "cpu-hotplug selftests: [FAIL]"

run_full_test:
	@/bin/bash ./on-off-test.sh -a || echo "cpu-hotplug selftests: [FAIL]"

clean:
+50 −2
Original line number Diff line number Diff line
@@ -11,6 +11,8 @@ prerequisite()
		exit 0
	fi

	taskset -p 01 $$

	SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`

	if [ ! -d "$SYSFS" ]; then
@@ -22,6 +24,19 @@ prerequisite()
		echo $msg cpu hotplug is not supported >&2
		exit 0
	fi

	echo "CPU online/offline summary:"
	online_cpus=`cat $SYSFS/devices/system/cpu/online`
	online_max=${online_cpus##*-}
	echo -e "\t Cpus in online state: $online_cpus"

	offline_cpus=`cat $SYSFS/devices/system/cpu/offline`
	if [[ "a$offline_cpus" = "a" ]]; then
		offline_cpus=0
	else
		offline_max=${offline_cpus##*-}
	fi
	echo -e "\t Cpus in offline state: $offline_cpus"
}

#
@@ -113,15 +128,25 @@ offline_cpu_expect_fail()
}

error=-12
allcpus=0
priority=0
online_cpus=0
online_max=0
offline_cpus=0
offline_max=0

while getopts e:hp: opt; do
while getopts e:ahp: opt; do
	case $opt in
	e)
		error=$OPTARG
		;;
	a)
		allcpus=1
		;;
	h)
		echo "Usage $0 [ -e errno ] [ -p notifier-priority ]"
		echo "Usage $0 [ -a ] [ -e errno ] [ -p notifier-priority ]"
		echo -e "\t default offline one cpu"
		echo -e "\t run with -a option to offline all cpus"
		exit
		;;
	p)
@@ -137,6 +162,29 @@ fi

prerequisite

#
# Safe test (default) - offline and online one cpu
#
if [ $allcpus -eq 0 ]; then
	echo "Limited scope test: one hotplug cpu"
	echo -e "\t (leaves cpu in the original state):"
	echo -e "\t online to offline to online: cpu $online_max"
	offline_cpu_expect_success $online_max
	online_cpu_expect_success $online_max

	if [[ $offline_cpus -gt 0 ]]; then
		echo -e "\t offline to online to offline: cpu $offline_max"
		online_cpu_expect_success $offline_max
		offline_cpu_expect_success $offline_max
	fi
	exit 0
else
	echo "Full scope test: all hotplug cpus"
	echo -e "\t online all offline cpus"
	echo -e "\t offline all online cpus"
	echo -e "\t online all offline cpus"
fi

#
# Online all hot-pluggable CPUs
#
+3 −0
Original line number Diff line number Diff line
all:

run_tests:
	@/bin/bash ./on-off-test.sh -r 2 || echo "memory-hotplug selftests: [FAIL]"

run_full_test:
	@/bin/bash ./on-off-test.sh || echo "memory-hotplug selftests: [FAIL]"

clean:
Loading