1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _ASM_SPARC64_HUGETLB_H 3 #define _ASM_SPARC64_HUGETLB_H 4 5 #include <asm/page.h> 6 7 #ifdef CONFIG_HUGETLB_PAGE 8 struct pud_huge_patch_entry { 9 unsigned int addr; 10 unsigned int insn; 11 }; 12 extern struct pud_huge_patch_entry __pud_huge_patch, __pud_huge_patch_end; 13 #endif 14 15 #define __HAVE_ARCH_HUGE_SET_HUGE_PTE_AT 16 void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, 17 pte_t *ptep, pte_t pte); 18 19 #define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR 20 pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, 21 pte_t *ptep); 22 23 static inline int is_hugepage_only_range(struct mm_struct *mm, 24 unsigned long addr, 25 unsigned long len) { 26 return 0; 27 } 28 29 #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH 30 static inline void huge_ptep_clear_flush(struct vm_area_struct *vma, 31 unsigned long addr, pte_t *ptep) 32 { 33 } 34 35 #define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT 36 static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, 37 unsigned long addr, pte_t *ptep) 38 { 39 pte_t old_pte = *ptep; 40 set_huge_pte_at(mm, addr, ptep, pte_wrprotect(old_pte)); 41 } 42 43 #define __HAVE_ARCH_HUGE_PTEP_SET_ACCESS_FLAGS 44 static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, 45 unsigned long addr, pte_t *ptep, 46 pte_t pte, int dirty) 47 { 48 int changed = !pte_same(*ptep, pte); 49 if (changed) { 50 set_huge_pte_at(vma->vm_mm, addr, ptep, pte); 51 flush_tlb_page(vma, addr); 52 } 53 return changed; 54 } 55 56 static inline void arch_clear_hugepage_flags(struct page *page) 57 { 58 } 59 60 #define __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE 61 void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr, 62 unsigned long end, unsigned long floor, 63 unsigned long ceiling); 64 65 #include <asm-generic/hugetlb.h> 66 67 #endif /* _ASM_SPARC64_HUGETLB_H */ 68