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