On Mon, Jan 12, 2015 at 02:00:24PM -0500, Paolo Bonzini wrote:
No, KVM hides the fact that you are in protected mode. EMM386 would be affected, but then it is not impossible for old programs to require disabling it.
I was under the vague impression that kvm uses VM86 mode to run 16bit code on some Intel chipsets. The SMSW instruction isn't privileged so I didn't think it could be hidden.
It isn't privileged indeed (nice trick in fact!), but that doesn't matter for VT-x extensions.
Old processors let you run the processor in VMX non-root mode (i.e. as a VM) only in protected mode, so KVM uses VM86 when the processor is in real mode (and uses an interpreter while in big real mode or during real<->protected mode transitions).
But all the bells and whistles of VMX still apply, including the ability to fake the value of CR0 for both MOV and [LS]MSW instructions.
Okay, so it fakes real-mode by setting up a protected mode guest with a fake CR0 that is running vm86, and so SMSW still returns a value with PE off? (As opposed to a regular guest that itself launches a VM86 instance, in which case CR0 from SMSW would have PE on.)
Good to know - thanks. -Kevin