khugepaged.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #ifndef _LINUX_KHUGEPAGED_H
  2. #define _LINUX_KHUGEPAGED_H
  3. #include <linux/sched.h> /* MMF_VM_HUGEPAGE */
  4. #ifdef CONFIG_TRANSPARENT_HUGEPAGE
  5. extern int __khugepaged_enter(struct mm_struct *mm);
  6. extern void __khugepaged_exit(struct mm_struct *mm);
  7. extern int khugepaged_enter_vma_merge(struct vm_area_struct *vma);
  8. #define khugepaged_enabled() \
  9. (transparent_hugepage_flags & \
  10. ((1<<TRANSPARENT_HUGEPAGE_FLAG) | \
  11. (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)))
  12. #define khugepaged_always() \
  13. (transparent_hugepage_flags & \
  14. (1<<TRANSPARENT_HUGEPAGE_FLAG))
  15. #define khugepaged_req_madv() \
  16. (transparent_hugepage_flags & \
  17. (1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG))
  18. #define khugepaged_defrag() \
  19. (transparent_hugepage_flags & \
  20. (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG))
  21. static inline int khugepaged_fork(struct mm_struct *mm, struct mm_struct *oldmm)
  22. {
  23. if (test_bit(MMF_VM_HUGEPAGE, &oldmm->flags))
  24. return __khugepaged_enter(mm);
  25. return 0;
  26. }
  27. static inline void khugepaged_exit(struct mm_struct *mm)
  28. {
  29. if (test_bit(MMF_VM_HUGEPAGE, &mm->flags))
  30. __khugepaged_exit(mm);
  31. }
  32. static inline int khugepaged_enter(struct vm_area_struct *vma)
  33. {
  34. if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags))
  35. if (khugepaged_always() ||
  36. (khugepaged_req_madv() &&
  37. vma->vm_flags & VM_HUGEPAGE))
  38. if (__khugepaged_enter(vma->vm_mm))
  39. return -ENOMEM;
  40. return 0;
  41. }
  42. #else /* CONFIG_TRANSPARENT_HUGEPAGE */
  43. static inline int khugepaged_fork(struct mm_struct *mm, struct mm_struct *oldmm)
  44. {
  45. return 0;
  46. }
  47. static inline void khugepaged_exit(struct mm_struct *mm)
  48. {
  49. }
  50. static inline int khugepaged_enter(struct vm_area_struct *vma)
  51. {
  52. return 0;
  53. }
  54. static inline int khugepaged_enter_vma_merge(struct vm_area_struct *vma)
  55. {
  56. return 0;
  57. }
  58. #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
  59. #endif /* _LINUX_KHUGEPAGED_H */