From: kaf24@firebug.cl.cam.ac.uk Date: Tue, 27 Jun 2006 08:41:09 +0000 (+0100) Subject: [HVM][VMX] Safer treatment of VM_EXEC_CONTROL when dealing w/ PENDING_INTERRUPT vmexit. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15913^2~34 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=bf0894ac7b66f9d857b10c06051614af1e3b81db;p=xen.git [HVM][VMX] Safer treatment of VM_EXEC_CONTROL when dealing w/ PENDING_INTERRUPT vmexit. Signed-off-by: George Dunlap --- diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index a8dca0dd2b..258837c115 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -2148,9 +2148,17 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs regs) vmx_vmexit_do_extint(®s); break; case EXIT_REASON_PENDING_INTERRUPT: + /* + * Not sure exactly what the purpose of this is. The only bits set + * and cleared at this point are CPU_BASED_VIRTUAL_INTR_PENDING. + * (in io.c:{enable,disable}_irq_window(). So presumably we want to + * set it to the original value... + */ + v->arch.hvm_vcpu.u.vmx.exec_control &= ~CPU_BASED_VIRTUAL_INTR_PENDING; + v->arch.hvm_vcpu.u.vmx.exec_control |= + (MONITOR_CPU_BASED_EXEC_CONTROLS & CPU_BASED_VIRTUAL_INTR_PENDING); __vmwrite(CPU_BASED_VM_EXEC_CONTROL, - MONITOR_CPU_BASED_EXEC_CONTROLS); - v->arch.hvm_vcpu.u.vmx.exec_control = MONITOR_CPU_BASED_EXEC_CONTROLS; + v->arch.hvm_vcpu.u.vmx.exec_control); break; case EXIT_REASON_TASK_SWITCH: __hvm_bug(®s);