Merge branches 'pm-cpufreq', 'pm-sleep' and 'pm-em'
[linux-2.6-microblaze.git] / arch / arm64 / kvm / hyp / nvhe / switch.c
index f7af968..a34b01c 100644 (file)
@@ -41,7 +41,7 @@ static void __activate_traps(struct kvm_vcpu *vcpu)
        ___activate_traps(vcpu);
        __activate_traps_common(vcpu);
 
-       val = CPTR_EL2_DEFAULT;
+       val = vcpu->arch.cptr_el2;
        val |= CPTR_EL2_TTA | CPTR_EL2_TAM;
        if (!update_fp_enabled(vcpu)) {
                val |= CPTR_EL2_TFP | CPTR_EL2_TZ;
@@ -69,12 +69,10 @@ static void __activate_traps(struct kvm_vcpu *vcpu)
 static void __deactivate_traps(struct kvm_vcpu *vcpu)
 {
        extern char __kvm_hyp_host_vector[];
-       u64 mdcr_el2, cptr;
+       u64 cptr;
 
        ___deactivate_traps(vcpu);
 
-       mdcr_el2 = read_sysreg(mdcr_el2);
-
        if (cpus_have_final_cap(ARM64_WORKAROUND_SPECULATIVE_AT)) {
                u64 val;
 
@@ -92,13 +90,8 @@ static void __deactivate_traps(struct kvm_vcpu *vcpu)
                isb();
        }
 
-       __deactivate_traps_common();
-
-       mdcr_el2 &= MDCR_EL2_HPMN_MASK;
-       mdcr_el2 |= MDCR_EL2_E2PB_MASK << MDCR_EL2_E2PB_SHIFT;
-       mdcr_el2 |= MDCR_EL2_E2TB_MASK << MDCR_EL2_E2TB_SHIFT;
+       __deactivate_traps_common(vcpu);
 
-       write_sysreg(mdcr_el2, mdcr_el2);
        write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2);
 
        cptr = CPTR_EL2_DEFAULT;
@@ -170,6 +163,7 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu)
 {
        struct kvm_cpu_context *host_ctxt;
        struct kvm_cpu_context *guest_ctxt;
+       struct kvm_s2_mmu *mmu;
        bool pmu_switch_needed;
        u64 exit_code;
 
@@ -213,7 +207,8 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu)
        __sysreg32_restore_state(vcpu);
        __sysreg_restore_state_nvhe(guest_ctxt);
 
-       __load_guest_stage2(kern_hyp_va(vcpu->arch.hw_mmu));
+       mmu = kern_hyp_va(vcpu->arch.hw_mmu);
+       __load_stage2(mmu, kern_hyp_va(mmu->arch));
        __activate_traps(vcpu);
 
        __hyp_vgic_restore_state(vcpu);