浏览代码

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>
Gleb Natapov 13 年之前
父节点
当前提交
e08759215b
共有 1 个文件被更改,包括 4 次插入0 次删除
  1. 4 0
      arch/x86/kernel/kvm.c

+ 4 - 0
arch/x86/kernel/kvm.c

@@ -38,6 +38,7 @@
 #include <asm/traps.h>
 #include <asm/traps.h>
 #include <asm/desc.h>
 #include <asm/desc.h>
 #include <asm/tlbflush.h>
 #include <asm/tlbflush.h>
+#include <asm/idle.h>
 
 
 static int kvmapf = 1;
 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());
 		kvm_async_pf_task_wait((u32)read_cr2());
 		break;
 		break;
 	case KVM_PV_REASON_PAGE_READY:
 	case KVM_PV_REASON_PAGE_READY:
+		rcu_irq_enter();
+		exit_idle();
 		kvm_async_pf_task_wake((u32)read_cr2());
 		kvm_async_pf_task_wake((u32)read_cr2());
+		rcu_irq_exit();
 		break;
 		break;
 	}
 	}
 }
 }