qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH 11/15] kvm: Rework inner loop of kvm_cpu_exec


From: Jan Kiszka
Subject: [Qemu-devel] Re: [PATCH 11/15] kvm: Rework inner loop of kvm_cpu_exec
Date: Sat, 05 Mar 2011 19:12:50 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666

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 <address@hidden>
>> ---
>>  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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]