diff options
-rw-r--r-- | arch/powerpc/include/asm/kvm_ppc.h | 11 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_pr.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kvm/booke.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kvm/powerpc.c | 2 |
4 files changed, 12 insertions, 9 deletions
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h index 5a26bfcd0bbc..b15554a26c20 100644 --- a/arch/powerpc/include/asm/kvm_ppc.h +++ b/arch/powerpc/include/asm/kvm_ppc.h | |||
@@ -394,10 +394,15 @@ static inline void kvmppc_mmu_flush_icache(pfn_t pfn) | |||
394 | } | 394 | } |
395 | } | 395 | } |
396 | 396 | ||
397 | /* Please call after prepare_to_enter. This function puts the lazy ee state | 397 | /* |
398 | back to normal mode, without actually enabling interrupts. */ | 398 | * Please call after prepare_to_enter. This function puts the lazy ee and irq |
399 | static inline void kvmppc_lazy_ee_enable(void) | 399 | * disabled tracking state back to normal mode, without actually enabling |
400 | * interrupts. | ||
401 | */ | ||
402 | static inline void kvmppc_fix_ee_before_entry(void) | ||
400 | { | 403 | { |
404 | trace_hardirqs_on(); | ||
405 | |||
401 | #ifdef CONFIG_PPC64 | 406 | #ifdef CONFIG_PPC64 |
402 | /* Only need to enable IRQs by hard enabling them after this */ | 407 | /* Only need to enable IRQs by hard enabling them after this */ |
403 | local_paca->irq_happened = 0; | 408 | local_paca->irq_happened = 0; |
diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c index 19498a567a81..ddfaf560e503 100644 --- a/arch/powerpc/kvm/book3s_pr.c +++ b/arch/powerpc/kvm/book3s_pr.c | |||
@@ -890,7 +890,7 @@ program_interrupt: | |||
890 | local_irq_enable(); | 890 | local_irq_enable(); |
891 | r = s; | 891 | r = s; |
892 | } else { | 892 | } else { |
893 | kvmppc_lazy_ee_enable(); | 893 | kvmppc_fix_ee_before_entry(); |
894 | } | 894 | } |
895 | } | 895 | } |
896 | 896 | ||
@@ -1161,7 +1161,7 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) | |||
1161 | if (vcpu->arch.shared->msr & MSR_FP) | 1161 | if (vcpu->arch.shared->msr & MSR_FP) |
1162 | kvmppc_handle_ext(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL, MSR_FP); | 1162 | kvmppc_handle_ext(vcpu, BOOK3S_INTERRUPT_FP_UNAVAIL, MSR_FP); |
1163 | 1163 | ||
1164 | kvmppc_lazy_ee_enable(); | 1164 | kvmppc_fix_ee_before_entry(); |
1165 | 1165 | ||
1166 | ret = __kvmppc_vcpu_run(kvm_run, vcpu); | 1166 | ret = __kvmppc_vcpu_run(kvm_run, vcpu); |
1167 | 1167 | ||
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index dcc94f016007..6e353517c4ad 100644 --- a/arch/powerpc/kvm/booke.c +++ b/arch/powerpc/kvm/booke.c | |||
@@ -698,7 +698,7 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) | |||
698 | kvmppc_load_guest_fp(vcpu); | 698 | kvmppc_load_guest_fp(vcpu); |
699 | #endif | 699 | #endif |
700 | 700 | ||
701 | kvmppc_lazy_ee_enable(); | 701 | kvmppc_fix_ee_before_entry(); |
702 | 702 | ||
703 | ret = __kvmppc_vcpu_run(kvm_run, vcpu); | 703 | ret = __kvmppc_vcpu_run(kvm_run, vcpu); |
704 | 704 | ||
@@ -1168,7 +1168,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
1168 | local_irq_enable(); | 1168 | local_irq_enable(); |
1169 | r = (s << 2) | RESUME_HOST | (r & RESUME_FLAG_NV); | 1169 | r = (s << 2) | RESUME_HOST | (r & RESUME_FLAG_NV); |
1170 | } else { | 1170 | } else { |
1171 | kvmppc_lazy_ee_enable(); | 1171 | kvmppc_fix_ee_before_entry(); |
1172 | } | 1172 | } |
1173 | } | 1173 | } |
1174 | 1174 | ||
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 6316ee336e88..4e05f8c693b4 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c | |||
@@ -117,8 +117,6 @@ int kvmppc_prepare_to_enter(struct kvm_vcpu *vcpu) | |||
117 | kvm_guest_exit(); | 117 | kvm_guest_exit(); |
118 | continue; | 118 | continue; |
119 | } | 119 | } |
120 | |||
121 | trace_hardirqs_on(); | ||
122 | #endif | 120 | #endif |
123 | 121 | ||
124 | kvm_guest_enter(); | 122 | kvm_guest_enter(); |