From: "Mike Rapoport (Microsoft)" <[email protected]>

migration 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.

Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>
---
 tools/testing/selftests/mm/migration.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tools/testing/selftests/mm/migration.c 
b/tools/testing/selftests/mm/migration.c
index ccf42002ce86..61fb00953f83 100644
--- a/tools/testing/selftests/mm/migration.c
+++ b/tools/testing/selftests/mm/migration.c
@@ -23,6 +23,8 @@
 #define MAX_RETRIES    100
 #define ALIGN(x, a)    (((x) + (a - 1)) & (~((a) - 1)))
 
+HUGETLB_SETUP_DEFAULT_PAGES(1)
+
 FIXTURE(migration)
 {
        pthread_t *threads;
@@ -277,6 +279,9 @@ TEST_F_TIMEOUT(migration, private_anon_htlb, 2*RUNTIME)
        if (!hugepage_size)
                SKIP(return, "Reading HugeTLB pagesize failed\n");
 
+       if (hugetlb_free_default_pages() < 1)
+               SKIP(return, "Not enough huge pages\n");
+
        ptr = mmap(NULL, hugepage_size, PROT_READ | PROT_WRITE,
                MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
        ASSERT_NE(ptr, MAP_FAILED);
@@ -308,6 +313,9 @@ TEST_F_TIMEOUT(migration, shared_anon_htlb, 2*RUNTIME)
        if (!hugepage_size)
                SKIP(return, "Reading HugeTLB pagesize failed\n");
 
+       if (hugetlb_free_default_pages() < 1)
+               SKIP(return, "Not enough huge pages\n");
+
        ptr = mmap(NULL, hugepage_size, PROT_READ | PROT_WRITE,
                MAP_SHARED | MAP_ANONYMOUS | MAP_HUGETLB, -1, 0);
        ASSERT_NE(ptr, MAP_FAILED);
-- 
2.53.0


Reply via email to