@@ -534,6 +534,20 @@ static void __init kvm_apf_trap_init(void)
set_intr_gate(14, &async_page_fault);
}
+static int kvm_guest_panic(struct notifier_block *nb, unsigned long l, void *p)
+{
+ kvm_hypercall0(KVM_HC_PANIC);
+ return NOTIFY_DONE;
+}
+
+static struct notifier_block kvm_guest_paniced = {
+ .notifier_call = kvm_guest_panic
+};
+
+static void kvm_guest_panic_handler_init(void) {
+ atomic_notifier_chain_register(&panic_notifier_list, &kvm_guest_paniced);
+}
+
void __init kvm_guest_init(void)
{
int i;
@@ -541,6 +555,8 @@ void __init kvm_guest_init(void)
if (!kvm_para_available())
return;
+ kvm_guest_panic_handler_init();
+
paravirt_ops_setup();
register_reboot_notifier(&kvm_pv_reboot_nb);
for (i = 0; i < KVM_TASK_SLEEP_HASHSIZE; i++)
Call KVM hypercall KVM_HC_PANIC if guest kernel calls panic() to signal the host that the guest paniced. Depends on CONFIG_KVM_GUEST set. Signed-off-by: Daniel Gollub <gollub@b1-systems.de> --- arch/x86/kernel/kvm.c | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-)