@@ -66,7 +66,7 @@ int qemu_shutdown_requested_get(void);
int qemu_reset_requested_get(void);
void qemu_system_killed(int signal, pid_t pid);
void qemu_system_reset(bool report);
-void qemu_system_guest_panicked(GuestPanicInformation *info);
+void qemu_system_guest_panicked(CPUState *cpu);
size_t qemu_target_page_bits(void);
void qemu_add_exit_notifier(Notifier *notify);
@@ -2071,7 +2071,7 @@ int kvm_cpu_exec(CPUState *cpu)
case KVM_SYSTEM_EVENT_CRASH:
kvm_cpu_synchronize_state(cpu);
qemu_mutex_lock_iothread();
- qemu_system_guest_panicked(cpu_get_crash_info(cpu));
+ qemu_system_guest_panicked(cpu);
qemu_mutex_unlock_iothread();
ret = 0;
break;
@@ -1680,13 +1680,20 @@ void qemu_system_reset(bool report)
cpu_synchronize_all_post_reset();
}
-void qemu_system_guest_panicked(GuestPanicInformation *info)
+void qemu_system_guest_panicked(CPUState *cpu)
{
+ GuestPanicInformation *info = NULL;
+
qemu_log_mask(LOG_GUEST_ERROR, "Guest crashed\n");
- if (current_cpu) {
- current_cpu->crash_occurred = true;
+ if (!cpu) {
+ cpu = current_cpu;
+ }
+ if (cpu) {
+ cpu->crash_occurred = true;
+ info = cpu_get_crash_info(cpu);
}
+
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
!!info, info, &error_abort);
vm_stop(RUN_STATE_GUEST_PANICKED);