diff options
Diffstat (limited to 'arch/x86/kernel/kvm.c')
| -rw-r--r-- | arch/x86/kernel/kvm.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index b686a904d7c..cd6d9a5a42f 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -20,6 +20,7 @@   *   Authors: Anthony Liguori <aliguori@us.ibm.com>   */ +#include <linux/context_tracking.h>  #include <linux/module.h>  #include <linux/kernel.h>  #include <linux/kvm_para.h> @@ -43,7 +44,6 @@  #include <asm/apicdef.h>  #include <asm/hypervisor.h>  #include <asm/kvm_guest.h> -#include <asm/context_tracking.h>  static int kvmapf = 1; @@ -254,16 +254,18 @@ EXPORT_SYMBOL_GPL(kvm_read_and_reset_pf_reason);  dotraplinkage void __kprobes  do_async_page_fault(struct pt_regs *regs, unsigned long error_code)  { +	enum ctx_state prev_state; +  	switch (kvm_read_and_reset_pf_reason()) {  	default:  		do_page_fault(regs, error_code);  		break;  	case KVM_PV_REASON_PAGE_NOT_PRESENT:  		/* page is swapped out by the host. */ -		exception_enter(regs); +		prev_state = exception_enter();  		exit_idle();  		kvm_async_pf_task_wait((u32)read_cr2()); -		exception_exit(regs); +		exception_exit(prev_state);  		break;  	case KVM_PV_REASON_PAGE_READY:  		rcu_irq_enter();  |