Skip to content

Commit e29b749

Browse files
48casean-jc
authored andcommitted
KVM: x86/mmu: Factor out spte atomic bit clearing routine
This new function, tdp_mmu_clear_spte_bits_atomic(), will be used in a follow-up patch to enable lockless Accessed bit clearing. Signed-off-by: James Houghton <jthoughton@google.com> Acked-by: Yu Zhao <yuzhao@google.com> Link: https://lore.kernel.org/r/20250204004038.1680123-4-jthoughton@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent aa34b81 commit e29b749

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

arch/x86/kvm/mmu/tdp_iter.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ static inline u64 kvm_tdp_mmu_write_spte_atomic(tdp_ptep_t sptep, u64 new_spte)
2525
return xchg(rcu_dereference(sptep), new_spte);
2626
}
2727

28+
static inline u64 tdp_mmu_clear_spte_bits_atomic(tdp_ptep_t sptep, u64 mask)
29+
{
30+
atomic64_t *sptep_atomic = (atomic64_t *)rcu_dereference(sptep);
31+
32+
return (u64)atomic64_fetch_and(~mask, sptep_atomic);
33+
}
34+
2835
static inline void __kvm_tdp_mmu_write_spte(tdp_ptep_t sptep, u64 new_spte)
2936
{
3037
KVM_MMU_WARN_ON(is_ept_ve_possible(new_spte));
@@ -63,12 +70,8 @@ static inline u64 kvm_tdp_mmu_write_spte(tdp_ptep_t sptep, u64 old_spte,
6370
static inline u64 tdp_mmu_clear_spte_bits(tdp_ptep_t sptep, u64 old_spte,
6471
u64 mask, int level)
6572
{
66-
atomic64_t *sptep_atomic;
67-
68-
if (kvm_tdp_mmu_spte_need_atomic_write(old_spte, level)) {
69-
sptep_atomic = (atomic64_t *)rcu_dereference(sptep);
70-
return (u64)atomic64_fetch_and(~mask, sptep_atomic);
71-
}
73+
if (kvm_tdp_mmu_spte_need_atomic_write(old_spte, level))
74+
return tdp_mmu_clear_spte_bits_atomic(sptep, mask);
7275

7376
__kvm_tdp_mmu_write_spte(sptep, old_spte & ~mask);
7477
return old_spte;

0 commit comments

Comments
 (0)