linux-headers/arch/e2k/include/asm/paravirt/pgtable.h

213 lines
5.3 KiB
C

#ifndef __ASM_PARAVIRT_PGTABLE_H
#define __ASM_PARAVIRT_PGTABLE_H
#ifdef __KERNEL__
#include <linux/types.h>
#include <asm/paravirt/pv_ops.h>
static inline void
pv_write_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t pteval,
bool only_validate, bool to_move)
{
pv_mmu_ops.write_pte_at(mm, addr, ptep, pteval, only_validate, to_move);
}
static inline void
pv_set_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t pteval)
{
pv_write_pte_at(mm, addr, ptep, pteval, false, false);
}
static inline void
pv_validate_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t pteval)
{
pv_write_pte_at(mm, addr, ptep, pteval, true, false);
}
static inline void boot_pv_set_pte_at(unsigned long addr,
pte_t *ptep, pte_t pteval)
{
BOOT_PARAVIRT_GET_MMU_FUNC(boot_set_pte_at)(addr, ptep, pteval);
}
/* private case set pte for guest kernel address */
static inline void pv_set_pte(pte_t *ptep, pte_t pteval)
{
pv_mmu_ops.set_pte(ptep, pteval);
}
static inline void
pv_write_pmd_at(struct mm_struct *mm, unsigned long addr,
pmd_t *pmdp, pmd_t pmdval,
bool only_validate)
{
pv_mmu_ops.write_pmd_at(mm, addr, pmdp, pmdval, only_validate);
}
static inline void
pv_set_pmd_at(struct mm_struct *mm, unsigned long addr,
pmd_t *pmdp, pmd_t pmdval)
{
pv_write_pmd_at(mm, addr, pmdp, pmdval, false);
}
static inline void
pv_validate_pmd_at(struct mm_struct *mm, unsigned long addr,
pmd_t *pmdp, pmd_t pmdval)
{
pv_write_pmd_at(mm, addr, pmdp, pmdval, true);
}
static inline void
pv_write_pud_at(struct mm_struct *mm, unsigned long addr,
pud_t *pudp, pud_t pudval,
bool only_validate)
{
pv_mmu_ops.write_pud_at(mm, addr, pudp, pudval, only_validate);
}
static inline void
pv_set_pud_at(struct mm_struct *mm, unsigned long addr,
pud_t *pudp, pud_t pudval)
{
pv_write_pud_at(mm, addr, pudp, pudval, false);
}
static inline void
pv_validate_pud_at(struct mm_struct *mm, unsigned long addr,
pud_t *pudp, pud_t pudval)
{
pv_write_pud_at(mm, addr, pudp, pudval, true);
}
static inline void
pv_write_pgd_at(struct mm_struct *mm, unsigned long addr,
pgd_t *pgdp, pgd_t pgdval,
bool only_validate)
{
pv_mmu_ops.write_pgd_at(mm, addr, pgdp, pgdval, only_validate);
}
static inline void
pv_set_pgd_at(struct mm_struct *mm, unsigned long addr,
pgd_t *pgdp, pgd_t pgdval)
{
pv_write_pgd_at(mm, addr, pgdp, pgdval, false);
}
static inline void
pv_validate_pgd_at(struct mm_struct *mm, unsigned long addr,
pgd_t *pgdp, pgd_t pgdval)
{
pv_write_pgd_at(mm, addr, pgdp, pgdval, true);
}
static inline pte_t pv_ptep_get_and_clear(struct mm_struct *mm,
unsigned long addr, pte_t *ptep)
{
return pv_mmu_ops.ptep_get_and_clear(mm, addr, ptep, false);
}
static inline void pv_ptep_wrprotect_atomic(struct mm_struct *mm,
e2k_addr_t addr, pte_t *ptep)
{
if (pv_mmu_ops.ptep_wrprotect_atomic)
pv_mmu_ops.ptep_wrprotect_atomic(mm, addr, ptep);
}
static inline pte_t pv_get_pte_for_address(struct vm_area_struct *vma,
e2k_addr_t address)
{
return pv_mmu_ops.get_pte_for_address(vma, address);
}
#ifdef CONFIG_PARAVIRT_GUEST
#include <asm/paravirt/pv_info.h>
#define set_pte_not_present_at set_pte_at
static inline void
set_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t pteval)
{
pv_set_pte_at(mm, addr, ptep, pteval);
}
static inline void
validate_pte_at(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t pteval)
{
pv_validate_pte_at(mm, addr, ptep, pteval);
}
static inline void boot_set_pte_at(unsigned long addr,
pte_t *ptep, pte_t pteval)
{
boot_pv_set_pte_at(addr, ptep, pteval);
}
static inline void set_pte(pte_t *ptep, pte_t pteval)
{
pv_set_pte(ptep, pteval);
}
static inline void
set_pmd_at(struct mm_struct *mm, unsigned long addr,
pmd_t *pmdp, pmd_t pmdval)
{
pv_set_pmd_at(mm, addr, pmdp, pmdval);
}
static inline void
validate_pmd_at(struct mm_struct *mm, unsigned long addr, pmd_t *pmdp,
pmd_t pmdval)
{
pv_validate_pmd_at(mm, addr, pmdp, pmdval);
}
static inline void
set_pud_at(struct mm_struct *mm, unsigned long addr,
pud_t *pudp, pud_t pudval)
{
pv_set_pud_at(mm, addr, pudp, pudval);
}
static inline void
validate_pud_at(struct mm_struct *mm, unsigned long addr, pud_t *pudp)
{
pv_validate_pud_at(mm, addr, pudp, __pud(_PAGE_INIT_VALID));
}
static inline void
invalidate_pud_at(struct mm_struct *mm, unsigned long addr, pud_t *pudp)
{
pv_validate_pud_at(mm, addr, pudp, __pud(0));
}
static inline void
set_pgd_at(struct mm_struct *mm, unsigned long addr,
pgd_t *pgdp, pgd_t pgdval)
{
pv_set_pgd_at(mm, addr, pgdp, pgdval);
}
static inline void
validate_pgd_at(struct mm_struct *mm, unsigned long addr, pgd_t *pgdp)
{
pv_validate_pgd_at(mm, addr, pgdp, __pgd(_PAGE_INIT_VALID));
}
static inline void
invalidate_pgd_at(struct mm_struct *mm, unsigned long addr, pgd_t *pgdp)
{
pv_validate_pgd_at(mm, addr, pgdp, __pgd(0));
}
static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
pte_t *ptep)
{
return pv_ptep_get_and_clear(mm, addr, ptep);
}
static inline void ptep_wrprotect_atomic(struct mm_struct *mm,
e2k_addr_t addr, pte_t *ptep)
{
pv_ptep_wrprotect_atomic(mm, addr, ptep);
}
static inline pte_t get_pte_for_address(struct vm_area_struct *vma,
e2k_addr_t address)
{
return pv_get_pte_for_address(vma, address);
}
#endif /* CONFIG_PARAVIRT_GUEST */
#endif /* __KERNEL__ */
#endif /* __ASM_PARAVIRT_PGTABLE_H */