Skip to content

Commit 9436462

Browse files
author
CKI KWF Bot
committed
Merge: selftests/mm: fix va_high_addr_switch.sh failure on x86_64
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-10/-/merge_requests/1628 JIRA: https://issues.redhat.com/browse/RHEL-110506 The patch2 and patch3 fix kselftest hugevm va_high_addr_switch test failure caused by no enough hugepage and mismatched hint addr align. The first patch is added as dependency. Signed-off-by: Chunyu Hu <chuhu@redhat.com> Approved-by: Waiman Long <longman@redhat.com> Approved-by: Rafael Aquini <raquini@redhat.com> Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> Merged-by: CKI GitLab Kmaint Pipeline Bot <26919896-cki-kmaint-pipeline-bot@users.noreply.gitlab.com>
2 parents c0549ef + 091c9b0 commit 9436462

File tree

2 files changed

+48
-19
lines changed

2 files changed

+48
-19
lines changed

tools/testing/selftests/mm/va_high_addr_switch.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,10 @@ void testcases_init(void)
230230
.msg = "mmap(-1, MAP_HUGETLB) again",
231231
},
232232
{
233-
.addr = (void *)(addr_switch_hint - pagesize),
233+
.addr = (void *)(addr_switch_hint - hugepagesize),
234234
.size = 2 * hugepagesize,
235235
.flags = MAP_HUGETLB | MAP_PRIVATE | MAP_ANONYMOUS,
236-
.msg = "mmap(addr_switch_hint - pagesize, 2*hugepagesize, MAP_HUGETLB)",
236+
.msg = "mmap(addr_switch_hint - hugepagesize, 2*hugepagesize, MAP_HUGETLB)",
237237
.low_addr_required = 1,
238238
.keep_mapped = 1,
239239
},

tools/testing/selftests/mm/va_high_addr_switch.sh

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,21 @@
77
# real test to check that the kernel is configured to support at least 5
88
# pagetable levels.
99

10-
# 1 means the test failed
11-
exitcode=1
12-
1310
# Kselftest framework requirement - SKIP code is 4.
1411
ksft_skip=4
12+
orig_nr_hugepages=0
1513

16-
fail()
14+
skip()
1715
{
1816
echo "$1"
19-
exit $exitcode
17+
exit $ksft_skip
2018
}
2119

2220
check_supported_x86_64()
2321
{
2422
local config="/proc/config.gz"
2523
[[ -f "${config}" ]] || config="/boot/config-$(uname -r)"
26-
[[ -f "${config}" ]] || fail "Cannot find kernel config in /proc or /boot"
24+
[[ -f "${config}" ]] || skip "Cannot find kernel config in /proc or /boot"
2725

2826
# gzip -dcfq automatically handles both compressed and plaintext input.
2927
# See man 1 gzip under '-f'.
@@ -33,36 +31,31 @@ check_supported_x86_64()
3331
else {print 1}; exit}' /proc/cpuinfo 2>/dev/null)
3432

3533
if [[ "${pg_table_levels}" -lt 5 ]]; then
36-
echo "$0: PGTABLE_LEVELS=${pg_table_levels}, must be >= 5 to run this test"
37-
exit $ksft_skip
34+
skip "$0: PGTABLE_LEVELS=${pg_table_levels}, must be >= 5 to run this test"
3835
elif [[ "${cpu_supports_pl5}" -ne 0 ]]; then
39-
echo "$0: CPU does not have the necessary la57 flag to support page table level 5"
40-
exit $ksft_skip
36+
skip "$0: CPU does not have the necessary la57 flag to support page table level 5"
4137
fi
4238
}
4339

4440
check_supported_ppc64()
4541
{
4642
local config="/proc/config.gz"
4743
[[ -f "${config}" ]] || config="/boot/config-$(uname -r)"
48-
[[ -f "${config}" ]] || fail "Cannot find kernel config in /proc or /boot"
44+
[[ -f "${config}" ]] || skip "Cannot find kernel config in /proc or /boot"
4945

5046
local pg_table_levels=$(gzip -dcfq "${config}" | grep PGTABLE_LEVELS | cut -d'=' -f 2)
5147
if [[ "${pg_table_levels}" -lt 5 ]]; then
52-
echo "$0: PGTABLE_LEVELS=${pg_table_levels}, must be >= 5 to run this test"
53-
exit $ksft_skip
48+
skip "$0: PGTABLE_LEVELS=${pg_table_levels}, must be >= 5 to run this test"
5449
fi
5550

5651
local mmu_support=$(grep -m1 "mmu" /proc/cpuinfo | awk '{print $3}')
5752
if [[ "$mmu_support" != "radix" ]]; then
58-
echo "$0: System does not use Radix MMU, required for 5-level paging"
59-
exit $ksft_skip
53+
skip "$0: System does not use Radix MMU, required for 5-level paging"
6054
fi
6155

6256
local hugepages_total=$(awk '/HugePages_Total/ {print $2}' /proc/meminfo)
6357
if [[ "${hugepages_total}" -eq 0 ]]; then
64-
echo "$0: HugePages are not enabled, required for some tests"
65-
exit $ksft_skip
58+
skip "$0: HugePages are not enabled, required for some tests"
6659
fi
6760
}
6861

@@ -84,5 +77,41 @@ check_test_requirements()
8477
esac
8578
}
8679

80+
save_nr_hugepages()
81+
{
82+
orig_nr_hugepages=$(cat /proc/sys/vm/nr_hugepages)
83+
}
84+
85+
restore_nr_hugepages()
86+
{
87+
echo "$orig_nr_hugepages" > /proc/sys/vm/nr_hugepages
88+
}
89+
90+
setup_nr_hugepages()
91+
{
92+
local needpgs=$1
93+
while read -r name size unit; do
94+
if [ "$name" = "HugePages_Free:" ]; then
95+
freepgs="$size"
96+
break
97+
fi
98+
done < /proc/meminfo
99+
if [ "$freepgs" -ge "$needpgs" ]; then
100+
return
101+
fi
102+
local hpgs=$((orig_nr_hugepages + needpgs))
103+
echo $hpgs > /proc/sys/vm/nr_hugepages
104+
105+
local nr_hugepgs=$(cat /proc/sys/vm/nr_hugepages)
106+
if [ "$nr_hugepgs" != "$hpgs" ]; then
107+
restore_nr_hugepages
108+
skip "$0: no enough hugepages for testing"
109+
fi
110+
}
111+
87112
check_test_requirements
113+
save_nr_hugepages
114+
# 4 keep_mapped pages, and one for tmp usage
115+
setup_nr_hugepages 5
88116
./va_high_addr_switch --run-hugetlb
117+
restore_nr_hugepages

0 commit comments

Comments
 (0)