mirror of
https://github.com/torvalds/linux.git
synced 2026-09-13 23:50:02 +02:00
mm: rename uffd-wp PTE bit macros to uffd
The uffd-wp PTE bit is about to gain a second consumer: userfaultfd RWP
will use the same bit to mark access-tracking PTEs, distinct from
mprotect(PROT_NONE) or NUMA-hinting PTEs. WP vs RWP semantics come from
the VMA flag; the bit is just "uffd has claimed this entry." Drop the
"_wp" suffix from the arch-private bit macros so they reflect that.
x86: _PAGE_BIT_UFFD_WP -> _PAGE_BIT_UFFD
_PAGE_UFFD_WP -> _PAGE_UFFD
_PAGE_SWP_UFFD_WP -> _PAGE_SWP_UFFD
arm64: PTE_UFFD_WP -> PTE_UFFD
PTE_SWP_UFFD_WP -> PTE_SWP_UFFD
riscv: _PAGE_UFFD_WP -> _PAGE_UFFD
_PAGE_SWP_UFFD_WP -> _PAGE_SWP_UFFD
Pure mechanical rename -- no behavior change.
Link: https://lore.kernel.org/20260708111417.173443-3-kirill@shutemov.name
Signed-off-by: Kiryl Shutsemau <kas@kernel.org>
Assisted-by: Claude:claude-opus-4-6
Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Reviewed-by: SeongJae Park <sj@kernel.org>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: David Hildenbrand <david@kernel.org>
Cc: James Houghton <jthoughton@google.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Liam Howlett <liam@infradead.org>
Cc: Lorenzo Stoakes <ljs@kernel.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Peter Xu <peterx@redhat.com>
Cc: Sean Christopherson <seanjc@google.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@kernel.org>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
c6f11553c0
commit
2bd507795e
|
|
@ -28,11 +28,11 @@
|
|||
#define PTE_PRESENT_VALID_KERNEL (PTE_VALID | PTE_MAYBE_NG)
|
||||
|
||||
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
|
||||
#define PTE_UFFD_WP (_AT(pteval_t, 1) << 58) /* uffd-wp tracking */
|
||||
#define PTE_SWP_UFFD_WP (_AT(pteval_t, 1) << 3) /* only for swp ptes */
|
||||
#define PTE_UFFD (_AT(pteval_t, 1) << 58) /* userfaultfd tracking */
|
||||
#define PTE_SWP_UFFD (_AT(pteval_t, 1) << 3) /* only for swp ptes */
|
||||
#else
|
||||
#define PTE_UFFD_WP (_AT(pteval_t, 0))
|
||||
#define PTE_SWP_UFFD_WP (_AT(pteval_t, 0))
|
||||
#define PTE_UFFD (_AT(pteval_t, 0))
|
||||
#define PTE_SWP_UFFD (_AT(pteval_t, 0))
|
||||
#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_WP */
|
||||
|
||||
#define _PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_SHARED)
|
||||
|
|
|
|||
|
|
@ -343,17 +343,17 @@ static inline pmd_t pmd_mknoncont(pmd_t pmd)
|
|||
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
|
||||
static inline int pte_uffd_wp(pte_t pte)
|
||||
{
|
||||
return !!(pte_val(pte) & PTE_UFFD_WP);
|
||||
return !!(pte_val(pte) & PTE_UFFD);
|
||||
}
|
||||
|
||||
static inline pte_t pte_mkuffd_wp(pte_t pte)
|
||||
{
|
||||
return pte_wrprotect(set_pte_bit(pte, __pgprot(PTE_UFFD_WP)));
|
||||
return pte_wrprotect(set_pte_bit(pte, __pgprot(PTE_UFFD)));
|
||||
}
|
||||
|
||||
static inline pte_t pte_clear_uffd_wp(pte_t pte)
|
||||
{
|
||||
return clear_pte_bit(pte, __pgprot(PTE_UFFD_WP));
|
||||
return clear_pte_bit(pte, __pgprot(PTE_UFFD));
|
||||
}
|
||||
#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_WP */
|
||||
|
||||
|
|
@ -539,17 +539,17 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte)
|
|||
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
|
||||
static inline pte_t pte_swp_mkuffd_wp(pte_t pte)
|
||||
{
|
||||
return set_pte_bit(pte, __pgprot(PTE_SWP_UFFD_WP));
|
||||
return set_pte_bit(pte, __pgprot(PTE_SWP_UFFD));
|
||||
}
|
||||
|
||||
static inline int pte_swp_uffd_wp(pte_t pte)
|
||||
{
|
||||
return !!(pte_val(pte) & PTE_SWP_UFFD_WP);
|
||||
return !!(pte_val(pte) & PTE_SWP_UFFD);
|
||||
}
|
||||
|
||||
static inline pte_t pte_swp_clear_uffd_wp(pte_t pte)
|
||||
{
|
||||
return clear_pte_bit(pte, __pgprot(PTE_SWP_UFFD_WP));
|
||||
return clear_pte_bit(pte, __pgprot(PTE_SWP_UFFD));
|
||||
}
|
||||
#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_WP */
|
||||
|
||||
|
|
|
|||
|
|
@ -40,20 +40,20 @@
|
|||
|
||||
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
|
||||
|
||||
/* ext_svrsw60t59b: Bit(60) for uffd-wp tracking */
|
||||
#define _PAGE_UFFD_WP \
|
||||
/* ext_svrsw60t59b: Bit(60) for userfaultfd tracking */
|
||||
#define _PAGE_UFFD \
|
||||
((riscv_has_extension_unlikely(RISCV_ISA_EXT_SVRSW60T59B)) ? \
|
||||
(1UL << 60) : 0)
|
||||
/*
|
||||
* Bit 4 is not involved into swap entry computation, so we
|
||||
* can borrow it for swap page uffd-wp tracking.
|
||||
* can borrow it for swap page userfaultfd tracking.
|
||||
*/
|
||||
#define _PAGE_SWP_UFFD_WP \
|
||||
#define _PAGE_SWP_UFFD \
|
||||
((riscv_has_extension_unlikely(RISCV_ISA_EXT_SVRSW60T59B)) ? \
|
||||
_PAGE_USER : 0)
|
||||
#else
|
||||
#define _PAGE_UFFD_WP 0
|
||||
#define _PAGE_SWP_UFFD_WP 0
|
||||
#define _PAGE_UFFD 0
|
||||
#define _PAGE_SWP_UFFD 0
|
||||
#endif
|
||||
|
||||
#define _PAGE_TABLE _PAGE_PRESENT
|
||||
|
|
|
|||
|
|
@ -415,32 +415,32 @@ static inline pte_t pte_wrprotect(pte_t pte)
|
|||
|
||||
static inline bool pte_uffd_wp(pte_t pte)
|
||||
{
|
||||
return !!(pte_val(pte) & _PAGE_UFFD_WP);
|
||||
return !!(pte_val(pte) & _PAGE_UFFD);
|
||||
}
|
||||
|
||||
static inline pte_t pte_mkuffd_wp(pte_t pte)
|
||||
{
|
||||
return pte_wrprotect(__pte(pte_val(pte) | _PAGE_UFFD_WP));
|
||||
return pte_wrprotect(__pte(pte_val(pte) | _PAGE_UFFD));
|
||||
}
|
||||
|
||||
static inline pte_t pte_clear_uffd_wp(pte_t pte)
|
||||
{
|
||||
return __pte(pte_val(pte) & ~(_PAGE_UFFD_WP));
|
||||
return __pte(pte_val(pte) & ~(_PAGE_UFFD));
|
||||
}
|
||||
|
||||
static inline bool pte_swp_uffd_wp(pte_t pte)
|
||||
{
|
||||
return !!(pte_val(pte) & _PAGE_SWP_UFFD_WP);
|
||||
return !!(pte_val(pte) & _PAGE_SWP_UFFD);
|
||||
}
|
||||
|
||||
static inline pte_t pte_swp_mkuffd_wp(pte_t pte)
|
||||
{
|
||||
return __pte(pte_val(pte) | _PAGE_SWP_UFFD_WP);
|
||||
return __pte(pte_val(pte) | _PAGE_SWP_UFFD);
|
||||
}
|
||||
|
||||
static inline pte_t pte_swp_clear_uffd_wp(pte_t pte)
|
||||
{
|
||||
return __pte(pte_val(pte) & ~(_PAGE_SWP_UFFD_WP));
|
||||
return __pte(pte_val(pte) & ~(_PAGE_SWP_UFFD));
|
||||
}
|
||||
#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_WP */
|
||||
|
||||
|
|
@ -1167,7 +1167,7 @@ static inline pud_t pud_modify(pud_t pud, pgprot_t newprot)
|
|||
* bit 0: _PAGE_PRESENT (zero)
|
||||
* bit 1 to 2: (zero)
|
||||
* bit 3: _PAGE_SWP_SOFT_DIRTY
|
||||
* bit 4: _PAGE_SWP_UFFD_WP
|
||||
* bit 4: _PAGE_SWP_UFFD
|
||||
* bit 5: _PAGE_PROT_NONE (zero)
|
||||
* bit 6: exclusive marker
|
||||
* bits 7 to 11: swap type
|
||||
|
|
|
|||
|
|
@ -413,17 +413,17 @@ static inline pte_t pte_wrprotect(pte_t pte)
|
|||
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
|
||||
static inline int pte_uffd_wp(pte_t pte)
|
||||
{
|
||||
return pte_flags(pte) & _PAGE_UFFD_WP;
|
||||
return pte_flags(pte) & _PAGE_UFFD;
|
||||
}
|
||||
|
||||
static inline pte_t pte_mkuffd_wp(pte_t pte)
|
||||
{
|
||||
return pte_wrprotect(pte_set_flags(pte, _PAGE_UFFD_WP));
|
||||
return pte_wrprotect(pte_set_flags(pte, _PAGE_UFFD));
|
||||
}
|
||||
|
||||
static inline pte_t pte_clear_uffd_wp(pte_t pte)
|
||||
{
|
||||
return pte_clear_flags(pte, _PAGE_UFFD_WP);
|
||||
return pte_clear_flags(pte, _PAGE_UFFD);
|
||||
}
|
||||
#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_WP */
|
||||
|
||||
|
|
@ -528,17 +528,17 @@ static inline pmd_t pmd_wrprotect(pmd_t pmd)
|
|||
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
|
||||
static inline int pmd_uffd_wp(pmd_t pmd)
|
||||
{
|
||||
return pmd_flags(pmd) & _PAGE_UFFD_WP;
|
||||
return pmd_flags(pmd) & _PAGE_UFFD;
|
||||
}
|
||||
|
||||
static inline pmd_t pmd_mkuffd_wp(pmd_t pmd)
|
||||
{
|
||||
return pmd_wrprotect(pmd_set_flags(pmd, _PAGE_UFFD_WP));
|
||||
return pmd_wrprotect(pmd_set_flags(pmd, _PAGE_UFFD));
|
||||
}
|
||||
|
||||
static inline pmd_t pmd_clear_uffd_wp(pmd_t pmd)
|
||||
{
|
||||
return pmd_clear_flags(pmd, _PAGE_UFFD_WP);
|
||||
return pmd_clear_flags(pmd, _PAGE_UFFD);
|
||||
}
|
||||
#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_WP */
|
||||
|
||||
|
|
@ -1562,32 +1562,32 @@ static inline pmd_t pmd_swp_clear_soft_dirty(pmd_t pmd)
|
|||
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
|
||||
static inline pte_t pte_swp_mkuffd_wp(pte_t pte)
|
||||
{
|
||||
return pte_set_flags(pte, _PAGE_SWP_UFFD_WP);
|
||||
return pte_set_flags(pte, _PAGE_SWP_UFFD);
|
||||
}
|
||||
|
||||
static inline int pte_swp_uffd_wp(pte_t pte)
|
||||
{
|
||||
return pte_flags(pte) & _PAGE_SWP_UFFD_WP;
|
||||
return pte_flags(pte) & _PAGE_SWP_UFFD;
|
||||
}
|
||||
|
||||
static inline pte_t pte_swp_clear_uffd_wp(pte_t pte)
|
||||
{
|
||||
return pte_clear_flags(pte, _PAGE_SWP_UFFD_WP);
|
||||
return pte_clear_flags(pte, _PAGE_SWP_UFFD);
|
||||
}
|
||||
|
||||
static inline pmd_t pmd_swp_mkuffd_wp(pmd_t pmd)
|
||||
{
|
||||
return pmd_set_flags(pmd, _PAGE_SWP_UFFD_WP);
|
||||
return pmd_set_flags(pmd, _PAGE_SWP_UFFD);
|
||||
}
|
||||
|
||||
static inline int pmd_swp_uffd_wp(pmd_t pmd)
|
||||
{
|
||||
return pmd_flags(pmd) & _PAGE_SWP_UFFD_WP;
|
||||
return pmd_flags(pmd) & _PAGE_SWP_UFFD;
|
||||
}
|
||||
|
||||
static inline pmd_t pmd_swp_clear_uffd_wp(pmd_t pmd)
|
||||
{
|
||||
return pmd_clear_flags(pmd, _PAGE_SWP_UFFD_WP);
|
||||
return pmd_clear_flags(pmd, _PAGE_SWP_UFFD);
|
||||
}
|
||||
#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_WP */
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
#define _PAGE_BIT_SPECIAL _PAGE_BIT_SOFTW1
|
||||
#define _PAGE_BIT_CPA_TEST _PAGE_BIT_SOFTW1
|
||||
#define _PAGE_BIT_UFFD_WP _PAGE_BIT_SOFTW2 /* userfaultfd wrprotected */
|
||||
#define _PAGE_BIT_UFFD _PAGE_BIT_SOFTW2 /* userfaultfd tracking */
|
||||
#define _PAGE_BIT_SOFT_DIRTY _PAGE_BIT_SOFTW3 /* software dirty tracking */
|
||||
#define _PAGE_BIT_KERNEL_4K _PAGE_BIT_SOFTW3 /* page must not be converted to large */
|
||||
|
||||
|
|
@ -39,7 +39,7 @@
|
|||
#define _PAGE_BIT_SAVED_DIRTY _PAGE_BIT_SOFTW5 /* Saved Dirty bit (leaf) */
|
||||
#define _PAGE_BIT_NOPTISHADOW _PAGE_BIT_SOFTW5 /* No PTI shadow (root PGD) */
|
||||
#else
|
||||
/* Shared with _PAGE_BIT_UFFD_WP which is not supported on 32 bit */
|
||||
/* Shared with _PAGE_BIT_UFFD which is not supported on 32 bit */
|
||||
#define _PAGE_BIT_SAVED_DIRTY _PAGE_BIT_SOFTW2 /* Saved Dirty bit (leaf) */
|
||||
#define _PAGE_BIT_NOPTISHADOW _PAGE_BIT_SOFTW2 /* No PTI shadow (root PGD) */
|
||||
#endif
|
||||
|
|
@ -111,11 +111,11 @@
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
|
||||
#define _PAGE_UFFD_WP (_AT(pteval_t, 1) << _PAGE_BIT_UFFD_WP)
|
||||
#define _PAGE_SWP_UFFD_WP _PAGE_USER
|
||||
#define _PAGE_UFFD (_AT(pteval_t, 1) << _PAGE_BIT_UFFD)
|
||||
#define _PAGE_SWP_UFFD _PAGE_USER
|
||||
#else
|
||||
#define _PAGE_UFFD_WP (_AT(pteval_t, 0))
|
||||
#define _PAGE_SWP_UFFD_WP (_AT(pteval_t, 0))
|
||||
#define _PAGE_UFFD (_AT(pteval_t, 0))
|
||||
#define _PAGE_SWP_UFFD (_AT(pteval_t, 0))
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
|
||||
|
|
@ -129,7 +129,7 @@
|
|||
/*
|
||||
* The hardware requires shadow stack to be Write=0,Dirty=1. However,
|
||||
* there are valid cases where the kernel might create read-only PTEs that
|
||||
* are dirty (e.g., fork(), mprotect(), uffd-wp(), soft-dirty tracking). In
|
||||
* are dirty (e.g., fork(), mprotect(), userfaultfd, soft-dirty tracking). In
|
||||
* this case, the _PAGE_SAVED_DIRTY bit is used instead of the HW-dirty bit,
|
||||
* to avoid creating a wrong "shadow stack" PTEs. Such PTEs have
|
||||
* (Write=0,SavedDirty=1,Dirty=0) set.
|
||||
|
|
@ -151,7 +151,7 @@
|
|||
#define _COMMON_PAGE_CHG_MASK (PTE_PFN_MASK | _PAGE_PCD | _PAGE_PWT | \
|
||||
_PAGE_SPECIAL | _PAGE_ACCESSED | \
|
||||
_PAGE_DIRTY_BITS | _PAGE_SOFT_DIRTY | \
|
||||
_PAGE_CC | _PAGE_UFFD_WP)
|
||||
_PAGE_CC | _PAGE_UFFD)
|
||||
#define _PAGE_CHG_MASK (_COMMON_PAGE_CHG_MASK | _PAGE_PAT)
|
||||
#define _HPAGE_CHG_MASK (_COMMON_PAGE_CHG_MASK | _PAGE_PSE | _PAGE_PAT_LARGE)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user