diff options
author | Gleb Natapov <gleb@redhat.com> | 2010-04-28 12:15:29 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-08-01 03:35:31 -0400 |
commit | 5951c4423724759906b10a26aa6a8817c4afa615 (patch) | |
tree | 552b885e950cf61e841534cbefd0231f9ad0992d /arch/x86/kvm/x86.c | |
parent | 3fb1b5dbd397d16a855c97c3fb80fe6e9196ce7c (diff) |
KVM: x86 emulator: add get_cached_segment_base() callback to x86_emulate_ops
On VMX it is expensive to call get_cached_descriptor() just to get segment
base since multiple vmcs_reads are done instead of only one. Introduce
new call back get_cached_segment_base() for efficiency.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r-- | arch/x86/kvm/x86.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index e3a5455049b0..9a469df6011c 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -3714,6 +3714,12 @@ static void emulator_get_gdt(struct desc_ptr *dt, struct kvm_vcpu *vcpu) | |||
3714 | kvm_x86_ops->get_gdt(vcpu, dt); | 3714 | kvm_x86_ops->get_gdt(vcpu, dt); |
3715 | } | 3715 | } |
3716 | 3716 | ||
3717 | static unsigned long emulator_get_cached_segment_base(int seg, | ||
3718 | struct kvm_vcpu *vcpu) | ||
3719 | { | ||
3720 | return get_segment_base(vcpu, seg); | ||
3721 | } | ||
3722 | |||
3717 | static bool emulator_get_cached_descriptor(struct desc_struct *desc, int seg, | 3723 | static bool emulator_get_cached_descriptor(struct desc_struct *desc, int seg, |
3718 | struct kvm_vcpu *vcpu) | 3724 | struct kvm_vcpu *vcpu) |
3719 | { | 3725 | { |
@@ -3804,6 +3810,7 @@ static struct x86_emulate_ops emulate_ops = { | |||
3804 | .set_cached_descriptor = emulator_set_cached_descriptor, | 3810 | .set_cached_descriptor = emulator_set_cached_descriptor, |
3805 | .get_segment_selector = emulator_get_segment_selector, | 3811 | .get_segment_selector = emulator_get_segment_selector, |
3806 | .set_segment_selector = emulator_set_segment_selector, | 3812 | .set_segment_selector = emulator_set_segment_selector, |
3813 | .get_cached_segment_base = emulator_get_cached_segment_base, | ||
3807 | .get_gdt = emulator_get_gdt, | 3814 | .get_gdt = emulator_get_gdt, |
3808 | .get_cr = emulator_get_cr, | 3815 | .get_cr = emulator_get_cr, |
3809 | .set_cr = emulator_set_cr, | 3816 | .set_cr = emulator_set_cr, |