kvm tools: Make keyboard termination go through regular termination path

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@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
Sasha Levin
2011-08-11 15:43:54 +03:00
committed by Will Deacon
parent 3395f880e8
commit c23d9748e4
3 changed files with 12 additions and 11 deletions
+5 -4
View File
@@ -722,10 +722,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;
}
+6 -2
View File
@@ -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;
+1 -5
View File
@@ -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");
exit(1);
}
if (c == term_escape_char)
return c;
}