i386/hvf: Raise exception on error setting APICBASE

When setting the APICBASE MSR to an illegal value, the APIC
implementation will return an error. This change forwards that report
to the guest as an exception rather than ignoring it when using the hvf
accelerator.

Signed-off-by: Phil Dennis-Jordan <phil@philjordan.eu>
Link: https://lore.kernel.org/r/20241105155800.5461-5-phil@philjordan.eu
Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Phil Dennis-Jordan 2024-11-05 16:57:59 +01:00 committed by Paolo Bonzini
parent 3a75ba650c
commit 04858f95fa

View File

@ -794,9 +794,16 @@ void simulate_wrmsr(CPUX86State *env)
switch (msr) { switch (msr) {
case MSR_IA32_TSC: case MSR_IA32_TSC:
break; break;
case MSR_IA32_APICBASE: case MSR_IA32_APICBASE: {
cpu_set_apic_base(cpu->apic_state, data); int r;
r = cpu_set_apic_base(cpu->apic_state, data);
if (r < 0) {
raise_exception(env, EXCP0D_GPF, 0);
}
break; break;
}
case MSR_APIC_START ... MSR_APIC_END: { case MSR_APIC_START ... MSR_APIC_END: {
int ret; int ret;
int index = (uint32_t)env->regs[R_ECX] - MSR_APIC_START; int index = (uint32_t)env->regs[R_ECX] - MSR_APIC_START;