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

hugetlb-shm test fails if there are no free huge pages prepared by a
wrapper script and shm liimts in proc are too low.

Add setup of HugeTLB pages and shm limits to the test and make sure that
the original settings are restored on the test exit.

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

diff --git a/tools/testing/selftests/mm/hugetlb-shm.c 
b/tools/testing/selftests/mm/hugetlb-shm.c
index 0f70b1a50b6b..7b5a5cefe458 100644
--- a/tools/testing/selftests/mm/hugetlb-shm.c
+++ b/tools/testing/selftests/mm/hugetlb-shm.c
@@ -29,9 +29,24 @@
 #include <sys/mman.h>
 
 #include "vm_util.h"
+#include "hugepage_settings.h"
 
 #define LENGTH (256UL*1024*1024)
 
+static void prepare(void)
+{
+       unsigned long length, hugepage_size, nr;
+
+       hugepage_size = default_huge_page_size();
+       length = (LENGTH + hugepage_size) & ~(hugepage_size - 1);
+       nr = length / hugepage_size;
+
+       if (!hugetlb_setup_default(nr))
+               ksft_exit_skip("Not enough free huge pages\n");
+
+       shm_limits_prepare(length);
+}
+
 int main(void)
 {
        int shmid;
@@ -41,6 +56,8 @@ int main(void)
        ksft_print_header();
        ksft_set_plan(1);
 
+       prepare();
+
        shmid = shmget(2, LENGTH, SHM_HUGETLB | IPC_CREAT | SHM_R | SHM_W);
        if (shmid < 0)
                ksft_exit_fail_perror("shmget");
@@ -78,3 +95,5 @@ int main(void)
        ksft_test_result_pass("hugepage using SysV shmget/shmat\n");
        ksft_finished();
 }
+
+SHM_LIMITS_RESTORE()
-- 
2.53.0


Reply via email to