p[i * page_size / sizeof(*p)] = i + 0xdead0000;
 }
 
+/*
+ * Returns pmd-mapped hugepage in VMA marked VM_HUGEPAGE, filled with
+ * validate_memory()'able contents.
+ */
+static void *alloc_hpage(void)
+{
+       void *p;
+
+       p = alloc_mapping();
+       printf("Allocate huge page...");
+       madvise(p, hpage_pmd_size, MADV_HUGEPAGE);
+       fill_memory(p, 0, hpage_pmd_size);
+       if (check_huge(p))
+               success("OK");
+       else
+               fail("Fail");
+       return p;
+}
+
 static void validate_memory(int *p, unsigned long start, unsigned long end)
 {
        int i;
 {
        void *p;
 
-       p = alloc_mapping();
-
-       printf("Allocate huge page...");
-       madvise(p, hpage_pmd_size, MADV_HUGEPAGE);
-       fill_memory(p, 0, hpage_pmd_size);
-       if (check_huge(p))
-               success("OK");
-       else
-               fail("Fail");
+       p = alloc_hpage();
        madvise(p, hpage_pmd_size, MADV_NOHUGEPAGE);
 
        printf("Split huge page leaving single PTE mapping compound page...");
 {
        void *p;
 
-       p = alloc_mapping();
-
-       printf("Allocate huge page...");
-       madvise(p, hpage_pmd_size, MADV_HUGEPAGE);
-       fill_memory(p, 0, hpage_pmd_size);
-       if (check_huge(p))
-               success("OK");
-       else
-               fail("Fail");
-
+       p = alloc_hpage();
        printf("Split huge page leaving single PTE page table full of compound pages...");
        madvise(p, page_size, MADV_NOHUGEPAGE);
        madvise(p, hpage_pmd_size, MADV_NOHUGEPAGE);
        int wstatus;
        void *p;
 
-       p = alloc_mapping();
-
-       printf("Allocate huge page...");
-       madvise(p, hpage_pmd_size, MADV_HUGEPAGE);
-       fill_memory(p, 0, hpage_pmd_size);
-       if (check_huge(p))
-               success("OK");
-       else
-               fail("Fail");
-
+       p = alloc_hpage();
        printf("Share huge page over fork()...");
        if (!fork()) {
                /* Do not touch settings on child exit */
        int wstatus;
        void *p;
 
-       p = alloc_mapping();
-
-       printf("Allocate huge page...");
-       madvise(p, hpage_pmd_size, MADV_HUGEPAGE);
-       fill_memory(p, 0, hpage_pmd_size);
-       if (check_huge(p))
-               success("OK");
-       else
-               fail("Fail");
-
+       p = alloc_hpage();
        printf("Share huge page over fork()...");
        if (!fork()) {
                /* Do not touch settings on child exit */