at master 1.7 kB view raw
1#ifndef _ASM_GENERIC_PGTABLE_UFFD_H 2#define _ASM_GENERIC_PGTABLE_UFFD_H 3 4/* 5 * Some platforms can customize the uffd-wp bit, making it unavailable 6 * even if the architecture provides the resource. 7 * Adding this API allows architectures to add their own checks for the 8 * devices on which the kernel is running. 9 * Note: When overriding it, please make sure the 10 * CONFIG_HAVE_ARCH_USERFAULTFD_WP is part of this macro. 11 */ 12#ifndef pgtable_supports_uffd_wp 13#define pgtable_supports_uffd_wp() IS_ENABLED(CONFIG_HAVE_ARCH_USERFAULTFD_WP) 14#endif 15 16static inline bool uffd_supports_wp_marker(void) 17{ 18 return pgtable_supports_uffd_wp() && IS_ENABLED(CONFIG_PTE_MARKER_UFFD_WP); 19} 20 21#ifndef CONFIG_HAVE_ARCH_USERFAULTFD_WP 22static __always_inline int pte_uffd_wp(pte_t pte) 23{ 24 return 0; 25} 26 27static __always_inline int pmd_uffd_wp(pmd_t pmd) 28{ 29 return 0; 30} 31 32static __always_inline pte_t pte_mkuffd_wp(pte_t pte) 33{ 34 return pte; 35} 36 37static __always_inline pmd_t pmd_mkuffd_wp(pmd_t pmd) 38{ 39 return pmd; 40} 41 42static __always_inline pte_t pte_clear_uffd_wp(pte_t pte) 43{ 44 return pte; 45} 46 47static __always_inline pmd_t pmd_clear_uffd_wp(pmd_t pmd) 48{ 49 return pmd; 50} 51 52static __always_inline pte_t pte_swp_mkuffd_wp(pte_t pte) 53{ 54 return pte; 55} 56 57static __always_inline int pte_swp_uffd_wp(pte_t pte) 58{ 59 return 0; 60} 61 62static __always_inline pte_t pte_swp_clear_uffd_wp(pte_t pte) 63{ 64 return pte; 65} 66 67static inline pmd_t pmd_swp_mkuffd_wp(pmd_t pmd) 68{ 69 return pmd; 70} 71 72static inline int pmd_swp_uffd_wp(pmd_t pmd) 73{ 74 return 0; 75} 76 77static inline pmd_t pmd_swp_clear_uffd_wp(pmd_t pmd) 78{ 79 return pmd; 80} 81#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_WP */ 82 83#endif /* _ASM_GENERIC_PGTABLE_UFFD_H */