@@ -79,6 +79,7 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
79
79
#define pte_write (pte ) (!!(pte_val(pte) & PTE_WRITE))
80
80
#define pte_user_exec (pte ) (!(pte_val(pte) & PTE_UXN))
81
81
#define pte_cont (pte ) (!!(pte_val(pte) & PTE_CONT))
82
+ #define pte_devmap (pte ) (!!(pte_val(pte) & PTE_DEVMAP))
82
83
83
84
#define pte_cont_addr_end (addr , end ) \
84
85
({ unsigned long __boundary = ((addr) + CONT_PTE_SIZE) & CONT_PTE_MASK; \
@@ -206,6 +207,11 @@ static inline pmd_t pmd_mkcont(pmd_t pmd)
206
207
return __pmd (pmd_val (pmd ) | PMD_SECT_CONT );
207
208
}
208
209
210
+ static inline pte_t pte_mkdevmap (pte_t pte )
211
+ {
212
+ return set_pte_bit (pte , __pgprot (PTE_DEVMAP ));
213
+ }
214
+
209
215
static inline void set_pte (pte_t * ptep , pte_t pte )
210
216
{
211
217
WRITE_ONCE (* ptep , pte );
@@ -388,6 +394,11 @@ static inline int pmd_protnone(pmd_t pmd)
388
394
389
395
#define pmd_mkhuge (pmd ) (__pmd(pmd_val(pmd) & ~PMD_TABLE_BIT))
390
396
397
+ #ifdef CONFIG_TRANSPARENT_HUGEPAGE
398
+ #define pmd_devmap (pmd ) pte_devmap(pmd_pte(pmd))
399
+ #endif
400
+ #define pmd_mkdevmap (pmd ) pte_pmd(pte_mkdevmap(pmd_pte(pmd)))
401
+
391
402
#define __pmd_to_phys (pmd ) __pte_to_phys(pmd_pte(pmd))
392
403
#define __phys_to_pmd_val (phys ) __phys_to_pte_val(phys)
393
404
#define pmd_pfn (pmd ) ((__pmd_to_phys(pmd) & PMD_MASK) >> PAGE_SHIFT)
@@ -673,6 +684,16 @@ static inline int pmdp_set_access_flags(struct vm_area_struct *vma,
673
684
{
674
685
return ptep_set_access_flags (vma , address , (pte_t * )pmdp , pmd_pte (entry ), dirty );
675
686
}
687
+
688
+ static inline int pud_devmap (pud_t pud )
689
+ {
690
+ return 0 ;
691
+ }
692
+
693
+ static inline int pgd_devmap (pgd_t pgd )
694
+ {
695
+ return 0 ;
696
+ }
676
697
#endif
677
698
678
699
/*
0 commit comments