The abort_on_panic argument for qemu_system_guest_panicked allows callers to request an immediate abort() of the process.
Signed-off-by: Sergio Lopez <s...@redhat.com> --- accel/kvm/kvm-all.c | 2 +- hw/misc/pvpanic.c | 2 +- hw/ppc/spapr_rtas.c | 2 +- include/sysemu/sysemu.h | 3 ++- target/s390x/helper.c | 2 +- target/s390x/kvm.c | 2 +- vl.c | 10 ++++++++-- 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index f290f487a5..fe90789a27 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -1971,7 +1971,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_get_crash_info(cpu), false); qemu_mutex_unlock_iothread(); ret = 0; break; diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c index b26250dec9..4fb074df06 100644 --- a/hw/misc/pvpanic.c +++ b/hw/misc/pvpanic.c @@ -38,7 +38,7 @@ static void handle_event(int event) } if (event & PVPANIC_PANICKED) { - qemu_system_guest_panicked(NULL); + qemu_system_guest_panicked(NULL, false); return; } } diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c index 4bb939d3d1..775a7bd716 100644 --- a/hw/ppc/spapr_rtas.c +++ b/hw/ppc/spapr_rtas.c @@ -294,7 +294,7 @@ static void rtas_ibm_os_term(PowerPCCPU *cpu, target_ulong args, uint32_t nret, target_ulong rets) { - qemu_system_guest_panicked(NULL); + qemu_system_guest_panicked(NULL, false); rtas_st(rets, 0, RTAS_OUT_SUCCESS); } diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 31612caf10..2d8e7371af 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -83,7 +83,8 @@ ShutdownCause qemu_shutdown_requested_get(void); ShutdownCause qemu_reset_requested_get(void); void qemu_system_killed(int signal, pid_t pid); void qemu_system_reset(ShutdownCause reason); -void qemu_system_guest_panicked(GuestPanicInformation *info); +void qemu_system_guest_panicked(GuestPanicInformation *info, + bool abort_on_panic); void qemu_add_exit_notifier(Notifier *notify); void qemu_remove_exit_notifier(Notifier *notify); diff --git a/target/s390x/helper.c b/target/s390x/helper.c index 35d9741918..16d88f37f8 100644 --- a/target/s390x/helper.c +++ b/target/s390x/helper.c @@ -89,7 +89,7 @@ void s390_handle_wait(S390CPU *cpu) if (is_special_wait_psw(cpu->env.psw.addr)) { qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN); } else { - qemu_system_guest_panicked(NULL); + qemu_system_guest_panicked(NULL, false); } #endif } diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index 9b8b59f2a2..9948f8c0cb 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -1567,7 +1567,7 @@ static void unmanageable_intercept(S390CPU *cpu, const char *str, int pswoffset) str, cs->cpu_index, ldq_phys(cs->as, cpu->env.psa + pswoffset), ldq_phys(cs->as, cpu->env.psa + pswoffset + 8)); s390_cpu_halt(cpu); - qemu_system_guest_panicked(NULL); + qemu_system_guest_panicked(NULL, false); } /* try to detect pgm check loops */ diff --git a/vl.c b/vl.c index d3a5c5d021..71c1456ea7 100644 --- a/vl.c +++ b/vl.c @@ -1751,9 +1751,15 @@ void qemu_system_reset(ShutdownCause reason) cpu_synchronize_all_post_reset(); } -void qemu_system_guest_panicked(GuestPanicInformation *info) +void qemu_system_guest_panicked(GuestPanicInformation *info, + bool abort_on_panic) { - qemu_log_mask(LOG_GUEST_ERROR, "Guest crashed\n"); + if (abort_on_panic) { + qemu_log_mask(LOG_GUEST_ERROR, "Guest crashed, aborting\n"); + abort(); + } else { + qemu_log_mask(LOG_GUEST_ERROR, "Guest crashed\n"); + } if (current_cpu) { current_cpu->crash_occurred = true; -- 2.14.3