From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: Re: [PATCH 1/3] kvm tools: Make keyboard termination go through regular termination path Date: Thu, 11 Aug 2011 16:41:26 +0300 Message-ID: <1313070086.3456.17.camel@lappy> References: <1313066636-28332-1-git-send-email-levinsasha928@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, mingo@elte.hu, asias.hejun@gmail.com, gorcunov@gmail.com To: Pekka Enberg Return-path: Received: from mail-fx0-f46.google.com ([209.85.161.46]:34893 "EHLO mail-fx0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751020Ab1HKNm1 (ORCPT ); Thu, 11 Aug 2011 09:42:27 -0400 Received: by fxh19 with SMTP id 19so1667352fxh.19 for ; Thu, 11 Aug 2011 06:42:26 -0700 (PDT) In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On Thu, 2011-08-11 at 16:39 +0300, Pekka Enberg wrote: > On Thu, 11 Aug 2011, Sasha Levin wrote: > > Instead of exiting directly when a user enters 'ctrl x + a', go through > > the regular termination path by stopping all VCPUs and letting the > > main thread handle it. > > > > Signed-off-by: Sasha Levin > > --- > > tools/kvm/builtin-run.c | 9 +++++---- > > tools/kvm/kvm-cpu.c | 8 ++++++-- > > tools/kvm/term.c | 6 +----- > > 3 files changed, 12 insertions(+), 11 deletions(-) > > > > diff --git a/tools/kvm/builtin-run.c b/tools/kvm/builtin-run.c > > index fa5de27..c7ed3fa 100644 > > --- a/tools/kvm/builtin-run.c > > +++ b/tools/kvm/builtin-run.c > > @@ -719,10 +719,11 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix) > > exit_code = 1; > > > > for (i = 1; i < nrcpus; i++) { > > - pthread_kill(kvm_cpus[i]->thread, SIGKVMEXIT); > > - if (pthread_join(kvm_cpus[i]->thread, &ret) != 0) > > - die("pthread_join"); > > - > > + if (kvm_cpus[i]->is_running) { > > + pthread_kill(kvm_cpus[i]->thread, SIGKVMEXIT); > > + if (pthread_join(kvm_cpus[i]->thread, &ret) != 0) > > + die("pthread_join"); > > + } > > if (ret != NULL) > > exit_code = 1; > > } > > diff --git a/tools/kvm/kvm-cpu.c b/tools/kvm/kvm-cpu.c > > index 2f5d23c..fc0d6d4 100644 > > --- a/tools/kvm/kvm-cpu.c > > +++ b/tools/kvm/kvm-cpu.c > > @@ -421,7 +421,11 @@ static void kvm_cpu__handle_coalesced_mmio(struct kvm_cpu *cpu) > > > > void kvm_cpu__reboot(void) > > { > > - pthread_kill(kvm_cpus[0]->thread, SIGKVMEXIT); > > + int i; > > + > > + for (i = 0; i < KVM_NR_CPUS; i++) > > + if (kvm_cpus[i]) > > + pthread_kill(kvm_cpus[i]->thread, SIGKVMEXIT); > > } > > > > int kvm_cpu__start(struct kvm_cpu *cpu) > > @@ -442,7 +446,7 @@ int kvm_cpu__start(struct kvm_cpu *cpu) > > if (cpu->kvm->single_step) > > kvm_cpu__enable_singlestep(cpu); > > > > - for (;;) { > > + while (cpu->is_running) { > > if (cpu->paused) { > > kvm__notify_paused(); > > cpu->paused = 0; > > diff --git a/tools/kvm/term.c b/tools/kvm/term.c > > index 2a3e1f0..fa4382d 100644 > > --- a/tools/kvm/term.c > > +++ b/tools/kvm/term.c > > @@ -34,12 +34,8 @@ int term_getc(int who) > > > > if (term_got_escape) { > > term_got_escape = false; > > - if (c == 'x') { > > + if (c == 'x') > > kvm_cpu__reboot(); > > - kvm__delete(kvm); > > - printf("\n # KVM session terminated.\n"); > > This is a nice cleanup but I'm not happy about the fact that you also nuke > the above printf(). Is there a simple way to keep it there? > You get that printf from the normal exit path. > > - exit(1); > > - } > > if (c == term_escape_char) > > return c; > > } > > -- > > 1.7.6 > > > > -- Sasha.