#include <unistd.h>
 #include <sys/mman.h>
 #include <fcntl.h>
-
-#define MAP_LENGTH             (2UL * 1024 * 1024)
-
-#define PAGE_SIZE              4096
+#include "vm_util.h"
 
 #define PAGE_COMPOUND_HEAD     (1UL << 15)
 #define PAGE_COMPOUND_TAIL     (1UL << 16)
 #define MAP_FLAGS              (MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB)
 #endif
 
+static size_t pagesize;
+static size_t maplength;
+
 static void write_bytes(char *addr, size_t length)
 {
        unsigned long i;
        if (fd < 0)
                return -1UL;
 
-       lseek(fd, (unsigned long)addr / PAGE_SIZE * sizeof(pagemap), SEEK_SET);
+       lseek(fd, (unsigned long)addr / pagesize * sizeof(pagemap), SEEK_SET);
        read(fd, &pagemap, sizeof(pagemap));
        close(fd);
 
         * this also verifies kernel has correctly set the fake page_head to tail
         * while hugetlb_free_vmemmap is enabled.
         */
-       for (i = 1; i < MAP_LENGTH / PAGE_SIZE; i++) {
+       for (i = 1; i < maplength / pagesize; i++) {
                read(fd, &pageflags, sizeof(pageflags));
                if ((pageflags & TAIL_PAGE_FLAGS) != TAIL_PAGE_FLAGS ||
                    (pageflags & HEAD_PAGE_FLAGS) == HEAD_PAGE_FLAGS) {
        void *addr;
        unsigned long pfn;
 
-       addr = mmap(MAP_ADDR, MAP_LENGTH, PROT_READ | PROT_WRITE, MAP_FLAGS, -1, 0);
+       pagesize  = psize();
+       maplength = default_huge_page_size();
+       if (!maplength) {
+               printf("Unable to determine huge page size\n");
+               exit(1);
+       }
+
+       addr = mmap(MAP_ADDR, maplength, PROT_READ | PROT_WRITE, MAP_FLAGS, -1, 0);
        if (addr == MAP_FAILED) {
                perror("mmap");
                exit(1);
        }
 
        /* Trigger allocation of HugeTLB page. */
-       write_bytes(addr, MAP_LENGTH);
+       write_bytes(addr, maplength);
 
        pfn = virt_to_pfn(addr);
        if (pfn == -1UL) {
-               munmap(addr, MAP_LENGTH);
+               munmap(addr, maplength);
                perror("virt_to_pfn");
                exit(1);
        }
        printf("Returned address is %p whose pfn is %lx\n", addr, pfn);
 
        if (check_page_flags(pfn) < 0) {
-               munmap(addr, MAP_LENGTH);
+               munmap(addr, maplength);
                perror("check_page_flags");
                exit(1);
        }
 
        /* munmap() length of MAP_HUGETLB memory must be hugepage aligned */
-       if (munmap(addr, MAP_LENGTH)) {
+       if (munmap(addr, maplength)) {
                perror("munmap");
                exit(1);
        }