root/arch/powerpc/include/asm/hugetlb.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. is_hugepage_only_range
  2. huge_ptep_get_and_clear
  3. huge_ptep_clear_flush
  4. arch_clear_hugepage_flags
  5. flush_hugetlb_page
  6. hugepte_offset

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _ASM_POWERPC_HUGETLB_H
   3 #define _ASM_POWERPC_HUGETLB_H
   4 
   5 #ifdef CONFIG_HUGETLB_PAGE
   6 #include <asm/page.h>
   7 
   8 #ifdef CONFIG_PPC_BOOK3S_64
   9 #include <asm/book3s/64/hugetlb.h>
  10 #elif defined(CONFIG_PPC_FSL_BOOK3E)
  11 #include <asm/nohash/hugetlb-book3e.h>
  12 #elif defined(CONFIG_PPC_8xx)
  13 #include <asm/nohash/32/hugetlb-8xx.h>
  14 #endif /* CONFIG_PPC_BOOK3S_64 */
  15 
  16 extern bool hugetlb_disabled;
  17 
  18 void hugetlbpage_init_default(void);
  19 
  20 void flush_dcache_icache_hugepage(struct page *page);
  21 
  22 int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
  23                            unsigned long len);
  24 
  25 static inline int is_hugepage_only_range(struct mm_struct *mm,
  26                                          unsigned long addr,
  27                                          unsigned long len)
  28 {
  29         if (IS_ENABLED(CONFIG_PPC_MM_SLICES) && !radix_enabled())
  30                 return slice_is_hugepage_only_range(mm, addr, len);
  31         return 0;
  32 }
  33 
  34 #define __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE
  35 void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
  36                             unsigned long end, unsigned long floor,
  37                             unsigned long ceiling);
  38 
  39 #define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR
  40 static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
  41                                             unsigned long addr, pte_t *ptep)
  42 {
  43 #ifdef CONFIG_PPC64
  44         return __pte(pte_update(mm, addr, ptep, ~0UL, 0, 1));
  45 #else
  46         return __pte(pte_update(ptep, ~0UL, 0));
  47 #endif
  48 }
  49 
  50 #define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH
  51 static inline void huge_ptep_clear_flush(struct vm_area_struct *vma,
  52                                          unsigned long addr, pte_t *ptep)
  53 {
  54         huge_ptep_get_and_clear(vma->vm_mm, addr, ptep);
  55         flush_hugetlb_page(vma, addr);
  56 }
  57 
  58 #define __HAVE_ARCH_HUGE_PTEP_SET_ACCESS_FLAGS
  59 int huge_ptep_set_access_flags(struct vm_area_struct *vma,
  60                                unsigned long addr, pte_t *ptep,
  61                                pte_t pte, int dirty);
  62 
  63 static inline void arch_clear_hugepage_flags(struct page *page)
  64 {
  65 }
  66 
  67 #include <asm-generic/hugetlb.h>
  68 
  69 #else /* ! CONFIG_HUGETLB_PAGE */
  70 static inline void flush_hugetlb_page(struct vm_area_struct *vma,
  71                                       unsigned long vmaddr)
  72 {
  73 }
  74 
  75 #define hugepd_shift(x) 0
  76 static inline pte_t *hugepte_offset(hugepd_t hpd, unsigned long addr,
  77                                     unsigned pdshift)
  78 {
  79         return NULL;
  80 }
  81 #endif /* CONFIG_HUGETLB_PAGE */
  82 
  83 #endif /* _ASM_POWERPC_HUGETLB_H */

/* [<][>][^][v][top][bottom][index][help] */