summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorGleb Natapov <gleb@redhat.com>2012-04-04 15:30:33 +0300
committerAvi Kivity <avi@redhat.com>2012-04-05 19:26:14 +0300
commite08759215b7dcb7111e94f0f96918dd98e86ca6b (patch)
treea2daa0e5840f68d20230435c5b4ebaf8ad0d438b /arch
parent8a4032496f41d40d2d0272b887b7f4cbc0ea2186 (diff)
downloadlinux-stable-e08759215b7dcb7111e94f0f96918dd98e86ca6b.tar.gz
linux-stable-e08759215b7dcb7111e94f0f96918dd98e86ca6b.tar.bz2
linux-stable-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.c4
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;
}
}