]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - include/linux/huge_mm.h
Merge tag 'jfs-4.13' of git://github.com/kleikamp/linux-shaggy
[mirror_ubuntu-bionic-kernel.git] / include / linux / huge_mm.h
index d3b3e8fcc717d517249d73cd587541f6acee1548..ee696347f928ffc7b0aac51e3c6e1180c11265c9 100644 (file)
@@ -1,6 +1,10 @@
 #ifndef _LINUX_HUGE_MM_H
 #define _LINUX_HUGE_MM_H
 
+#include <linux/sched/coredump.h>
+
+#include <linux/fs.h> /* only for vma_is_dax() */
+
 extern int do_huge_pmd_anonymous_page(struct vm_fault *vmf);
 extern int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
                         pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr,
@@ -85,14 +89,32 @@ extern struct kobj_attribute shmem_enabled_attr;
 
 extern bool is_vma_temporary_stack(struct vm_area_struct *vma);
 
-#define transparent_hugepage_enabled(__vma)                            \
-       ((transparent_hugepage_flags &                                  \
-         (1<<TRANSPARENT_HUGEPAGE_FLAG) ||                             \
-         (transparent_hugepage_flags &                                 \
-          (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG) &&                   \
-          ((__vma)->vm_flags & VM_HUGEPAGE))) &&                       \
-        !((__vma)->vm_flags & VM_NOHUGEPAGE) &&                        \
-        !is_vma_temporary_stack(__vma))
+extern unsigned long transparent_hugepage_flags;
+
+static inline bool transparent_hugepage_enabled(struct vm_area_struct *vma)
+{
+       if (vma->vm_flags & VM_NOHUGEPAGE)
+               return false;
+
+       if (is_vma_temporary_stack(vma))
+               return false;
+
+       if (test_bit(MMF_DISABLE_THP, &vma->vm_mm->flags))
+               return false;
+
+       if (transparent_hugepage_flags & (1 << TRANSPARENT_HUGEPAGE_FLAG))
+               return true;
+
+       if (vma_is_dax(vma))
+               return true;
+
+       if (transparent_hugepage_flags &
+                               (1 << TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG))
+               return !!(vma->vm_flags & VM_HUGEPAGE);
+
+       return false;
+}
+
 #define transparent_hugepage_use_zero_page()                           \
        (transparent_hugepage_flags &                                   \
         (1<<TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG))
@@ -104,8 +126,6 @@ extern bool is_vma_temporary_stack(struct vm_area_struct *vma);
 #define transparent_hugepage_debug_cow() 0
 #endif /* CONFIG_DEBUG_VM */
 
-extern unsigned long transparent_hugepage_flags;
-
 extern unsigned long thp_get_unmapped_area(struct file *filp,
                unsigned long addr, unsigned long len, unsigned long pgoff,
                unsigned long flags);
@@ -224,7 +244,10 @@ void mm_put_huge_zero_page(struct mm_struct *mm);
 
 #define hpage_nr_pages(x) 1
 
-#define transparent_hugepage_enabled(__vma) 0
+static inline bool transparent_hugepage_enabled(struct vm_area_struct *vma)
+{
+       return false;
+}
 
 static inline void prep_transhuge_page(struct page *page) {}