aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/include
diff options
context:
space:
mode:
authorKai Huang <kai.huang@linux.intel.com>2015-01-27 21:54:24 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2015-01-29 09:31:29 -0500
commitf4b4b1808690c37c7c703d43789c1988c5e7fdeb (patch)
tree1f41b6359a38dc8ed572bf861b2a13787c227630 /arch/x86/include
parent3b0f1d01e501792d8d89ab4371bc9e8cd2a10032 (diff)
KVM: MMU: Add mmu help functions to support PML
This patch adds new mmu layer functions to clear/set D-bit for memory slot, and to write protect superpages for memory slot. In case of PML, CPU logs the dirty GPA automatically to PML buffer when CPU updates D-bit from 0 to 1, therefore we don't have to write protect 4K pages, instead, we only need to clear D-bit in order to log that GPA. For superpages, we still write protect it and let page fault code to handle dirty page logging, as we still need to split superpage to 4K pages in PML. As PML is always enabled during guest's lifetime, to eliminate unnecessary PML GPA logging, we set D-bit manually for the slot with dirty logging disabled. Signed-off-by: Kai Huang <kai.huang@linux.intel.com> Reviewed-by: Xiao Guangrong <guangrong.xiao@linux.intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/include')
-rw-r--r--arch/x86/include/asm/kvm_host.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 843bea0e70fd..4f6369b6f7d2 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -835,6 +835,15 @@ void kvm_mmu_set_mask_ptes(u64 user_mask, u64 accessed_mask,
835 835
836void kvm_mmu_reset_context(struct kvm_vcpu *vcpu); 836void kvm_mmu_reset_context(struct kvm_vcpu *vcpu);
837void kvm_mmu_slot_remove_write_access(struct kvm *kvm, int slot); 837void kvm_mmu_slot_remove_write_access(struct kvm *kvm, int slot);
838void kvm_mmu_slot_leaf_clear_dirty(struct kvm *kvm,
839 struct kvm_memory_slot *memslot);
840void kvm_mmu_slot_largepage_remove_write_access(struct kvm *kvm,
841 struct kvm_memory_slot *memslot);
842void kvm_mmu_slot_set_dirty(struct kvm *kvm,
843 struct kvm_memory_slot *memslot);
844void kvm_mmu_clear_dirty_pt_masked(struct kvm *kvm,
845 struct kvm_memory_slot *slot,
846 gfn_t gfn_offset, unsigned long mask);
838void kvm_mmu_zap_all(struct kvm *kvm); 847void kvm_mmu_zap_all(struct kvm *kvm);
839void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm); 848void kvm_mmu_invalidate_mmio_sptes(struct kvm *kvm);
840unsigned int kvm_mmu_calculate_mmu_pages(struct kvm *kvm); 849unsigned int kvm_mmu_calculate_mmu_pages(struct kvm *kvm);