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 <levinsasha...@gmail.com>
---
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?
- exit(1);
- }
if (c == term_escape_char)
return c;
}
--
1.7.6
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html