mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 10:41:49 +02:00
selftests/mm: hmm-tests: add setup of HugeTLB pages
hmm-tests skips HugeTLB tests if there are no free huge pages prepared by a wrapper script. Add setup of HugeTLB pages to the test and make sure that the original settings are restored on the test exit. Since kselftest_harness runs fixture setup and the tests in child processes, use HUGETLB_SETUP_DEFAULT_PAGES() that defines a constructor that runs in the main process and add verification that there are enough free huge pages to the tests that use them. Replace exit() calls with _exit() to avoid restoring HugeTLB settings in the middle of test and use SIGKILL to kill a child process in hmm_cow_in_device test to avoid interference with signal handlers in hugepage_restore_settings(). Link: https://lore.kernel.org/20260511162840.375890-36-rppt@kernel.org Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Tested-by: Luiz Capitulino <luizcap@redhat.com> Tested-by: Sarthak Sharma <sarthak.sharma@arm.com> Cc: Baolin Wang <baolin.wang@linux.alibaba.com> Cc: Barry Song <baohua@kernel.org> Cc: David Hildenbrand <david@kernel.org> Cc: Dev Jain <dev.jain@arm.com> Cc: Donet Tom <donettom@linux.ibm.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: John Hubbard <jhubbard@nvidia.com> Cc: Lance Yang <lance.yang@linux.dev> Cc: Leon Romanovsky <leon@kernel.org> Cc: Liam Howlett <liam@infradead.org> Cc: Li Wang <li.wang@linux.dev> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: Mark Brown <broonie@kernel.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Nico Pache <npache@redhat.com> Cc: Peter Xu <peterx@redhat.com> Cc: Ryan Roberts <ryan.roberts@arm.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org> Cc: Zi Yan <ziy@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
ff47c60087
commit
28ef1fb4e5
|
|
@ -69,6 +69,9 @@ enum {
|
|||
#ifndef FOLL_LONGTERM
|
||||
#define FOLL_LONGTERM 0x100 /* mapping lifetime is indefinite */
|
||||
#endif
|
||||
|
||||
HUGETLB_SETUP_DEFAULT_PAGES(1)
|
||||
|
||||
FIXTURE(hmm)
|
||||
{
|
||||
int fd;
|
||||
|
|
@ -632,7 +635,7 @@ TEST_F(hmm, anon_write_child)
|
|||
}
|
||||
|
||||
close(child_fd);
|
||||
exit(0);
|
||||
_exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -712,7 +715,7 @@ TEST_F(hmm, anon_write_child_shared)
|
|||
ASSERT_EQ(ptr[i], -i);
|
||||
|
||||
close(child_fd);
|
||||
exit(0);
|
||||
_exit(0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -784,8 +787,8 @@ TEST_F(hmm, anon_write_hugetlbfs)
|
|||
int *ptr;
|
||||
int ret;
|
||||
|
||||
if (!default_hsize)
|
||||
SKIP(return, "Huge page size could not be determined");
|
||||
if (!hugetlb_free_default_pages())
|
||||
SKIP(return, "Not enough huge pages");
|
||||
|
||||
size = ALIGN(TWOMEG, default_hsize);
|
||||
npages = size >> self->page_shift;
|
||||
|
|
@ -1614,9 +1617,8 @@ TEST_F(hmm, compound)
|
|||
unsigned long i;
|
||||
|
||||
/* Skip test if we can't allocate a hugetlbfs page. */
|
||||
|
||||
if (!default_hsize)
|
||||
SKIP(return, "Huge page size could not be determined");
|
||||
if (!hugetlb_free_default_pages())
|
||||
SKIP(return, "Not enough huge pages");
|
||||
|
||||
size = ALIGN(TWOMEG, default_hsize);
|
||||
npages = size >> self->page_shift;
|
||||
|
|
@ -2062,7 +2064,7 @@ TEST_F(hmm, hmm_cow_in_device)
|
|||
if (pid == -1)
|
||||
ASSERT_EQ(pid, 0);
|
||||
if (!pid) {
|
||||
/* Child process waits for SIGTERM from the parent. */
|
||||
/* Child process waits for SIGKILL from the parent. */
|
||||
while (1) {
|
||||
}
|
||||
/* Should not reach this */
|
||||
|
|
@ -2075,10 +2077,10 @@ TEST_F(hmm, hmm_cow_in_device)
|
|||
ptr[i] = i;
|
||||
|
||||
/* Terminate child and wait */
|
||||
EXPECT_EQ(0, kill(pid, SIGTERM));
|
||||
EXPECT_EQ(0, kill(pid, SIGKILL));
|
||||
EXPECT_EQ(pid, waitpid(pid, &status, 0));
|
||||
EXPECT_NE(0, WIFSIGNALED(status));
|
||||
EXPECT_EQ(SIGTERM, WTERMSIG(status));
|
||||
EXPECT_EQ(SIGKILL, WTERMSIG(status));
|
||||
|
||||
/* Take snapshot to CPU pagetables */
|
||||
ret = hmm_dmirror_cmd(self->fd, HMM_DMIRROR_SNAPSHOT, buffer, npages);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user