@@ -902,6 +902,103 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
902902#define pmdp_collapse_flush pmdp_collapse_flush
903903extern pmd_t pmdp_collapse_flush (struct vm_area_struct * vma ,
904904 unsigned long address , pmd_t * pmdp );
905+
906+ static inline pud_t pud_wrprotect (pud_t pud )
907+ {
908+ return pte_pud (pte_wrprotect (pud_pte (pud )));
909+ }
910+
911+ static inline int pud_trans_huge (pud_t pud )
912+ {
913+ return pud_leaf (pud );
914+ }
915+
916+ static inline int pud_dirty (pud_t pud )
917+ {
918+ return pte_dirty (pud_pte (pud ));
919+ }
920+
921+ static inline pud_t pud_mkyoung (pud_t pud )
922+ {
923+ return pte_pud (pte_mkyoung (pud_pte (pud )));
924+ }
925+
926+ static inline pud_t pud_mkold (pud_t pud )
927+ {
928+ return pte_pud (pte_mkold (pud_pte (pud )));
929+ }
930+
931+ static inline pud_t pud_mkdirty (pud_t pud )
932+ {
933+ return pte_pud (pte_mkdirty (pud_pte (pud )));
934+ }
935+
936+ static inline pud_t pud_mkclean (pud_t pud )
937+ {
938+ return pte_pud (pte_mkclean (pud_pte (pud )));
939+ }
940+
941+ static inline pud_t pud_mkwrite (pud_t pud )
942+ {
943+ return pte_pud (pte_mkwrite_novma (pud_pte (pud )));
944+ }
945+
946+ static inline pud_t pud_mkhuge (pud_t pud )
947+ {
948+ return pud ;
949+ }
950+
951+ static inline pud_t pud_mkdevmap (pud_t pud )
952+ {
953+ return pte_pud (pte_mkdevmap (pud_pte (pud )));
954+ }
955+
956+ static inline int pudp_set_access_flags (struct vm_area_struct * vma ,
957+ unsigned long address , pud_t * pudp ,
958+ pud_t entry , int dirty )
959+ {
960+ return ptep_set_access_flags (vma , address , (pte_t * )pudp , pud_pte (entry ), dirty );
961+ }
962+
963+ static inline int pudp_test_and_clear_young (struct vm_area_struct * vma ,
964+ unsigned long address , pud_t * pudp )
965+ {
966+ return ptep_test_and_clear_young (vma , address , (pte_t * )pudp );
967+ }
968+
969+ static inline int pud_young (pud_t pud )
970+ {
971+ return pte_young (pud_pte (pud ));
972+ }
973+
974+ static inline void update_mmu_cache_pud (struct vm_area_struct * vma ,
975+ unsigned long address , pud_t * pudp )
976+ {
977+ pte_t * ptep = (pte_t * )pudp ;
978+
979+ update_mmu_cache (vma , address , ptep );
980+ }
981+
982+ static inline pud_t pudp_establish (struct vm_area_struct * vma ,
983+ unsigned long address , pud_t * pudp , pud_t pud )
984+ {
985+ page_table_check_pud_set (vma -> vm_mm , pudp , pud );
986+ return __pud (atomic_long_xchg ((atomic_long_t * )pudp , pud_val (pud )));
987+ }
988+
989+ static inline pud_t pud_mkinvalid (pud_t pud )
990+ {
991+ return __pud (pud_val (pud ) & ~(_PAGE_PRESENT | _PAGE_PROT_NONE ));
992+ }
993+
994+ extern pud_t pudp_invalidate (struct vm_area_struct * vma , unsigned long address ,
995+ pud_t * pudp );
996+
997+ static inline pud_t pud_modify (pud_t pud , pgprot_t newprot )
998+ {
999+ return pte_pud (pte_modify (pud_pte (pud ), newprot ));
1000+ }
1001+
9051002#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
9061003
9071004/*
0 commit comments