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 (3515B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ASM_GENERIC_HUGETLB_H
      3#define _ASM_GENERIC_HUGETLB_H
      4
      5#include <linux/swap.h>
      6#include <linux/swapops.h>
      7
      8static inline pte_t mk_huge_pte(struct page *page, pgprot_t pgprot)
      9{
     10	return mk_pte(page, pgprot);
     11}
     12
     13static inline unsigned long huge_pte_write(pte_t pte)
     14{
     15	return pte_write(pte);
     16}
     17
     18static inline unsigned long huge_pte_dirty(pte_t pte)
     19{
     20	return pte_dirty(pte);
     21}
     22
     23static inline pte_t huge_pte_mkwrite(pte_t pte)
     24{
     25	return pte_mkwrite(pte);
     26}
     27
     28static inline pte_t huge_pte_mkdirty(pte_t pte)
     29{
     30	return pte_mkdirty(pte);
     31}
     32
     33static inline pte_t huge_pte_modify(pte_t pte, pgprot_t newprot)
     34{
     35	return pte_modify(pte, newprot);
     36}
     37
     38static inline pte_t huge_pte_mkuffd_wp(pte_t pte)
     39{
     40	return pte_mkuffd_wp(pte);
     41}
     42
     43static inline pte_t huge_pte_clear_uffd_wp(pte_t pte)
     44{
     45	return pte_clear_uffd_wp(pte);
     46}
     47
     48static inline int huge_pte_uffd_wp(pte_t pte)
     49{
     50	return pte_uffd_wp(pte);
     51}
     52
     53#ifndef __HAVE_ARCH_HUGE_PTE_CLEAR
     54static inline void huge_pte_clear(struct mm_struct *mm, unsigned long addr,
     55		    pte_t *ptep, unsigned long sz)
     56{
     57	pte_clear(mm, addr, ptep);
     58}
     59#endif
     60
     61#ifndef __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE
     62static inline void hugetlb_free_pgd_range(struct mmu_gather *tlb,
     63		unsigned long addr, unsigned long end,
     64		unsigned long floor, unsigned long ceiling)
     65{
     66	free_pgd_range(tlb, addr, end, floor, ceiling);
     67}
     68#endif
     69
     70#ifndef __HAVE_ARCH_HUGE_SET_HUGE_PTE_AT
     71static inline void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
     72		pte_t *ptep, pte_t pte)
     73{
     74	set_pte_at(mm, addr, ptep, pte);
     75}
     76#endif
     77
     78#ifndef __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR
     79static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
     80		unsigned long addr, pte_t *ptep)
     81{
     82	return ptep_get_and_clear(mm, addr, ptep);
     83}
     84#endif
     85
     86#ifndef __HAVE_ARCH_HUGE_PTEP_CLEAR_FLUSH
     87static inline pte_t huge_ptep_clear_flush(struct vm_area_struct *vma,
     88		unsigned long addr, pte_t *ptep)
     89{
     90	return ptep_clear_flush(vma, addr, ptep);
     91}
     92#endif
     93
     94#ifndef __HAVE_ARCH_HUGE_PTE_NONE
     95static inline int huge_pte_none(pte_t pte)
     96{
     97	return pte_none(pte);
     98}
     99#endif
    100
    101/* Please refer to comments above pte_none_mostly() for the usage */
    102static inline int huge_pte_none_mostly(pte_t pte)
    103{
    104	return huge_pte_none(pte) || is_pte_marker(pte);
    105}
    106
    107#ifndef __HAVE_ARCH_HUGE_PTE_WRPROTECT
    108static inline pte_t huge_pte_wrprotect(pte_t pte)
    109{
    110	return pte_wrprotect(pte);
    111}
    112#endif
    113
    114#ifndef __HAVE_ARCH_PREPARE_HUGEPAGE_RANGE
    115static inline int prepare_hugepage_range(struct file *file,
    116		unsigned long addr, unsigned long len)
    117{
    118	struct hstate *h = hstate_file(file);
    119
    120	if (len & ~huge_page_mask(h))
    121		return -EINVAL;
    122	if (addr & ~huge_page_mask(h))
    123		return -EINVAL;
    124
    125	return 0;
    126}
    127#endif
    128
    129#ifndef __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT
    130static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
    131		unsigned long addr, pte_t *ptep)
    132{
    133	ptep_set_wrprotect(mm, addr, ptep);
    134}
    135#endif
    136
    137#ifndef __HAVE_ARCH_HUGE_PTEP_SET_ACCESS_FLAGS
    138static inline int huge_ptep_set_access_flags(struct vm_area_struct *vma,
    139		unsigned long addr, pte_t *ptep,
    140		pte_t pte, int dirty)
    141{
    142	return ptep_set_access_flags(vma, addr, ptep, pte, dirty);
    143}
    144#endif
    145
    146#ifndef __HAVE_ARCH_HUGE_PTEP_GET
    147static inline pte_t huge_ptep_get(pte_t *ptep)
    148{
    149	return ptep_get(ptep);
    150}
    151#endif
    152
    153#ifndef __HAVE_ARCH_GIGANTIC_PAGE_RUNTIME_SUPPORTED
    154static inline bool gigantic_page_runtime_supported(void)
    155{
    156	return IS_ENABLED(CONFIG_ARCH_HAS_GIGANTIC_PAGE);
    157}
    158#endif /* __HAVE_ARCH_GIGANTIC_PAGE_RUNTIME_SUPPORTED */
    159
    160#endif /* _ASM_GENERIC_HUGETLB_H */