From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH] do not enter vcpu again if it was stopped during IO Date: Wed, 23 Jun 2010 13:21:50 +0300 Message-ID: <20100623102150.GD4689@redhat.com> References: <20100621090152.GG4689@redhat.com> <4C21DF0E.9080505@siemens.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: avi@redhat.com, mtosatti@redhat.com, kvm@vger.kernel.org To: Jan Kiszka Return-path: Received: from mx1.redhat.com ([209.132.183.28]:51548 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752530Ab0FWKVy (ORCPT ); Wed, 23 Jun 2010 06:21:54 -0400 Content-Disposition: inline In-Reply-To: <4C21DF0E.9080505@siemens.com> Sender: kvm-owner@vger.kernel.org List-ID: On Wed, Jun 23, 2010 at 12:16:46PM +0200, Jan Kiszka wrote: > Gleb Natapov wrote: > > To prevent reentering vcpu after IO completion it is not enough > > to set env->stopped since it is checked only in main loop but control > > will not get there until next non-IO exit since kvm_run() will reenter > > vcpu to complete IO instruction. Solve this by sending self-signal to > > request exit after IO instruction completion. > > > > Signed-off-by: Gleb Natapov > > diff --git a/qemu-kvm.c b/qemu-kvm.c > > index be1dac2..4f7cf6d 100644 > > --- a/qemu-kvm.c > > +++ b/qemu-kvm.c > > @@ -603,6 +603,10 @@ int kvm_run(CPUState *env) > > r = pre_kvm_run(kvm, env); > > if (r) > > return r; > > + if (env->exit_request) { > > + env->exit_request = 0; > > + pthread_kill(env->kvm_cpu_state.thread, SIG_IPI); > > + } > > r = ioctl(fd, KVM_RUN, 0); > > > > if (r == -1 && errno != EINTR && errno != EAGAIN) { > > diff --git a/vl.c b/vl.c > > index 9e9c176..dcfab13 100644 > > --- a/vl.c > > +++ b/vl.c > > @@ -1817,6 +1817,7 @@ void qemu_system_reset_request(void) > > } > > if (cpu_single_env) { > > cpu_single_env->stopped = 1; > > + cpu_exit(cpu_single_env); > > } > > qemu_notify_event(); > > } > > What does this second hunk do, specifically in the context of I/O > processing? The changelog does not mention it explicitly (or I'm missing > the obvious). > It sets env->exit_request. If qemu_system_reset_request() inside io handler (happens during S3) we should not return to vcpu till resume, or terrible things will happen. You are probably right that it should have been send as different patch. -- Gleb.