From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=52336 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PvutR-0002Tr-Js for qemu-devel@nongnu.org; Sat, 05 Mar 2011 12:03:51 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PvutC-0001uh-EN for qemu-devel@nongnu.org; Sat, 05 Mar 2011 12:03:35 -0500 Received: from mx1.redhat.com ([209.132.183.28]:47643) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PvutB-0001uY-WA for qemu-devel@nongnu.org; Sat, 05 Mar 2011 12:03:34 -0500 Date: Sat, 5 Mar 2011 13:05:19 -0300 From: Marcelo Tosatti Message-ID: <20110305160519.GA4387@amt.cnet> References: <481368ec2de108b87df4cd11c2bd870b215e49b5.1299233998.git.jan.kiszka@siemens.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <481368ec2de108b87df4cd11c2bd870b215e49b5.1299233998.git.jan.kiszka@siemens.com> Subject: [Qemu-devel] Re: [PATCH 11/15] kvm: Rework inner loop of kvm_cpu_exec List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Avi Kivity , kvm@vger.kernel.org, qemu-devel@nongnu.org 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 > --- > 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.