pgtable_uffd.h 1.6 KB

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