|
@@ -741,6 +741,8 @@ static inline bool pte_user(pte_t pte)
|
|
|
*/
|
|
|
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val((pte)) & ~_PAGE_PTE })
|
|
|
#define __swp_entry_to_pte(x) __pte((x).val | _PAGE_PTE)
|
|
|
+#define __pmd_to_swp_entry(pmd) (__pte_to_swp_entry(pmd_pte(pmd)))
|
|
|
+#define __swp_entry_to_pmd(x) (pte_pmd(__swp_entry_to_pte(x)))
|
|
|
|
|
|
#ifdef CONFIG_MEM_SOFT_DIRTY
|
|
|
#define _PAGE_SWP_SOFT_DIRTY (1UL << (SWP_TYPE_BITS + _PAGE_BIT_SWAP_TYPE))
|
|
@@ -1091,6 +1093,12 @@ static inline pte_t *pmdp_ptep(pmd_t *pmd)
|
|
|
#define pmd_soft_dirty(pmd) pte_soft_dirty(pmd_pte(pmd))
|
|
|
#define pmd_mksoft_dirty(pmd) pte_pmd(pte_mksoft_dirty(pmd_pte(pmd)))
|
|
|
#define pmd_clear_soft_dirty(pmd) pte_pmd(pte_clear_soft_dirty(pmd_pte(pmd)))
|
|
|
+
|
|
|
+#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
|
|
|
+#define pmd_swp_mksoft_dirty(pmd) pte_pmd(pte_swp_mksoft_dirty(pmd_pte(pmd)))
|
|
|
+#define pmd_swp_soft_dirty(pmd) pte_swp_soft_dirty(pmd_pte(pmd))
|
|
|
+#define pmd_swp_clear_soft_dirty(pmd) pte_pmd(pte_swp_clear_soft_dirty(pmd_pte(pmd)))
|
|
|
+#endif
|
|
|
#endif /* CONFIG_HAVE_ARCH_SOFT_DIRTY */
|
|
|
|
|
|
#ifdef CONFIG_NUMA_BALANCING
|