On Thu, Jun 27, 2024 at 8:29 PM Miaohe Lin <linmiaohe@xxxxxxxxxx> wrote: > > On 2024/6/26 13:08, Jiaqi Yan wrote: > > Add regression and new tests when hugepage has correctable memory > > errors, and how userspace wants to deal with it: > > * if enable_soft_offline=1, mapped hugepage is soft offlined > > * if enable_soft_offline=0, mapped hugepage is intact > > > > Free hugepages case is not explicitly covered by the tests. > > > > Hugepage having corrected memory errors is emulated with > > MADV_SOFT_OFFLINE. > > Thanks for update. > > > > > Signed-off-by: Jiaqi Yan <jiaqiyan@xxxxxxxxxx> > > --- > > tools/testing/selftests/mm/.gitignore | 1 + > > tools/testing/selftests/mm/Makefile | 1 + > > .../selftests/mm/hugetlb-soft-offline.c | 228 ++++++++++++++++++ > > tools/testing/selftests/mm/run_vmtests.sh | 4 + > > 4 files changed, 234 insertions(+) > > create mode 100644 tools/testing/selftests/mm/hugetlb-soft-offline.c > ... > > +static void test_soft_offline_common(int enable_soft_offline) > > +{ > > + int fd; > > + int expect_errno = enable_soft_offline ? 0 : EOPNOTSUPP; > > + struct statfs file_stat; > > + unsigned long hugepagesize_kb = 0; > > + unsigned long nr_hugepages_before = 0; > > + unsigned long nr_hugepages_after = 0; > > + int ret; > > + > > + ksft_print_msg("Test soft-offline when enabled_soft_offline=%d\n", > > + enable_soft_offline); > > + > > + fd = create_hugetlbfs_file(&file_stat); > > + if (fd < 0) > > + ksft_exit_fail_msg("Failed to create hugetlbfs file\n"); > > + > > + hugepagesize_kb = file_stat.f_bsize / 1024; > > + ksft_print_msg("Hugepagesize is %ldkB\n", hugepagesize_kb); > > + > > + if (set_enable_soft_offline(enable_soft_offline)) { > > Nit: should this be written as if (set_enable_soft_offline(enable_soft_offline) != 0) to keep consistent with below code? for sure > > > + close(fd); > > + ksft_exit_fail_msg("Failed to set enable_soft_offline\n"); > > + } > > + > > + if (read_nr_hugepages(hugepagesize_kb, &nr_hugepages_before) != 0) { > > + close(fd); > > + ksft_exit_fail_msg("Failed to read nr_hugepages\n"); > > + } > > + > > + ksft_print_msg("Before MADV_SOFT_OFFLINE nr_hugepages=%ld\n", > > + nr_hugepages_before); > > + > > + ret = do_soft_offline(fd, 2 * file_stat.f_bsize, expect_errno); > > + > > + if (read_nr_hugepages(hugepagesize_kb, &nr_hugepages_after) != 0) { > > + close(fd); > > + ksft_exit_fail_msg("Failed to read nr_hugepages\n"); > > + } > > + > ... > > diff --git a/tools/testing/selftests/mm/run_vmtests.sh b/tools/testing/selftests/mm/run_vmtests.sh > > index 3157204b9047..781117fac1ba 100755 > > --- a/tools/testing/selftests/mm/run_vmtests.sh > > +++ b/tools/testing/selftests/mm/run_vmtests.sh > > @@ -331,6 +331,10 @@ CATEGORY="hugetlb" run_test ./thuge-gen > > CATEGORY="hugetlb" run_test ./charge_reserved_hugetlb.sh -cgroup-v2 > > CATEGORY="hugetlb" run_test ./hugetlb_reparenting_test.sh -cgroup-v2 > > if $RUN_DESTRUCTIVE; then > > +nr_hugepages_tmp=$(cat /proc/sys/vm/nr_hugepages) > > +echo 8 > /proc/sys/vm/nr_hugepages > > +CATEGORY="hugetlb" run_test ./hugetlb-soft-offline > > +echo "$nr_hugepages_tmp" > /proc/sys/vm/nr_hugepages > > Should we save and restore the value of /proc/sys/vm/enable_soft_offline too? absolutely, thanks for catching. > > With above fixed, this patch looks good to me. > Acked-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> Thanks Miaohe, I will send out v7 with fixes. > Thanks. > . >