aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/asm/kvm_host.h2
-rw-r--r--arch/x86/kvm/mmu.c13
-rw-r--r--arch/x86/kvm/x86.c2
3 files changed, 3 insertions, 14 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 671c6f0bea51..6e9785f5029f 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -253,7 +253,6 @@ struct kvm_pio_request {
253 * mode. 253 * mode.
254 */ 254 */
255struct kvm_mmu { 255struct kvm_mmu {
256 void (*new_cr3)(struct kvm_vcpu *vcpu);
257 void (*set_cr3)(struct kvm_vcpu *vcpu, unsigned long root); 256 void (*set_cr3)(struct kvm_vcpu *vcpu, unsigned long root);
258 unsigned long (*get_cr3)(struct kvm_vcpu *vcpu); 257 unsigned long (*get_cr3)(struct kvm_vcpu *vcpu);
259 u64 (*get_pdptr)(struct kvm_vcpu *vcpu, int index); 258 u64 (*get_pdptr)(struct kvm_vcpu *vcpu, int index);
@@ -923,6 +922,7 @@ int kvm_emulate_hypercall(struct kvm_vcpu *vcpu);
923int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code, 922int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code,
924 void *insn, int insn_len); 923 void *insn, int insn_len);
925void kvm_mmu_invlpg(struct kvm_vcpu *vcpu, gva_t gva); 924void kvm_mmu_invlpg(struct kvm_vcpu *vcpu, gva_t gva);
925void kvm_mmu_new_cr3(struct kvm_vcpu *vcpu);
926 926
927void kvm_enable_tdp(void); 927void kvm_enable_tdp(void);
928void kvm_disable_tdp(void); 928void kvm_disable_tdp(void);
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 1c4d580ba347..dff856c8621a 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -2570,11 +2570,6 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *sptep,
2570 kvm_release_pfn_clean(pfn); 2570 kvm_release_pfn_clean(pfn);
2571} 2571}
2572 2572
2573static void nonpaging_new_cr3(struct kvm_vcpu *vcpu)
2574{
2575 mmu_free_roots(vcpu);
2576}
2577
2578static pfn_t pte_prefetch_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn, 2573static pfn_t pte_prefetch_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn,
2579 bool no_dirty_log) 2574 bool no_dirty_log)
2580{ 2575{
@@ -3427,7 +3422,6 @@ out_unlock:
3427static int nonpaging_init_context(struct kvm_vcpu *vcpu, 3422static int nonpaging_init_context(struct kvm_vcpu *vcpu,
3428 struct kvm_mmu *context) 3423 struct kvm_mmu *context)
3429{ 3424{
3430 context->new_cr3 = nonpaging_new_cr3;
3431 context->page_fault = nonpaging_page_fault; 3425 context->page_fault = nonpaging_page_fault;
3432 context->gva_to_gpa = nonpaging_gva_to_gpa; 3426 context->gva_to_gpa = nonpaging_gva_to_gpa;
3433 context->sync_page = nonpaging_sync_page; 3427 context->sync_page = nonpaging_sync_page;
@@ -3448,9 +3442,8 @@ void kvm_mmu_flush_tlb(struct kvm_vcpu *vcpu)
3448} 3442}
3449EXPORT_SYMBOL_GPL(kvm_mmu_flush_tlb); 3443EXPORT_SYMBOL_GPL(kvm_mmu_flush_tlb);
3450 3444
3451static void paging_new_cr3(struct kvm_vcpu *vcpu) 3445void kvm_mmu_new_cr3(struct kvm_vcpu *vcpu)
3452{ 3446{
3453 pgprintk("%s: cr3 %lx\n", __func__, kvm_read_cr3(vcpu));
3454 mmu_free_roots(vcpu); 3447 mmu_free_roots(vcpu);
3455} 3448}
3456 3449
@@ -3666,7 +3659,6 @@ static int paging64_init_context_common(struct kvm_vcpu *vcpu,
3666 update_last_pte_bitmap(vcpu, context); 3659 update_last_pte_bitmap(vcpu, context);
3667 3660
3668 ASSERT(is_pae(vcpu)); 3661 ASSERT(is_pae(vcpu));
3669 context->new_cr3 = paging_new_cr3;
3670 context->page_fault = paging64_page_fault; 3662 context->page_fault = paging64_page_fault;
3671 context->gva_to_gpa = paging64_gva_to_gpa; 3663 context->gva_to_gpa = paging64_gva_to_gpa;
3672 context->sync_page = paging64_sync_page; 3664 context->sync_page = paging64_sync_page;
@@ -3694,7 +3686,6 @@ static int paging32_init_context(struct kvm_vcpu *vcpu,
3694 update_permission_bitmask(vcpu, context, false); 3686 update_permission_bitmask(vcpu, context, false);
3695 update_last_pte_bitmap(vcpu, context); 3687 update_last_pte_bitmap(vcpu, context);
3696 3688
3697 context->new_cr3 = paging_new_cr3;
3698 context->page_fault = paging32_page_fault; 3689 context->page_fault = paging32_page_fault;
3699 context->gva_to_gpa = paging32_gva_to_gpa; 3690 context->gva_to_gpa = paging32_gva_to_gpa;
3700 context->sync_page = paging32_sync_page; 3691 context->sync_page = paging32_sync_page;
@@ -3717,7 +3708,6 @@ static int init_kvm_tdp_mmu(struct kvm_vcpu *vcpu)
3717 struct kvm_mmu *context = vcpu->arch.walk_mmu; 3708 struct kvm_mmu *context = vcpu->arch.walk_mmu;
3718 3709
3719 context->base_role.word = 0; 3710 context->base_role.word = 0;
3720 context->new_cr3 = nonpaging_new_cr3;
3721 context->page_fault = tdp_page_fault; 3711 context->page_fault = tdp_page_fault;
3722 context->sync_page = nonpaging_sync_page; 3712 context->sync_page = nonpaging_sync_page;
3723 context->invlpg = nonpaging_invlpg; 3713 context->invlpg = nonpaging_invlpg;
@@ -3792,7 +3782,6 @@ int kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context,
3792 context->shadow_root_level = kvm_x86_ops->get_tdp_level(); 3782 context->shadow_root_level = kvm_x86_ops->get_tdp_level();
3793 3783
3794 context->nx = true; 3784 context->nx = true;
3795 context->new_cr3 = paging_new_cr3;
3796 context->page_fault = ept_page_fault; 3785 context->page_fault = ept_page_fault;
3797 context->gva_to_gpa = ept_gva_to_gpa; 3786 context->gva_to_gpa = ept_gva_to_gpa;
3798 context->sync_page = ept_sync_page; 3787 context->sync_page = ept_sync_page;
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index e8e2d09dfe7d..890fa8273bff 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -684,7 +684,7 @@ int kvm_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
684 684
685 vcpu->arch.cr3 = cr3; 685 vcpu->arch.cr3 = cr3;
686 __set_bit(VCPU_EXREG_CR3, (ulong *)&vcpu->arch.regs_avail); 686 __set_bit(VCPU_EXREG_CR3, (ulong *)&vcpu->arch.regs_avail);
687 vcpu->arch.mmu.new_cr3(vcpu); 687 kvm_mmu_new_cr3(vcpu);
688 return 0; 688 return 0;
689} 689}
690EXPORT_SYMBOL_GPL(kvm_set_cr3); 690EXPORT_SYMBOL_GPL(kvm_set_cr3);