Skip to content

Commit e7581ca

Browse files
committed
KVM: x86: simplify is_mmio_spte
We can simply look at bits 52-53 to identify MMIO entries in KVM's page tables. Therefore, there is no need to pass a mask to kvm_mmu_set_mmio_spte_mask. Signed-off-by: Paolo Bonzini <[email protected]>
1 parent f4cfcd2 commit e7581ca

File tree

4 files changed

+6
-11
lines changed

4 files changed

+6
-11
lines changed

arch/x86/kvm/mmu.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ static inline u64 rsvd_bits(int s, int e)
5151
return ((1ULL << (e - s + 1)) - 1) << s;
5252
}
5353

54-
void kvm_mmu_set_mmio_spte_mask(u64 mmio_mask, u64 mmio_value, u64 access_mask);
54+
void kvm_mmu_set_mmio_spte_mask(u64 mmio_value, u64 access_mask);
5555

5656
void
5757
reset_shadow_zero_bits_mask(struct kvm_vcpu *vcpu, struct kvm_mmu *context);

arch/x86/kvm/mmu/mmu.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,6 @@ static u64 __read_mostly shadow_x_mask; /* mutual exclusive with nx_mask */
244244
static u64 __read_mostly shadow_user_mask;
245245
static u64 __read_mostly shadow_accessed_mask;
246246
static u64 __read_mostly shadow_dirty_mask;
247-
static u64 __read_mostly shadow_mmio_mask;
248247
static u64 __read_mostly shadow_mmio_value;
249248
static u64 __read_mostly shadow_mmio_access_mask;
250249
static u64 __read_mostly shadow_present_mask;
@@ -331,21 +330,19 @@ static void kvm_flush_remote_tlbs_with_address(struct kvm *kvm,
331330
kvm_flush_remote_tlbs_with_range(kvm, &range);
332331
}
333332

334-
void kvm_mmu_set_mmio_spte_mask(u64 mmio_mask, u64 mmio_value, u64 access_mask)
333+
void kvm_mmu_set_mmio_spte_mask(u64 mmio_value, u64 access_mask)
335334
{
336335
BUG_ON((u64)(unsigned)access_mask != access_mask);
337-
BUG_ON((mmio_mask & mmio_value) != mmio_value);
338336
WARN_ON(mmio_value & (shadow_nonpresent_or_rsvd_mask << shadow_nonpresent_or_rsvd_mask_len));
339337
WARN_ON(mmio_value & shadow_nonpresent_or_rsvd_lower_gfn_mask);
340338
shadow_mmio_value = mmio_value | SPTE_MMIO_MASK;
341-
shadow_mmio_mask = mmio_mask | SPTE_SPECIAL_MASK;
342339
shadow_mmio_access_mask = access_mask;
343340
}
344341
EXPORT_SYMBOL_GPL(kvm_mmu_set_mmio_spte_mask);
345342

346343
static bool is_mmio_spte(u64 spte)
347344
{
348-
return (spte & shadow_mmio_mask) == shadow_mmio_value;
345+
return (spte & SPTE_SPECIAL_MASK) == SPTE_MMIO_MASK;
349346
}
350347

351348
static inline bool sp_ad_disabled(struct kvm_mmu_page *sp)
@@ -568,7 +565,6 @@ static void kvm_mmu_reset_all_pte_masks(void)
568565
shadow_dirty_mask = 0;
569566
shadow_nx_mask = 0;
570567
shadow_x_mask = 0;
571-
shadow_mmio_mask = 0;
572568
shadow_present_mask = 0;
573569
shadow_acc_track_mask = 0;
574570

@@ -6154,7 +6150,7 @@ static void kvm_set_mmio_spte_mask(void)
61546150
else
61556151
mask = 0;
61566152

6157-
kvm_mmu_set_mmio_spte_mask(mask, mask, ACC_WRITE_MASK | ACC_USER_MASK);
6153+
kvm_mmu_set_mmio_spte_mask(mask, ACC_WRITE_MASK | ACC_USER_MASK);
61586154
}
61596155

61606156
static bool get_nx_auto_mode(void)

arch/x86/kvm/svm/svm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,7 @@ static __init void svm_adjust_mmio_mask(void)
780780
*/
781781
mask = (mask_bit < 52) ? rsvd_bits(mask_bit, 51) | PT_PRESENT_MASK : 0;
782782

783-
kvm_mmu_set_mmio_spte_mask(mask, mask, PT_WRITABLE_MASK | PT_USER_MASK);
783+
kvm_mmu_set_mmio_spte_mask(mask, PT_WRITABLE_MASK | PT_USER_MASK);
784784
}
785785

786786
static void svm_hardware_teardown(void)

arch/x86/kvm/vmx/vmx.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4147,8 +4147,7 @@ static void ept_set_mmio_spte_mask(void)
41474147
* EPT Misconfigurations can be generated if the value of bits 2:0
41484148
* of an EPT paging-structure entry is 110b (write/execute).
41494149
*/
4150-
kvm_mmu_set_mmio_spte_mask(VMX_EPT_RWX_MASK,
4151-
VMX_EPT_MISCONFIG_WX_VALUE, 0);
4150+
kvm_mmu_set_mmio_spte_mask(VMX_EPT_MISCONFIG_WX_VALUE, 0);
41524151
}
41534152

41544153
#define VMX_XSS_EXIT_BITMAP 0

0 commit comments

Comments
 (0)