summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhihui Zhang <zzhsuny@gmail.com>2013-12-30 15:56:29 -0500
committerMarcelo Tosatti <mtosatti@redhat.com>2014-01-08 19:01:40 -0200
commit2f0a6397dd3cac2fb05b46cad08c1d532c04d6b8 (patch)
tree2a68f99698169b20ed597e36bddfa9725275b712
parent171800328f6e2443e0e356de5b41fb7e0fff4448 (diff)
downloadlinux-stable-2f0a6397dd3cac2fb05b46cad08c1d532c04d6b8.tar.gz
linux-stable-2f0a6397dd3cac2fb05b46cad08c1d532c04d6b8.tar.bz2
linux-stable-2f0a6397dd3cac2fb05b46cad08c1d532c04d6b8.zip
KVM: VMX: check use I/O bitmap first before unconditional I/O exit
According to Table C-1 of Intel SDM 3C, a VM exit happens on an I/O instruction when "use I/O bitmaps" VM-execution control was 0 _and_ the "unconditional I/O exiting" VM-execution control was 1. So we can't just check "unconditional I/O exiting" alone. This patch was improved by suggestion from Jan Kiszka. Reviewed-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Zhihui Zhang <zzhsuny@gmail.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
-rw-r--r--arch/x86/kvm/vmx.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 9cc54842ae14..0abf8b783f19 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -6521,11 +6521,8 @@ static bool nested_vmx_exit_handled_io(struct kvm_vcpu *vcpu,
int size;
u8 b;
- if (nested_cpu_has(vmcs12, CPU_BASED_UNCOND_IO_EXITING))
- return 1;
-
if (!nested_cpu_has(vmcs12, CPU_BASED_USE_IO_BITMAPS))
- return 0;
+ return nested_cpu_has(vmcs12, CPU_BASED_UNCOND_IO_EXITING);
exit_qualification = vmcs_readl(EXIT_QUALIFICATION);