Files
i2som-imx-linux/tools/testing/selftests/memfd/run_tests.sh
Shuah Khan (Samsung OSG) 4312c2df0b selftests: memfd: return Kselftest Skip code for skipped tests
[ Upstream commit b27f0259e8 ]

When memfd test is skipped because of unmet dependencies and/or unsupported
configuration, it returns non-zero value which is treated as a fail by the
Kselftest framework. This leads to false negative result even when the test
could not be run.

Change it to return kselftest skip code when a test gets skipped to clearly
report that the test could not be run.

Added an explicit check for root user at the start of memfd hugetlbfs test
and return skip code if a non-root user attempts to run it.

In addition, return skip code when not enough huge pages are available to
run the test.

Kselftest framework SKIP code is 4 and the framework prints appropriate
messages to indicate that the test is skipped.

Signed-off-by: Shuah Khan (Samsung OSG) <shuah@kernel.org>
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
Signed-off-by: Shuah Khan (Samsung OSG) <shuah@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-08-03 07:50:27 +02:00

74 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# please run as root
# Kselftest framework requirement - SKIP code is 4.
ksft_skip=4
#
# Normal tests requiring no special resources
#
./run_fuse_test.sh
./memfd_test
#
# To test memfd_create with hugetlbfs, there needs to be hpages_test
# huge pages free. Attempt to allocate enough pages to test.
#
hpages_test=8
#
# Get count of free huge pages from /proc/meminfo
#
while read name size unit; do
if [ "$name" = "HugePages_Free:" ]; then
freepgs=$size
fi
done < /proc/meminfo
#
# If not enough free huge pages for test, attempt to increase
#
if [ -n "$freepgs" ] && [ $freepgs -lt $hpages_test ]; then
nr_hugepgs=`cat /proc/sys/vm/nr_hugepages`
hpages_needed=`expr $hpages_test - $freepgs`
if [ $UID != 0 ]; then
echo "Please run memfd with hugetlbfs test as root"
exit $ksft_skip
fi
echo 3 > /proc/sys/vm/drop_caches
echo $(( $hpages_needed + $nr_hugepgs )) > /proc/sys/vm/nr_hugepages
while read name size unit; do
if [ "$name" = "HugePages_Free:" ]; then
freepgs=$size
fi
done < /proc/meminfo
fi
#
# If still not enough huge pages available, exit. But, give back any huge
# pages potentially allocated above.
#
if [ $freepgs -lt $hpages_test ]; then
# nr_hugepgs non-zero only if we attempted to increase
if [ -n "$nr_hugepgs" ]; then
echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
fi
printf "Not enough huge pages available (%d < %d)\n" \
$freepgs $needpgs
exit $ksft_skip
fi
#
# Run the hugetlbfs test
#
./memfd_test hugetlbfs
#
# Give back any huge pages allocated for the test
#
if [ -n "$nr_hugepgs" ]; then
echo $nr_hugepgs > /proc/sys/vm/nr_hugepages
fi