Skip to content

Commit

Permalink
KVM: Workaround vmx inability to virtualize the reset state
Browse files Browse the repository at this point in the history
The reset state has cs.selector == 0xf000 and cs.base == 0xffff0000,
which aren't compatible with vm86 mode, which is used for real mode
virtualization.

When we create a vcpu, we set cs.base to 0xf0000, but if we get there by
way of a reset, the values are inconsistent and vmx refuses to enter
guest mode.

Workaround by detecting the state and munging it appropriately.

Signed-off-by: Avi Kivity <[email protected]>
  • Loading branch information
avikivity committed May 3, 2007
1 parent aac0122 commit 8cb5b03
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/kvm/vmx.c
Original file line number Diff line number Diff line change
Expand Up @@ -712,6 +712,8 @@ static void enter_rmode(struct kvm_vcpu *vcpu)

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);

fix_rmode_seg(VCPU_SREG_ES, &vcpu->rmode.es);
Expand Down

0 comments on commit 8cb5b03

Please sign in to comment.