WHPX workaround bug in OSVW handling
Adds a workaround to an incorrect value setting CPUID Fn8000_0001_ECX[bit 9 OSVW] = 1. This can cause a guest linux kernel to panic when an issue to rdmsr C001_0140h returns 0. Disabling this feature correctly allows the guest to boot without accessing the osv workarounds. Signed-off-by: Justin Terry (VM) <juterry@microsoft.com> Message-Id: <20180605221500.21674-1-juterry@microsoft.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
e7d99825f0
commit
e1753a7e1d
@ -961,6 +961,16 @@ static int whpx_vcpu_run(CPUState *cpu)
|
||||
vcpu->exit_ctx.CpuidAccess.DefaultResultRcx |
|
||||
CPUID_EXT_HYPERVISOR;
|
||||
|
||||
rdx = vcpu->exit_ctx.CpuidAccess.DefaultResultRdx;
|
||||
rbx = vcpu->exit_ctx.CpuidAccess.DefaultResultRbx;
|
||||
break;
|
||||
case 0x80000001:
|
||||
rax = vcpu->exit_ctx.CpuidAccess.DefaultResultRax;
|
||||
/* Remove any support of OSVW */
|
||||
rcx =
|
||||
vcpu->exit_ctx.CpuidAccess.DefaultResultRcx &
|
||||
~CPUID_EXT3_OSVW;
|
||||
|
||||
rdx = vcpu->exit_ctx.CpuidAccess.DefaultResultRdx;
|
||||
rbx = vcpu->exit_ctx.CpuidAccess.DefaultResultRbx;
|
||||
break;
|
||||
@ -1382,12 +1392,13 @@ static int whpx_accel_init(MachineState *ms)
|
||||
goto error;
|
||||
}
|
||||
|
||||
UINT32 cpuidExitList[] = {1};
|
||||
UINT32 cpuidExitList[] = {1, 0x80000001};
|
||||
hr = whp_dispatch.WHvSetPartitionProperty(
|
||||
whpx->partition,
|
||||
WHvPartitionPropertyCodeCpuidExitList,
|
||||
cpuidExitList,
|
||||
RTL_NUMBER_OF(cpuidExitList) * sizeof(UINT32));
|
||||
|
||||
if (FAILED(hr)) {
|
||||
error_report("WHPX: Failed to set partition CpuidExitList hr=%08lx",
|
||||
hr);
|
||||
|
Loading…
Reference in New Issue
Block a user