linux/arch/sparc/include/asm/hugetlb.h
<<
>>
Prefs
   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#include <asm-generic/hugetlb.h>
   7
   8#ifdef CONFIG_HUGETLB_PAGE
   9struct pud_huge_patch_entry {
  10        unsigned int addr;
  11        unsigned int insn;
  12};
  13extern struct pud_huge_patch_entry __pud_huge_patch, __pud_huge_patch_end;
  14#endif
  15
  16void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
  17                     pte_t *ptep, pte_t pte);
  18
  19pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
  20                              pte_t *ptep);
  21
  22static inline int is_hugepage_only_range(struct mm_struct *mm,
  23                                         unsigned long addr,
  24                                         unsigned long len) {
  25        return 0;
  26}
  27
  28/*
  29 * If the arch doesn't supply something else, assume that hugepage
  30 * size aligned regions are ok without further preparation.
  31 */
  32static inline int prepare_hugepage_range(struct file *file,
  33                        unsigned long addr, unsigned long len)
  34{
  35        struct hstate *h = hstate_file(file);
  36
  37        if (len & ~huge_page_mask(h))
  38                return -EINVAL;
  39        if (addr & ~huge_page_mask(h))
  40                return -EINVAL;
  41        return 0;
  42}
  43
  44static inline void huge_ptep_clear_flush(struct vm_area_struct *vma,
  45                                         unsigned long addr, pte_t *ptep)
  46{
  47}
  48
  49static inline int huge_pte_none(pte_t pte)
  50{
  51        return pte_none(pte);
  52}
  53
  54static inline pte_t huge_pte_wrprotect(pte_t pte)
  55{
  56        return pte_wrprotect(pte);
  57}
  58
  59static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
  60                                           unsigned long addr, pte_t *ptep)
  61{
  62        pte_t old_pte = *ptep;
  63        set_huge_pte_at(mm, addr, ptep, pte_wrprotect(old_pte));
  64}
  65
  66static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
  67                                             unsigned long addr, pte_t *ptep,
  68                                             pte_t pte, int dirty)
  69{
  70        int changed = !pte_same(*ptep, pte);
  71        if (changed) {
  72                set_huge_pte_at(vma->vm_mm, addr, ptep, pte);
  73                flush_tlb_page(vma, addr);
  74        }
  75        return changed;
  76}
  77
  78static inline pte_t huge_ptep_get(pte_t *ptep)
  79{
  80        return *ptep;
  81}
  82
  83static inline void arch_clear_hugepage_flags(struct page *page)
  84{
  85}
  86
  87void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
  88                            unsigned long end, unsigned long floor,
  89                            unsigned long ceiling);
  90
  91#endif /* _ASM_SPARC64_HUGETLB_H */
  92