aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include/asm/kvm_ppc.h
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2012-08-12 19:04:19 -0400
committerAlexander Graf <agraf@suse.de>2012-10-05 17:38:45 -0400
commitbd2be6836ee493d41fe42367a2b129aa771185c1 (patch)
tree6c3f609ad1d1b74c0e08eb616eec0715c6f7679b /arch/powerpc/include/asm/kvm_ppc.h
parent24afa37b9c8f035d2fe2028e4824bc4e49bafe73 (diff)
KVM: PPC: Book3S: PR: Rework irq disabling
Today, we disable preemption while inside guest context, because we need to expose to the world that we are not in a preemptible context. However, during that time we already have interrupts disabled, which would indicate that we are in a non-preemptible context. The reason the checks for irqs_disabled() fail for us though is that we manually control hard IRQs and ignore all the lazy EE framework. Let's stop doing that. Instead, let's always use lazy EE to indicate when we want to disable IRQs, but do a special final switch that gets us into EE disabled, but soft enabled state. That way when we get back out of guest state, we are immediately ready to process interrupts. This simplifies the code drastically and reduces the time that we appear as preempt disabled. Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/powerpc/include/asm/kvm_ppc.h')
-rw-r--r--arch/powerpc/include/asm/kvm_ppc.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
index 59b7c87e47f7..545936428bf6 100644
--- a/arch/powerpc/include/asm/kvm_ppc.h
+++ b/arch/powerpc/include/asm/kvm_ppc.h
@@ -234,5 +234,15 @@ static inline void kvmppc_mmu_flush_icache(pfn_t pfn)
234 } 234 }
235} 235}
236 236
237/* Please call after prepare_to_enter. This function puts the lazy ee state
238 back to normal mode, without actually enabling interrupts. */
239static inline void kvmppc_lazy_ee_enable(void)
240{
241#ifdef CONFIG_PPC64
242 /* Only need to enable IRQs by hard enabling them after this */
243 local_paca->irq_happened = 0;
244 local_paca->soft_enabled = 1;
245#endif
246}
237 247
238#endif /* __POWERPC_KVM_PPC_H__ */ 248#endif /* __POWERPC_KVM_PPC_H__ */