16d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer#ifndef _ASM_SH_HUGETLB_H
26d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer#define _ASM_SH_HUGETLB_H
36d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer
46d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer#include <asm/page.h>
56d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer
66d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer
76d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaeferstatic inline int is_hugepage_only_range(struct mm_struct *mm,
86d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer					 unsigned long addr,
96d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer					 unsigned long len) {
106d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer	return 0;
116d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer}
126d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer
136d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer/*
146d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer * If the arch doesn't supply something else, assume that hugepage
156d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer * size aligned regions are ok without further preparation.
166d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer */
17a5516438959d90b071ff0a484ce4f3f523dc3152Andi Kleenstatic inline int prepare_hugepage_range(struct file *file,
18a5516438959d90b071ff0a484ce4f3f523dc3152Andi Kleen			unsigned long addr, unsigned long len)
196d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer{
206d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer	if (len & ~HPAGE_MASK)
216d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer		return -EINVAL;
226d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer	if (addr & ~HPAGE_MASK)
236d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer		return -EINVAL;
246d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer	return 0;
256d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer}
266d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer
276d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaeferstatic inline void hugetlb_prefault_arch_hook(struct mm_struct *mm) {
286d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer}
296d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer
3042b7772812d15b86543a23b82bd6070eef9a08b1Jan Beulichstatic inline void hugetlb_free_pgd_range(struct mmu_gather *tlb,
316d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer					  unsigned long addr, unsigned long end,
326d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer					  unsigned long floor,
336d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer					  unsigned long ceiling)
346d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer{
356d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer	free_pgd_range(tlb, addr, end, floor, ceiling);
366d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer}
376d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer
386d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaeferstatic inline void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
396d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer				   pte_t *ptep, pte_t pte)
406d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer{
416d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer	set_pte_at(mm, addr, ptep, pte);
426d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer}
436d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer
446d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaeferstatic inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
456d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer					    unsigned long addr, pte_t *ptep)
466d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer{
476d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer	return ptep_get_and_clear(mm, addr, ptep);
486d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer}
496d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer
508fe627ec5b7c47b1654dff50536d9709863295a3Gerald Schaeferstatic inline void huge_ptep_clear_flush(struct vm_area_struct *vma,
518fe627ec5b7c47b1654dff50536d9709863295a3Gerald Schaefer					 unsigned long addr, pte_t *ptep)
528fe627ec5b7c47b1654dff50536d9709863295a3Gerald Schaefer{
538fe627ec5b7c47b1654dff50536d9709863295a3Gerald Schaefer}
548fe627ec5b7c47b1654dff50536d9709863295a3Gerald Schaefer
557f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaeferstatic inline int huge_pte_none(pte_t pte)
567f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer{
577f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer	return pte_none(pte);
587f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer}
597f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer
607f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaeferstatic inline pte_t huge_pte_wrprotect(pte_t pte)
617f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer{
627f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer	return pte_wrprotect(pte);
637f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer}
647f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer
657f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaeferstatic inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
667f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer					   unsigned long addr, pte_t *ptep)
677f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer{
687f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer	ptep_set_wrprotect(mm, addr, ptep);
697f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer}
707f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer
717f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaeferstatic inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
727f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer					     unsigned long addr, pte_t *ptep,
737f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer					     pte_t pte, int dirty)
747f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer{
757f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer	return ptep_set_access_flags(vma, addr, ptep, pte, dirty);
767f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer}
777f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer
787f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaeferstatic inline pte_t huge_ptep_get(pte_t *ptep)
797f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer{
807f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer	return *ptep;
817f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer}
827f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer
837f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaeferstatic inline int arch_prepare_hugepage(struct page *page)
847f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer{
857f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer	return 0;
867f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer}
877f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer
887f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaeferstatic inline void arch_release_hugepage(struct page *page)
897f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer{
907f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer}
917f2e9525ba55b1c42ad6c4a5a59d7eb7bdd9be72Gerald Schaefer
926d779079bfd1196e077bb1d0a906c37ae770b102Gerald Schaefer#endif /* _ASM_SH_HUGETLB_H */
93