diff options
author | Kevin Tian <kevin.tian@intel.com> | 2011-08-30 06:56:17 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2011-09-25 12:52:17 -0400 |
commit | 58fbbf26eb01cf6d92cf18da8d14b3a4af9c4b47 (patch) | |
tree | 738874a15a233eed6e2e18d9cfe99f09482e8b17 /arch/x86/include/asm | |
parent | 45133ecaaec7aea447afc98cc2c24aac638bbe5c (diff) |
KVM: APIC: avoid instruction emulation for EOI writes
Instruction emulation for EOI writes can be skipped, since sane
guest simply uses MOV instead of string operations. This is a nice
improvement when guest doesn't support x2apic or hyper-V EOI
support.
a single VM bandwidth is observed with ~8% bandwidth improvement
(7.4Gbps->8Gbps), by saving ~5% cycles from EOI emulation.
Signed-off-by: Kevin Tian <kevin.tian@intel.com>
<Based on earlier work from>:
Signed-off-by: Eddie Dong <eddie.dong@intel.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/include/asm')
-rw-r--r-- | arch/x86/include/asm/vmx.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h index 2caf290e9895..31f180c21ce9 100644 --- a/arch/x86/include/asm/vmx.h +++ b/arch/x86/include/asm/vmx.h | |||
@@ -350,6 +350,18 @@ enum vmcs_field { | |||
350 | #define DEBUG_REG_ACCESS_REG(eq) (((eq) >> 8) & 0xf) /* 11:8, general purpose reg. */ | 350 | #define DEBUG_REG_ACCESS_REG(eq) (((eq) >> 8) & 0xf) /* 11:8, general purpose reg. */ |
351 | 351 | ||
352 | 352 | ||
353 | /* | ||
354 | * Exit Qualifications for APIC-Access | ||
355 | */ | ||
356 | #define APIC_ACCESS_OFFSET 0xfff /* 11:0, offset within the APIC page */ | ||
357 | #define APIC_ACCESS_TYPE 0xf000 /* 15:12, access type */ | ||
358 | #define TYPE_LINEAR_APIC_INST_READ (0 << 12) | ||
359 | #define TYPE_LINEAR_APIC_INST_WRITE (1 << 12) | ||
360 | #define TYPE_LINEAR_APIC_INST_FETCH (2 << 12) | ||
361 | #define TYPE_LINEAR_APIC_EVENT (3 << 12) | ||
362 | #define TYPE_PHYSICAL_APIC_EVENT (10 << 12) | ||
363 | #define TYPE_PHYSICAL_APIC_INST (15 << 12) | ||
364 | |||
353 | /* segment AR */ | 365 | /* segment AR */ |
354 | #define SEGMENT_AR_L_MASK (1 << 13) | 366 | #define SEGMENT_AR_L_MASK (1 << 13) |
355 | 367 | ||