kvm: x86: mmu: Lockless access tracking for Intel CPUs without EPT A bits.
This change implements lockless access tracking for Intel CPUs without EPT A bits. This is achieved by marking the PTEs as not-present (but not completely clearing them) when clear_flush_young() is called after marking the pages as accessed. When an EPT Violation is generated as a result of the VM accessing those pages, the PTEs are restored to their original values. Signed-off-by: Junaid Shahid <junaids@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:

committed by
Radim Krčmář

parent
37f0e8fe6b
commit
f160c7b7bb
@@ -469,11 +469,14 @@ enum vmcs_field {
|
||||
#define VMX_EPT_IPAT_BIT (1ull << 6)
|
||||
#define VMX_EPT_ACCESS_BIT (1ull << 8)
|
||||
#define VMX_EPT_DIRTY_BIT (1ull << 9)
|
||||
#define VMX_EPT_RWX_MASK (VMX_EPT_READABLE_MASK | \
|
||||
VMX_EPT_WRITABLE_MASK | \
|
||||
VMX_EPT_EXECUTABLE_MASK)
|
||||
#define VMX_EPT_MT_MASK (7ull << VMX_EPT_MT_EPTE_SHIFT)
|
||||
|
||||
/* The mask to use to trigger an EPT Misconfiguration in order to track MMIO */
|
||||
#define VMX_EPT_MISCONFIG_WX_VALUE (VMX_EPT_WRITABLE_MASK | \
|
||||
VMX_EPT_EXECUTABLE_MASK)
|
||||
|
||||
#define VMX_EPT_MISCONFIG_WX_VALUE (VMX_EPT_WRITABLE_MASK | \
|
||||
VMX_EPT_EXECUTABLE_MASK)
|
||||
|
||||
#define VMX_EPT_IDENTITY_PAGETABLE_ADDR 0xfffbc000ul
|
||||
|
||||
|
Reference in New Issue
Block a user