xref: /openbmc/linux/arch/parisc/include/asm/hugetlb.h (revision a4d83853)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2736d2169SHelge Deller #ifndef _ASM_PARISC64_HUGETLB_H
3736d2169SHelge Deller #define _ASM_PARISC64_HUGETLB_H
4736d2169SHelge Deller 
5736d2169SHelge Deller #include <asm/page.h>
6736d2169SHelge Deller 
7cea685d5SAlexandre Ghiti #define __HAVE_ARCH_HUGE_SET_HUGE_PTE_AT
8736d2169SHelge Deller void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
9736d2169SHelge Deller 		     pte_t *ptep, pte_t pte);
10736d2169SHelge Deller 
11a4d83853SAlexandre Ghiti #define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR
12736d2169SHelge Deller pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
13736d2169SHelge Deller 			      pte_t *ptep);
14736d2169SHelge Deller 
15736d2169SHelge Deller static inline int is_hugepage_only_range(struct mm_struct *mm,
16736d2169SHelge Deller 					 unsigned long addr,
17736d2169SHelge Deller 					 unsigned long len) {
18736d2169SHelge Deller 	return 0;
19736d2169SHelge Deller }
20736d2169SHelge Deller 
21736d2169SHelge Deller /*
22736d2169SHelge Deller  * If the arch doesn't supply something else, assume that hugepage
23736d2169SHelge Deller  * size aligned regions are ok without further preparation.
24736d2169SHelge Deller  */
25736d2169SHelge Deller static inline int prepare_hugepage_range(struct file *file,
26736d2169SHelge Deller 			unsigned long addr, unsigned long len)
27736d2169SHelge Deller {
28736d2169SHelge Deller 	if (len & ~HPAGE_MASK)
29736d2169SHelge Deller 		return -EINVAL;
30736d2169SHelge Deller 	if (addr & ~HPAGE_MASK)
31736d2169SHelge Deller 		return -EINVAL;
32736d2169SHelge Deller 	return 0;
33736d2169SHelge Deller }
34736d2169SHelge Deller 
35736d2169SHelge Deller static inline void huge_ptep_clear_flush(struct vm_area_struct *vma,
36736d2169SHelge Deller 					 unsigned long addr, pte_t *ptep)
37736d2169SHelge Deller {
38736d2169SHelge Deller }
39736d2169SHelge Deller 
40736d2169SHelge Deller static inline int huge_pte_none(pte_t pte)
41736d2169SHelge Deller {
42736d2169SHelge Deller 	return pte_none(pte);
43736d2169SHelge Deller }
44736d2169SHelge Deller 
45736d2169SHelge Deller static inline pte_t huge_pte_wrprotect(pte_t pte)
46736d2169SHelge Deller {
47736d2169SHelge Deller 	return pte_wrprotect(pte);
48736d2169SHelge Deller }
49736d2169SHelge Deller 
50b0e55131SHelge Deller void huge_ptep_set_wrprotect(struct mm_struct *mm,
51b0e55131SHelge Deller 					   unsigned long addr, pte_t *ptep);
52736d2169SHelge Deller 
53b0e55131SHelge Deller int huge_ptep_set_access_flags(struct vm_area_struct *vma,
54736d2169SHelge Deller 					     unsigned long addr, pte_t *ptep,
55b0e55131SHelge Deller 					     pte_t pte, int dirty);
56736d2169SHelge Deller 
57736d2169SHelge Deller static inline pte_t huge_ptep_get(pte_t *ptep)
58736d2169SHelge Deller {
59736d2169SHelge Deller 	return *ptep;
60736d2169SHelge Deller }
61736d2169SHelge Deller 
62736d2169SHelge Deller static inline void arch_clear_hugepage_flags(struct page *page)
63736d2169SHelge Deller {
64736d2169SHelge Deller }
65736d2169SHelge Deller 
661e5f50fcSAlexandre Ghiti #include <asm-generic/hugetlb.h>
671e5f50fcSAlexandre Ghiti 
68736d2169SHelge Deller #endif /* _ASM_PARISC64_HUGETLB_H */
69