1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef _ASM_GENERIC_HUGETLB_H
3  #define _ASM_GENERIC_HUGETLB_H
4  
mk_huge_pte(struct page * page,pgprot_t pgprot)5  static inline pte_t mk_huge_pte(struct page *page, pgprot_t pgprot)
6  {
7  	return mk_pte(page, pgprot);
8  }
9  
huge_pte_write(pte_t pte)10  static inline unsigned long huge_pte_write(pte_t pte)
11  {
12  	return pte_write(pte);
13  }
14  
huge_pte_dirty(pte_t pte)15  static inline unsigned long huge_pte_dirty(pte_t pte)
16  {
17  	return pte_dirty(pte);
18  }
19  
huge_pte_mkwrite(pte_t pte)20  static inline pte_t huge_pte_mkwrite(pte_t pte)
21  {
22  	return pte_mkwrite(pte);
23  }
24  
huge_pte_mkdirty(pte_t pte)25  static inline pte_t huge_pte_mkdirty(pte_t pte)
26  {
27  	return pte_mkdirty(pte);
28  }
29  
huge_pte_modify(pte_t pte,pgprot_t newprot)30  static inline pte_t huge_pte_modify(pte_t pte, pgprot_t newprot)
31  {
32  	return pte_modify(pte, newprot);
33  }
34  
35  #ifndef __HAVE_ARCH_HUGE_PTE_CLEAR
huge_pte_clear(struct mm_struct * mm,unsigned long addr,pte_t * ptep,unsigned long sz)36  static inline void huge_pte_clear(struct mm_struct *mm, unsigned long addr,
37  		    pte_t *ptep, unsigned long sz)
38  {
39  	pte_clear(mm, addr, ptep);
40  }
41  #endif
42  
43  #ifndef __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE
hugetlb_free_pgd_range(struct mmu_gather * tlb,unsigned long addr,unsigned long end,unsigned long floor,unsigned long ceiling)44  static inline void hugetlb_free_pgd_range(struct mmu_gather *tlb,
45  		unsigned long addr, unsigned long end,
46  		unsigned long floor, unsigned long ceiling)
47  {
48  	free_pgd_range(tlb, addr, end, floor, ceiling);
49  }
50  #endif
51  
52  #ifndef __HAVE_ARCH_HUGE_SET_HUGE_PTE_AT
set_huge_pte_at(struct mm_struct * mm,unsigned long addr,pte_t * ptep,pte_t pte)53  static inline void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
54  		pte_t *ptep, pte_t pte)
55  {
56  	set_pte_at(mm, addr, ptep, pte);
57  }
58  #endif
59  
60  #ifndef __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR
huge_ptep_get_and_clear(struct mm_struct * mm,unsigned long addr,pte_t * ptep)61  static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
62  		unsigned long addr, pte_t *ptep)
63  {
64  	return ptep_get_and_clear(mm, addr, ptep);
65  }
66  #endif
67  
68  #ifndef __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH
huge_ptep_clear_flush(struct vm_area_struct * vma,unsigned long addr,pte_t * ptep)69  static inline void huge_ptep_clear_flush(struct vm_area_struct *vma,
70  		unsigned long addr, pte_t *ptep)
71  {
72  	ptep_clear_flush(vma, addr, ptep);
73  }
74  #endif
75  
76  #ifndef __HAVE_ARCH_HUGE_PTE_NONE
huge_pte_none(pte_t pte)77  static inline int huge_pte_none(pte_t pte)
78  {
79  	return pte_none(pte);
80  }
81  #endif
82  
83  #ifndef __HAVE_ARCH_HUGE_PTE_WRPROTECT
huge_pte_wrprotect(pte_t pte)84  static inline pte_t huge_pte_wrprotect(pte_t pte)
85  {
86  	return pte_wrprotect(pte);
87  }
88  #endif
89  
90  #ifndef __HAVE_ARCH_PREPARE_HUGEPAGE_RANGE
prepare_hugepage_range(struct file * file,unsigned long addr,unsigned long len)91  static inline int prepare_hugepage_range(struct file *file,
92  		unsigned long addr, unsigned long len)
93  {
94  	struct hstate *h = hstate_file(file);
95  
96  	if (len & ~huge_page_mask(h))
97  		return -EINVAL;
98  	if (addr & ~huge_page_mask(h))
99  		return -EINVAL;
100  
101  	return 0;
102  }
103  #endif
104  
105  #ifndef __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT
huge_ptep_set_wrprotect(struct mm_struct * mm,unsigned long addr,pte_t * ptep)106  static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
107  		unsigned long addr, pte_t *ptep)
108  {
109  	ptep_set_wrprotect(mm, addr, ptep);
110  }
111  #endif
112  
113  #ifndef __HAVE_ARCH_HUGE_PTEP_SET_ACCESS_FLAGS
huge_ptep_set_access_flags(struct vm_area_struct * vma,unsigned long addr,pte_t * ptep,pte_t pte,int dirty)114  static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
115  		unsigned long addr, pte_t *ptep,
116  		pte_t pte, int dirty)
117  {
118  	return ptep_set_access_flags(vma, addr, ptep, pte, dirty);
119  }
120  #endif
121  
122  #ifndef __HAVE_ARCH_HUGE_PTEP_GET
huge_ptep_get(pte_t * ptep)123  static inline pte_t huge_ptep_get(pte_t *ptep)
124  {
125  	return ptep_get(ptep);
126  }
127  #endif
128  
129  #ifndef __HAVE_ARCH_GIGANTIC_PAGE_RUNTIME_SUPPORTED
gigantic_page_runtime_supported(void)130  static inline bool gigantic_page_runtime_supported(void)
131  {
132  	return IS_ENABLED(CONFIG_ARCH_HAS_GIGANTIC_PAGE);
133  }
134  #endif /* __HAVE_ARCH_GIGANTIC_PAGE_RUNTIME_SUPPORTED */
135  
136  #endif /* _ASM_GENERIC_HUGETLB_H */
137