cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hugetlb.h (2299B)


      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
     16extern bool hugetlb_disabled;
     17
     18void __init hugetlbpage_init_defaultsize(void);
     19
     20int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
     21			   unsigned long len);
     22
     23static inline int is_hugepage_only_range(struct mm_struct *mm,
     24					 unsigned long addr,
     25					 unsigned long len)
     26{
     27	if (IS_ENABLED(CONFIG_PPC_64S_HASH_MMU) && !radix_enabled())
     28		return slice_is_hugepage_only_range(mm, addr, len);
     29	return 0;
     30}
     31#define is_hugepage_only_range is_hugepage_only_range
     32
     33#define __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE
     34void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
     35			    unsigned long end, unsigned long floor,
     36			    unsigned long ceiling);
     37
     38#define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR
     39static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
     40					    unsigned long addr, pte_t *ptep)
     41{
     42	return __pte(pte_update(mm, addr, ptep, ~0UL, 0, 1));
     43}
     44
     45#define __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH
     46static inline pte_t huge_ptep_clear_flush(struct vm_area_struct *vma,
     47					  unsigned long addr, pte_t *ptep)
     48{
     49	pte_t pte;
     50
     51	pte = huge_ptep_get_and_clear(vma->vm_mm, addr, ptep);
     52	flush_hugetlb_page(vma, addr);
     53	return pte;
     54}
     55
     56#define __HAVE_ARCH_HUGE_PTEP_SET_ACCESS_FLAGS
     57int huge_ptep_set_access_flags(struct vm_area_struct *vma,
     58			       unsigned long addr, pte_t *ptep,
     59			       pte_t pte, int dirty);
     60
     61void gigantic_hugetlb_cma_reserve(void) __init;
     62#include <asm-generic/hugetlb.h>
     63
     64#else /* ! CONFIG_HUGETLB_PAGE */
     65static inline void flush_hugetlb_page(struct vm_area_struct *vma,
     66				      unsigned long vmaddr)
     67{
     68}
     69
     70#define hugepd_shift(x) 0
     71static inline pte_t *hugepte_offset(hugepd_t hpd, unsigned long addr,
     72				    unsigned pdshift)
     73{
     74	return NULL;
     75}
     76
     77
     78static inline void __init gigantic_hugetlb_cma_reserve(void)
     79{
     80}
     81
     82static inline void __init hugetlbpage_init_defaultsize(void)
     83{
     84}
     85#endif /* CONFIG_HUGETLB_PAGE */
     86
     87#endif /* _ASM_POWERPC_HUGETLB_H */