On Mon, Apr 16, 2012 at 01:28:55PM +0300, Gleb Natapov wrote: > On Sat, Apr 14, 2012 at 11:44:53AM +0200, Peter Zijlstra wrote: > > On Wed, 2012-04-04 at 15:30 +0300, Gleb Natapov wrote: > > > > > > @@ -253,7 +254,10 @@ do_async_page_fault(struct pt_regs *regs, unsigned long error_code) > > > kvm_async_pf_task_wait((u32)read_cr2()); > > > break; > > > case KVM_PV_REASON_PAGE_READY: > > > + rcu_irq_enter(); > > > + exit_idle(); > > > kvm_async_pf_task_wake((u32)read_cr2()); > > > + rcu_irq_exit(); > > > break; > > > } > > > } > > > > Wouldn't irq_enter() / irq_exit() be more appropriate? You're basically > > taking an interrupt/exception from idle, irq_enter() will fix up > > everything that needs fixing up, including time sources (which the > > scheduler expects to be up-to-date). > > > You are right. Will send a patch. > KVM: Call irq_enter() instead of rcu_irq_enter() during async PF. As Peter noted there are more things that should be done when leaving idle state. irq_(enter|exit)() does them and also call rcu functions. Signed-off-by: Gleb Natapov <gleb@xxxxxxxxxx> diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index b8ba6e4..83a48f6 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -254,10 +254,10 @@ do_async_page_fault(struct pt_regs *regs, unsigned long error_code) kvm_async_pf_task_wait((u32)read_cr2()); break; case KVM_PV_REASON_PAGE_READY: - rcu_irq_enter(); + irq_enter(); exit_idle(); kvm_async_pf_task_wake((u32)read_cr2()); - rcu_irq_exit(); + irq_exit(); break; } } -- Gleb. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html