Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
106c992a GS |
2 | #ifndef _ASM_GENERIC_HUGETLB_H |
3 | #define _ASM_GENERIC_HUGETLB_H | |
4 | ||
5 | static inline pte_t mk_huge_pte(struct page *page, pgprot_t pgprot) | |
6 | { | |
7 | return mk_pte(page, pgprot); | |
8 | } | |
9 | ||
26794942 | 10 | static inline unsigned long huge_pte_write(pte_t pte) |
106c992a GS |
11 | { |
12 | return pte_write(pte); | |
13 | } | |
14 | ||
26794942 | 15 | static inline unsigned long huge_pte_dirty(pte_t pte) |
106c992a GS |
16 | { |
17 | return pte_dirty(pte); | |
18 | } | |
19 | ||
20 | static inline pte_t huge_pte_mkwrite(pte_t pte) | |
21 | { | |
22 | return pte_mkwrite(pte); | |
23 | } | |
24 | ||
25 | static inline pte_t huge_pte_mkdirty(pte_t pte) | |
26 | { | |
27 | return pte_mkdirty(pte); | |
28 | } | |
29 | ||
30 | static inline pte_t huge_pte_modify(pte_t pte, pgprot_t newprot) | |
31 | { | |
32 | return pte_modify(pte, newprot); | |
33 | } | |
34 | ||
d018498c | 35 | #ifndef __HAVE_ARCH_HUGE_PTE_CLEAR |
106c992a | 36 | static inline void huge_pte_clear(struct mm_struct *mm, unsigned long addr, |
9386fac3 | 37 | pte_t *ptep, unsigned long sz) |
106c992a GS |
38 | { |
39 | pte_clear(mm, addr, ptep); | |
40 | } | |
9386fac3 | 41 | #endif |
106c992a | 42 | |
1e5f50fc AG |
43 | #ifndef __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE |
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 | } | |
cea685d5 | 50 | #endif |
1e5f50fc | 51 | |
cea685d5 AG |
52 | #ifndef __HAVE_ARCH_HUGE_SET_HUGE_PTE_AT |
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 | } | |
1e5f50fc AG |
58 | #endif |
59 | ||
a4d83853 AG |
60 | #ifndef __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR |
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 | ||
fe632225 AG |
68 | #ifndef __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH |
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 | ||
cae72abc AG |
76 | #ifndef __HAVE_ARCH_HUGE_PTE_NONE |
77 | static inline int huge_pte_none(pte_t pte) | |
78 | { | |
79 | return pte_none(pte); | |
80 | } | |
81 | #endif | |
82 | ||
c4916a00 AG |
83 | #ifndef __HAVE_ARCH_HUGE_PTE_WRPROTECT |
84 | static inline pte_t huge_pte_wrprotect(pte_t pte) | |
85 | { | |
86 | return pte_wrprotect(pte); | |
87 | } | |
88 | #endif | |
89 | ||
78d6e4e8 AG |
90 | #ifndef __HAVE_ARCH_PREPARE_HUGEPAGE_RANGE |
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 | ||
106c992a | 105 | #endif /* _ASM_GENERIC_HUGETLB_H */ |