On 05/08/2025 11:30, David Hildenbrand wrote: > On 04.08.25 17:40, Usama Arif wrote: >> The test will set the global system THP setting to never, madvise >> or always depending on the fixture variant and the 2M setting to >> inherit before it starts (and reset to original at teardown). >> >> This tests if the process can: >> - successfully set and get the policy to disable THPs completely. >> - never get a hugepage when the THPs are completely disabled >> with the prctl, including with MADV_HUGE and MADV_COLLAPSE. >> - successfully reset the policy of the process. >> - after reset, only get hugepages with: >> - MADV_COLLAPSE when policy is set to never. >> - MADV_HUGE and MADV_COLLAPSE when policy is set to madvise. >> - always when policy is set to "always". >> - repeat the above tests in a forked process to make sure >> the policy is carried across forks. >> >> Signed-off-by: Usama Arif <usamaarif642@xxxxxxxxx> >> --- >> tools/testing/selftests/mm/.gitignore | 1 + >> tools/testing/selftests/mm/Makefile | 1 + >> .../testing/selftests/mm/prctl_thp_disable.c | 173 ++++++++++++++++++ >> tools/testing/selftests/mm/thp_settings.c | 9 +- >> tools/testing/selftests/mm/thp_settings.h | 1 + >> 5 files changed, 184 insertions(+), 1 deletion(-) >> create mode 100644 tools/testing/selftests/mm/prctl_thp_disable.c >> >> diff --git a/tools/testing/selftests/mm/.gitignore b/tools/testing/selftests/mm/.gitignore >> index e7b23a8a05fe..eb023ea857b3 100644 >> --- a/tools/testing/selftests/mm/.gitignore >> +++ b/tools/testing/selftests/mm/.gitignore >> @@ -58,3 +58,4 @@ pkey_sighandler_tests_32 >> pkey_sighandler_tests_64 >> guard-regions >> merge >> +prctl_thp_disable >> diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftests/mm/Makefile >> index d13b3cef2a2b..2bb8d3ebc17c 100644 >> --- a/tools/testing/selftests/mm/Makefile >> +++ b/tools/testing/selftests/mm/Makefile >> @@ -86,6 +86,7 @@ TEST_GEN_FILES += on-fault-limit >> TEST_GEN_FILES += pagemap_ioctl >> TEST_GEN_FILES += pfnmap >> TEST_GEN_FILES += process_madv >> +TEST_GEN_FILES += prctl_thp_disable >> TEST_GEN_FILES += thuge-gen >> TEST_GEN_FILES += transhuge-stress >> TEST_GEN_FILES += uffd-stress >> diff --git a/tools/testing/selftests/mm/prctl_thp_disable.c b/tools/testing/selftests/mm/prctl_thp_disable.c >> new file mode 100644 >> index 000000000000..ef150180daf4 >> --- /dev/null >> +++ b/tools/testing/selftests/mm/prctl_thp_disable.c >> @@ -0,0 +1,173 @@ >> +// SPDX-License-Identifier: GPL-2.0 >> +/* >> + * Basic tests for PR_GET/SET_THP_DISABLE prctl calls >> + * >> + * Author(s): Usama Arif <usamaarif642@xxxxxxxxx> >> + */ >> +#include <stdio.h> >> +#include <stdlib.h> >> +#include <string.h> >> +#include <unistd.h> >> +#include <sys/mman.h> >> +#include <sys/prctl.h> >> +#include <sys/wait.h> >> + >> +#include "../kselftest_harness.h" >> +#include "thp_settings.h" >> +#include "vm_util.h" >> + >> +static int sz2ord(size_t size, size_t pagesize) >> +{ >> + return __builtin_ctzll(size / pagesize); >> +} > > Note: We have this helper duplicated elsewhere (e.g., cow.c). > > See [1] how we're going to clean it up. > > Not sure how to resolve this. Probably, which series lands first in mm-unstable should clean it up. > > I would assume that Donet's series would go in first, such that you can just reuse the helper from vm_utils.h > > [1] https://lkml.kernel.org/r/20250804090410.of5xwrlker665bdp@master > > > Nothing else jumped at me > > Acked-by: David Hildenbrand <david@xxxxxxxxxx> > Thanks! I will wait a few days and see if it has made it into mm-new and rebase and send the next revision.