1a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#ifndef _ASM_SPARC64_HUGETLB_H
2a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#define _ASM_SPARC64_HUGETLB_H
3a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
4a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#include <asm/page.h>
5a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
6a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
7a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgvoid set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
8a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg		     pte_t *ptep, pte_t pte);
9a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
10a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgpte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
11a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg			      pte_t *ptep);
12a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
13a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgvoid hugetlb_prefault_arch_hook(struct mm_struct *mm);
14a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
15a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline int is_hugepage_only_range(struct mm_struct *mm,
16a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg					 unsigned long addr,
17a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg					 unsigned long len) {
18a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	return 0;
19a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
20a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
21a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg/*
22a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg * If the arch doesn't supply something else, assume that hugepage
23a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg * size aligned regions are ok without further preparation.
24a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg */
25a5516438959d90b071ff0a484ce4f3f523dc3152Andi Kleenstatic inline int prepare_hugepage_range(struct file *file,
26a5516438959d90b071ff0a484ce4f3f523dc3152Andi Kleen			unsigned long addr, unsigned long len)
27a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
28a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	if (len & ~HPAGE_MASK)
29a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg		return -EINVAL;
30a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	if (addr & ~HPAGE_MASK)
31a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg		return -EINVAL;
32a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	return 0;
33a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
34a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
3542b7772812d15b86543a23b82bd6070eef9a08b1Jan Beulichstatic inline void hugetlb_free_pgd_range(struct mmu_gather *tlb,
36a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg					  unsigned long addr, unsigned long end,
37a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg					  unsigned long floor,
38a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg					  unsigned long ceiling)
39a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
40a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	free_pgd_range(tlb, addr, end, floor, ceiling);
41a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
42a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
43a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline void huge_ptep_clear_flush(struct vm_area_struct *vma,
44a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg					 unsigned long addr, pte_t *ptep)
45a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
46a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
47a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
48a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline int huge_pte_none(pte_t pte)
49a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
50a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	return pte_none(pte);
51a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
52a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
53a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline pte_t huge_pte_wrprotect(pte_t pte)
54a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
55a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	return pte_wrprotect(pte);
56a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
57a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
58a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
59a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg					   unsigned long addr, pte_t *ptep)
60a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
61a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	ptep_set_wrprotect(mm, addr, ptep);
62a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
63a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
64a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
65a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg					     unsigned long addr, pte_t *ptep,
66a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg					     pte_t pte, int dirty)
67a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
68a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	return ptep_set_access_flags(vma, addr, ptep, pte, dirty);
69a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
70a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
71a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline pte_t huge_ptep_get(pte_t *ptep)
72a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
73a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	return *ptep;
74a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
75a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
76a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline int arch_prepare_hugepage(struct page *page)
77a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
78a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg	return 0;
79a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
80a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
81a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborgstatic inline void arch_release_hugepage(struct page *page)
82a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg{
83a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg}
84a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg
85a00736e936c2a1e9c36f22f6f3a69392eaab51f4Sam Ravnborg#endif /* _ASM_SPARC64_HUGETLB_H */
86