hugetlb.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _ASM_POWERPC_HUGETLB_H
  3. #define _ASM_POWERPC_HUGETLB_H
  4. #ifdef CONFIG_HUGETLB_PAGE
  5. #include <asm/page.h>
  6. #ifdef CONFIG_PPC_BOOK3S_64
  7. #include <asm/book3s/64/hugetlb.h>
  8. #elif defined(CONFIG_PPC_E500)
  9. #include <asm/nohash/hugetlb-e500.h>
  10. #elif defined(CONFIG_PPC_8xx)
  11. #include <asm/nohash/32/hugetlb-8xx.h>
  12. #endif /* CONFIG_PPC_BOOK3S_64 */
  13. extern bool hugetlb_disabled;
  14. void __init hugetlbpage_init_defaultsize(void);
  15. int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
  16. unsigned long len);
  17. static inline int is_hugepage_only_range(struct mm_struct *mm,
  18. unsigned long addr,
  19. unsigned long len)
  20. {
  21. if (IS_ENABLED(CONFIG_PPC_64S_HASH_MMU) && !radix_enabled())
  22. return slice_is_hugepage_only_range(mm, addr, len);
  23. return 0;
  24. }
  25. #define is_hugepage_only_range is_hugepage_only_range
  26. #define __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE
  27. void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
  28. unsigned long end, unsigned long floor,
  29. unsigned long ceiling);
  30. #define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR
  31. static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
  32. unsigned long addr, pte_t *ptep)
  33. {
  34. return __pte(pte_update(mm, addr, ptep, ~0UL, 0, 1));
  35. }
  36. #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH
  37. static inline pte_t huge_ptep_clear_flush(struct vm_area_struct *vma,
  38. unsigned long addr, pte_t *ptep)
  39. {
  40. pte_t pte;
  41. pte = huge_ptep_get_and_clear(vma->vm_mm, addr, ptep);
  42. flush_hugetlb_page(vma, addr);
  43. return pte;
  44. }
  45. #define __HAVE_ARCH_HUGE_PTEP_SET_ACCESS_FLAGS
  46. int huge_ptep_set_access_flags(struct vm_area_struct *vma,
  47. unsigned long addr, pte_t *ptep,
  48. pte_t pte, int dirty);
  49. void gigantic_hugetlb_cma_reserve(void) __init;
  50. #include <asm-generic/hugetlb.h>
  51. #else /* ! CONFIG_HUGETLB_PAGE */
  52. static inline void flush_hugetlb_page(struct vm_area_struct *vma,
  53. unsigned long vmaddr)
  54. {
  55. }
  56. #define hugepd_shift(x) 0
  57. static inline pte_t *hugepte_offset(hugepd_t hpd, unsigned long addr,
  58. unsigned pdshift)
  59. {
  60. return NULL;
  61. }
  62. static inline void __init gigantic_hugetlb_cma_reserve(void)
  63. {
  64. }
  65. static inline void __init hugetlbpage_init_defaultsize(void)
  66. {
  67. }
  68. #endif /* CONFIG_HUGETLB_PAGE */
  69. #endif /* _ASM_POWERPC_HUGETLB_H */