kvm: Align kvm_arch_handle_exit to kvm_cpu_exec changes
Make the return code of kvm_arch_handle_exit directly usable for kvm_cpu_exec. This is straightforward for x86 and ppc, just s390 would require more work. Avoid this for now by pushing the return code translation logic into s390's kvm_arch_handle_exit. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> CC: Alexander Graf <agraf@suse.de> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
d73cd8f4ea
commit
bb4ea39329
@ -989,11 +989,6 @@ int kvm_cpu_exec(CPUState *env)
|
||||
default:
|
||||
DPRINTF("kvm_arch_handle_exit\n");
|
||||
ret = kvm_arch_handle_exit(env, run);
|
||||
if (ret == 0) {
|
||||
ret = EXCP_INTERRUPT;
|
||||
} else if (ret > 0) {
|
||||
ret = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
} while (ret == 0);
|
||||
|
@ -1618,10 +1618,10 @@ static int kvm_handle_halt(CPUState *env)
|
||||
(env->eflags & IF_MASK)) &&
|
||||
!(env->interrupt_request & CPU_INTERRUPT_NMI)) {
|
||||
env->halted = 1;
|
||||
return 0;
|
||||
return EXCP_HLT;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool host_supports_vmx(void)
|
||||
@ -1637,7 +1637,7 @@ static bool host_supports_vmx(void)
|
||||
int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run)
|
||||
{
|
||||
uint64_t code;
|
||||
int ret = 0;
|
||||
int ret;
|
||||
|
||||
switch (run->exit_reason) {
|
||||
case KVM_EXIT_HLT:
|
||||
@ -1645,7 +1645,7 @@ int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run)
|
||||
ret = kvm_handle_halt(env);
|
||||
break;
|
||||
case KVM_EXIT_SET_TPR:
|
||||
ret = 1;
|
||||
ret = 0;
|
||||
break;
|
||||
case KVM_EXIT_FAIL_ENTRY:
|
||||
code = run->fail_entry.hardware_entry_failure_reason;
|
||||
|
@ -271,7 +271,7 @@ static int kvmppc_handle_halt(CPUState *env)
|
||||
env->exception_index = EXCP_HLT;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* map dcr access to existing qemu dcr emulation */
|
||||
@ -280,7 +280,7 @@ static int kvmppc_handle_dcr_read(CPUState *env, uint32_t dcrn, uint32_t *data)
|
||||
if (ppc_dcr_read(env->dcr_env, dcrn, data) < 0)
|
||||
fprintf(stderr, "Read to unhandled DCR (0x%x)\n", dcrn);
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int kvmppc_handle_dcr_write(CPUState *env, uint32_t dcrn, uint32_t data)
|
||||
@ -288,12 +288,12 @@ static int kvmppc_handle_dcr_write(CPUState *env, uint32_t dcrn, uint32_t data)
|
||||
if (ppc_dcr_write(env->dcr_env, dcrn, data) < 0)
|
||||
fprintf(stderr, "Write to unhandled DCR (0x%x)\n", dcrn);
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run)
|
||||
{
|
||||
int ret = 0;
|
||||
int ret;
|
||||
|
||||
switch (run->exit_reason) {
|
||||
case KVM_EXIT_DCR:
|
||||
|
@ -497,6 +497,11 @@ int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run)
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
ret = EXCP_INTERRUPT;
|
||||
} else if (ret > 0) {
|
||||
ret = 0;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user