On 05/08/2025 13:29, David Hildenbrand wrote: > On 05.08.25 14:19, Usama Arif wrote: >> >> >> On 05/08/2025 11:36, 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 expect for madvise. >>>> - get hugepages only on MADV_HUGE and MADV_COLLAPSE if the global policy >>>> is madvise/always and only with MADV_COLLAPSE if the global policy is >>>> never. >>>> - 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> >>>> --- >>> >>> [...] >>> >>>> +FIXTURE_VARIANT(prctl_thp_disable_except_madvise) >>>> +{ >>>> + enum thp_enabled thp_policy; >>>> +}; >>>> + >>>> +FIXTURE_VARIANT_ADD(prctl_thp_disable_except_madvise, never) >>>> +{ >>>> + .thp_policy = THP_NEVER, >>>> +}; >>>> + >>>> +FIXTURE_VARIANT_ADD(prctl_thp_disable_except_madvise, madvise) >>>> +{ >>>> + .thp_policy = THP_MADVISE, >>>> +}; >>>> + >>>> +FIXTURE_VARIANT_ADD(prctl_thp_disable_except_madvise, always) >>>> +{ >>>> + .thp_policy = THP_ALWAYS, >>>> +}; >>>> + >>>> +FIXTURE_SETUP(prctl_thp_disable_except_madvise) >>>> +{ >>>> + if (!thp_available()) >>>> + SKIP(return, "Transparent Hugepages not available\n"); >>>> + >>>> + self->pmdsize = read_pmd_pagesize(); >>>> + if (!self->pmdsize) >>>> + SKIP(return, "Unable to read PMD size\n"); >>> >>> Should we test here if the kernel knows PR_THP_DISABLE_EXCEPT_ADVISED, and if not, skip? >>> >>> Might be as simple as trying issuing two prctl, and making sure the first disabling attempt doesn't fail. If so, SKIP. >>> >>> Nothing else jumped at me. Can you include a test run result in the patch description? >>> >> >> Instead of 2 prctls, I think doing just the below should be enough: >> >> diff --git a/tools/testing/selftests/mm/prctl_thp_disable.c b/tools/testing/selftests/mm/prctl_thp_disable.c >> index 93cedaa59854..da28bc4441ed 100644 >> --- a/tools/testing/selftests/mm/prctl_thp_disable.c >> +++ b/tools/testing/selftests/mm/prctl_thp_disable.c >> @@ -236,6 +236,9 @@ FIXTURE_SETUP(prctl_thp_disable_except_madvise) >> if (!self->pmdsize) >> SKIP(return, "Unable to read PMD size\n"); >> + if (prctl(PR_SET_THP_DISABLE, 1, PR_THP_DISABLE_EXCEPT_ADVISED, NULL, NULL)) >> + SKIP(return, "Unable to set PR_THP_DISABLE_EXCEPT_ADVISED\n"); >> + >> thp_save_settings(); >> thp_read_settings(&self->settings); >> self->settings.thp_enabled = variant->thp_policy; > > Then probably best to remove the > > ASSERT_EQ(prctl(PR_SET_THP_DISABLE, 1, PR_THP_DISABLE_EXCEPT_ADVISED, NULL, NULL), 0); > > From both test functions? > > You can consider doing the same in patch #5. > Yes makes sense, Thanks!