From: Gleb Natapov Date: Mon, 21 Feb 2011 10:07:58 +0000 (+0200) Subject: KVM: VMX: update live TR selector if it changes in real mode X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=a8ba6c2622036101d0c6a195f97546bcb1a056ab;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git KVM: VMX: update live TR selector if it changes in real mode When rmode.vm86 is active TR descriptor is updated with vm86 task values, but selector is left intact. vmx_set_segment() makes sure that if TR register is written into while vm86 is active the new values are saved for use after vm86 is deactivated, but since selector is not updated on vm86 activation/deactivation new value is lost. Fix this by writing new selector into vmcs immediately. Signed-off-by: Gleb Natapov Signed-off-by: Avi Kivity --- diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index a61ed93a1f25..dafb67eddd60 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -2138,6 +2138,7 @@ static void vmx_set_segment(struct kvm_vcpu *vcpu, u32 ar; if (vmx->rmode.vm86_active && seg == VCPU_SREG_TR) { + vmcs_write16(sf->selector, var->selector); vmx->rmode.tr.selector = var->selector; vmx->rmode.tr.base = var->base; vmx->rmode.tr.limit = var->limit;