diff options
author | Gleb Natapov <gleb@redhat.com> | 2012-04-04 15:30:33 +0300 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2012-04-05 19:26:14 +0300 |
commit | e08759215b7dcb7111e94f0f96918dd98e86ca6b (patch) | |
tree | a2daa0e5840f68d20230435c5b4ebaf8ad0d438b /arch | |
parent | 8a4032496f41d40d2d0272b887b7f4cbc0ea2186 (diff) | |
download | linux-e08759215b7dcb7111e94f0f96918dd98e86ca6b.tar.gz linux-e08759215b7dcb7111e94f0f96918dd98e86ca6b.tar.bz2 linux-e08759215b7dcb7111e94f0f96918dd98e86ca6b.zip |
KVM: Resolve RCU vs. async page fault problem
"Page ready" async PF can kick vcpu out of idle state much like IRQ.
We need to tell RCU about this.
Reported-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Gleb Natapov <gleb@redhat.com>
Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/kvm.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 694d801bf606..b8ba6e4a27e4 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -38,6 +38,7 @@ #include <asm/traps.h> #include <asm/desc.h> #include <asm/tlbflush.h> +#include <asm/idle.h> static int kvmapf = 1; @@ -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; } } |