aboutsummaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2011-03-22 21:32:46 +0200
committerWill Deacon <will.deacon@arm.com>2015-06-01 16:39:41 +0100
commit8315b1925c890cfc0ec78659d47fc7da3988df00 (patch)
tree6b98ed1f7e420d5f909eb960131364add93cef88 /main.c
parent03110ff36b3587a67d751f3b1529882d29aa83cd (diff)
downloadkvmtool-8315b1925c890cfc0ec78659d47fc7da3988df00.tar.gz
tools/kvm: Exit gracefully upon KVM_EXIT_SHUTDOWN
This patch changes the userspace hypervisor to exit gracefully upon KVM_EXIT_SHUTDOWN which is triggered when guest userspace is shut down. Signed-off-by: Pekka Enberg <penberg@kernel.org>
Diffstat (limited to 'main.c')
-rw-r--r--main.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/main.c b/main.c
index cac8d307..d70b4466 100644
--- a/main.c
+++ b/main.c
@@ -190,7 +190,7 @@ int main(int argc, char *argv[])
kvm->kvm_run->io.count);
if (!ret)
- goto exit_kvm;
+ goto panic_kvm;
break;
}
case KVM_EXIT_MMIO: {
@@ -203,30 +203,34 @@ int main(int argc, char *argv[])
kvm->kvm_run->mmio.is_write);
if (!ret)
- goto exit_kvm;
+ goto panic_kvm;
break;
}
case KVM_EXIT_INTR: {
serial8250__interrupt(kvm);
break;
}
- default:
+ case KVM_EXIT_SHUTDOWN:
goto exit_kvm;
+ default:
+ goto panic_kvm;
}
}
-
exit_kvm:
+ kvm__delete(kvm);
+ return 0;
+
+panic_kvm:
fprintf(stderr, "KVM exit reason: %" PRIu32 " (\"%s\")\n",
kvm->kvm_run->exit_reason, kvm_exit_reasons[kvm->kvm_run->exit_reason]);
if (kvm->kvm_run->exit_reason == KVM_EXIT_UNKNOWN)
fprintf(stderr, "KVM exit code: 0x%" PRIu64 "\n",
kvm->kvm_run->hw.hardware_exit_reason);
-
kvm__show_registers(kvm);
kvm__show_code(kvm);
kvm__show_page_tables(kvm);
kvm__delete(kvm);
- return 0;
+ return 1;
}