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 8struct pud_huge_patch_entry { 9 unsigned int addr; 10 unsigned int insn; 11}; 12extern struct pud_huge_patch_entry __pud_huge_patch, __pud_huge_patch_end; 13#endif 14 15#define __HAVE_ARCH_HUGE_SET_HUGE_PTE_AT 16void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, 17 pte_t *ptep, pte_t pte, unsigned long sz); 18void __set_huge_pte_at(struct mm_struct *mm, unsigned long addr, 19 pte_t *ptep, pte_t pte); 20 21#define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR 22pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, 23 pte_t *ptep); 24 25#define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH 26static inline pte_t huge_ptep_clear_flush(struct vm_area_struct *vma, 27 unsigned long addr, pte_t *ptep) 28{ 29 return *ptep; 30} 31 32#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT 33static inline void huge_ptep_set_wrprotect(struct mm_struct *mm, 34 unsigned long addr, pte_t *ptep) 35{ 36 pte_t old_pte = *ptep; 37 __set_huge_pte_at(mm, addr, ptep, pte_wrprotect(old_pte)); 38} 39 40#define __HAVE_ARCH_HUGE_PTEP_SET_ACCESS_FLAGS 41static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma, 42 unsigned long addr, pte_t *ptep, 43 pte_t pte, int dirty) 44{ 45 int changed = !pte_same(*ptep, pte); 46 if (changed) { 47 __set_huge_pte_at(vma->vm_mm, addr, ptep, pte); 48 flush_tlb_page(vma, addr); 49 } 50 return changed; 51} 52 53#define __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE 54void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr, 55 unsigned long end, unsigned long floor, 56 unsigned long ceiling); 57 58#include <asm-generic/hugetlb.h> 59 60#endif /* _ASM_SPARC64_HUGETLB_H */ 61