|
@@ -1,6 +1,8 @@
|
|
|
#ifndef _LINUX_HUGE_MM_H
|
|
|
#define _LINUX_HUGE_MM_H
|
|
|
|
|
|
+#include <linux/sched/coredump.h>
|
|
|
+
|
|
|
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,15 +87,29 @@ 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) && \
|
|
|
- !test_bit(MMF_DISABLE_THP, &(__vma)->vm_mm->flags) && \
|
|
|
- !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 (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))
|
|
@@ -105,8 +121,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);
|
|
@@ -225,7 +239,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) {}
|
|
|
|