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 <levinsasha928@xxxxxxxxx> > > --- > > 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. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html