KVM: VMX: use fix_rmode_seg() to fix all code/data segments
The code for SS and CS does the same thing fix_rmode_seg() is doing. Use it instead of hand crafted code. Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Gleb Natapov <gleb@redhat.com>
This commit is contained in:
parent
c6ad115348
commit
beb853ffec
@ -3315,30 +3315,8 @@ static void vmx_set_segment(struct kvm_vcpu *vcpu,
|
||||
* unrestricted guest like Westmere to older host that don't have
|
||||
* unrestricted guest like Nehelem.
|
||||
*/
|
||||
if (vmx->rmode.vm86_active) {
|
||||
switch (seg) {
|
||||
case VCPU_SREG_CS:
|
||||
vmcs_write32(GUEST_CS_AR_BYTES, 0xf3);
|
||||
vmcs_write32(GUEST_CS_LIMIT, 0xffff);
|
||||
if (vmcs_readl(GUEST_CS_BASE) == 0xffff0000)
|
||||
vmcs_writel(GUEST_CS_BASE, 0xf0000);
|
||||
vmcs_write16(GUEST_CS_SELECTOR,
|
||||
vmcs_readl(GUEST_CS_BASE) >> 4);
|
||||
break;
|
||||
case VCPU_SREG_ES:
|
||||
case VCPU_SREG_DS:
|
||||
case VCPU_SREG_GS:
|
||||
case VCPU_SREG_FS:
|
||||
fix_rmode_seg(seg, &vmx->rmode.segs[seg]);
|
||||
break;
|
||||
case VCPU_SREG_SS:
|
||||
vmcs_write16(GUEST_SS_SELECTOR,
|
||||
vmcs_readl(GUEST_SS_BASE) >> 4);
|
||||
vmcs_write32(GUEST_SS_LIMIT, 0xffff);
|
||||
vmcs_write32(GUEST_SS_AR_BYTES, 0xf3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (vmx->rmode.vm86_active && var->s)
|
||||
fix_rmode_seg(seg, &vmx->rmode.segs[seg]);
|
||||
}
|
||||
|
||||
static void vmx_get_cs_db_l_bits(struct kvm_vcpu *vcpu, int *db, int *l)
|
||||
|
Loading…
Reference in New Issue
Block a user