}
 
 enum transparent_hugepage_flag {
+       TRANSPARENT_HUGEPAGE_NEVER_DAX,
        TRANSPARENT_HUGEPAGE_FLAG,
        TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG,
        TRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG,
  */
 static inline bool __transparent_hugepage_enabled(struct vm_area_struct *vma)
 {
+
+       /*
+        * If the hardware/firmware marked hugepage support disabled.
+        */
+       if (transparent_hugepage_flags & (1 << TRANSPARENT_HUGEPAGE_NEVER_DAX))
+               return false;
+
        if (vma->vm_flags & VM_NOHUGEPAGE)
                return false;
 
 
        if (transparent_hugepage_flags & (1 << TRANSPARENT_HUGEPAGE_FLAG))
                return true;
-       /*
-        * For dax vmas, try to always use hugepage mappings. If the kernel does
-        * not support hugepages, fsdax mappings will fallback to PAGE_SIZE
-        * mappings, and device-dax namespaces, that try to guarantee a given
-        * mapping size, will fail to enable
-        */
+
        if (vma_is_dax(vma))
                return true;
 
 
        struct kobject *hugepage_kobj;
 
        if (!has_transparent_hugepage()) {
-               transparent_hugepage_flags = 0;
+               /*
+                * Hardware doesn't support hugepages, hence disable
+                * DAX PMD support.
+                */
+               transparent_hugepage_flags = 1 << TRANSPARENT_HUGEPAGE_NEVER_DAX;
                return -EINVAL;
        }