[Qemu-devel] Re: [PATCH 11/15] kvm: Rework inner loop of kvm_cpu_exec
On 2011-03-11 22:34, Marcelo Tosatti wrote: On Sat, Mar 05, 2011 at 07:12:50PM +0100, Jan Kiszka wrote: @@ -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 It will not complain because ret is used to store return value of KVM_RUN. Right, I'll disentangle this duplicate use of 'ret' (writing patches is likely much better than watching more news this morning...). Jan signature.asc Description: OpenPGP digital signature
[Qemu-devel] Re: [PATCH 11/15] kvm: Rework inner loop of kvm_cpu_exec
On Sat, Mar 05, 2011 at 07:12:50PM +0100, Jan Kiszka wrote: @@ -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 It will not complain because ret is used to store return value of KVM_RUN.
[Qemu-devel] Re: [PATCH 11/15] kvm: Rework inner loop of kvm_cpu_exec
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.kis...@siemens.com --- 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.
[Qemu-devel] Re: [PATCH 11/15] kvm: Rework inner loop of kvm_cpu_exec
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.kis...@siemens.com --- 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 signature.asc Description: OpenPGP digital signature