On 2011-03-05 17:05, Marcelo Tosatti wrote: > On Fri, Mar 04, 2011 at 11:20:08AM +0100, Jan Kiszka wrote: >> Let kvm_cpu_exec return EXCP_* values consistently and generate those >> codes already inside its inner loop. This means we will now re-enter the >> kernel while ret == 0. >> >> Update kvm_handle_internal_error accordingly, but keep >> kvm_arch_handle_exit untouched, it will be converted in a separate step. >> >> Signed-off-by: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> >> --- >> kvm-all.c | 26 ++++++++++++++------------ >> 1 files changed, 14 insertions(+), 12 deletions(-) >> >> diff --git a/kvm-all.c b/kvm-all.c >> index 2952499..cc652cf 100644 >> --- a/kvm-all.c >> +++ b/kvm-all.c >> @@ -848,7 +848,7 @@ static int kvm_handle_internal_error(CPUState *env, struct kvm_run *run) >> fprintf(stderr, "emulation failure\n"); >> if (!kvm_arch_stop_on_emulation_error(env)) { >> cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE); >> - return 0; >> + return EXCP_INTERRUPT; >> } >> } >> /* FIXME: Should trigger a qmp message to let management know >> @@ -947,7 +947,7 @@ int kvm_cpu_exec(CPUState *env) >> >> if (ret == -EINTR || ret == -EAGAIN) { >> DPRINTF("io window exit\n"); >> - ret = 0; >> + ret = EXCP_INTERRUPT; >> break; >> } >> >> @@ -956,7 +956,6 @@ int kvm_cpu_exec(CPUState *env) >> abort(); >> } >> >> - ret = 0; /* exit loop */ >> switch (run->exit_reason) { > > Better keep ret assignment here so default behaviour is to > exit loop? EXCP_INTERRUPT. There is no real default behavior: in two cases we stay in the loop, in two others we leave, and the rest obtains ret from a return value. Moreover, if a new case misses to set ret, the compiler will complain. Jan
Attachment:
signature.asc
Description: OpenPGP digital signature