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:
parent
3a75ba650c
commit
04858f95fa
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user