#include <sys/mman.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <unistd.h>
 #include <linux/kernel.h>
 
 #define KVM_UTIL_PGS_PER_HUGEPG 512
 
        /* As needed perform madvise */
        if (src_type == VM_MEM_SRC_ANONYMOUS || src_type == VM_MEM_SRC_ANONYMOUS_THP) {
-               ret = madvise(region->host_mem, npages * vm->page_size,
-                            src_type == VM_MEM_SRC_ANONYMOUS ? MADV_NOHUGEPAGE : MADV_HUGEPAGE);
-               TEST_ASSERT(ret == 0, "madvise failed,\n"
-                           "  addr: %p\n"
-                           "  length: 0x%lx\n"
-                           "  src_type: %x",
-                           region->host_mem, npages * vm->page_size, src_type);
+               struct stat statbuf;
+
+               ret = stat("/sys/kernel/mm/transparent_hugepage", &statbuf);
+               TEST_ASSERT(ret == 0 || (ret == -1 && errno == ENOENT),
+                           "stat /sys/kernel/mm/transparent_hugepage");
+
+               TEST_ASSERT(ret == 0 || src_type != VM_MEM_SRC_ANONYMOUS_THP,
+                           "VM_MEM_SRC_ANONYMOUS_THP requires THP to be configured in the host kernel");
+
+               if (ret == 0) {
+                       ret = madvise(region->host_mem, npages * vm->page_size,
+                                     src_type == VM_MEM_SRC_ANONYMOUS ? MADV_NOHUGEPAGE : MADV_HUGEPAGE);
+                       TEST_ASSERT(ret == 0, "madvise failed, addr: %p length: 0x%lx src_type: %x",
+                                   region->host_mem, npages * vm->page_size, src_type);
+               }
        }
 
        region->unused_phy_pages = sparsebit_alloc();