0001
0002
0003
0004
0005
0006
0007 #ifndef _ASM_ARC_HUGEPAGE_H
0008 #define _ASM_ARC_HUGEPAGE_H
0009
0010 #include <linux/types.h>
0011 #include <asm-generic/pgtable-nopmd.h>
0012
0013 static inline pte_t pmd_pte(pmd_t pmd)
0014 {
0015 return __pte(pmd_val(pmd));
0016 }
0017
0018 static inline pmd_t pte_pmd(pte_t pte)
0019 {
0020 return __pmd(pte_val(pte));
0021 }
0022
0023 #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd)))
0024 #define pmd_mkwrite(pmd) pte_pmd(pte_mkwrite(pmd_pte(pmd)))
0025 #define pmd_mkdirty(pmd) pte_pmd(pte_mkdirty(pmd_pte(pmd)))
0026 #define pmd_mkold(pmd) pte_pmd(pte_mkold(pmd_pte(pmd)))
0027 #define pmd_mkyoung(pmd) pte_pmd(pte_mkyoung(pmd_pte(pmd)))
0028 #define pmd_mkhuge(pmd) pte_pmd(pte_mkhuge(pmd_pte(pmd)))
0029 #define pmd_mkinvalid(pmd) pte_pmd(pte_mknotpresent(pmd_pte(pmd)))
0030 #define pmd_mkclean(pmd) pte_pmd(pte_mkclean(pmd_pte(pmd)))
0031
0032 #define pmd_write(pmd) pte_write(pmd_pte(pmd))
0033 #define pmd_young(pmd) pte_young(pmd_pte(pmd))
0034 #define pmd_dirty(pmd) pte_dirty(pmd_pte(pmd))
0035
0036 #define mk_pmd(page, prot) pte_pmd(mk_pte(page, prot))
0037
0038 #define pmd_trans_huge(pmd) (pmd_val(pmd) & _PAGE_HW_SZ)
0039
0040 #define pfn_pmd(pfn, prot) (__pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)))
0041
0042 static inline pmd_t pmd_modify(pmd_t pmd, pgprot_t newprot)
0043 {
0044
0045
0046
0047
0048 return __pmd((pmd_val(pmd) & (_PAGE_CHG_MASK | _PAGE_HW_SZ)) | pgprot_val(newprot));
0049 }
0050
0051 static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr,
0052 pmd_t *pmdp, pmd_t pmd)
0053 {
0054 *pmdp = pmd;
0055 }
0056
0057 extern void update_mmu_cache_pmd(struct vm_area_struct *vma, unsigned long addr,
0058 pmd_t *pmd);
0059
0060 #define __HAVE_ARCH_FLUSH_PMD_TLB_RANGE
0061 extern void flush_pmd_tlb_range(struct vm_area_struct *vma, unsigned long start,
0062 unsigned long end);
0063
0064
0065 #define pmdp_establish generic_pmdp_establish
0066
0067 #endif