qapi: Add exit-failure PanicAction

Currently QEMU exits with code 0 on both panic an shutdown. For tests
it is useful to return 1 on panic, so that it counts as a test
failure.

Introduce a new exit-failure PanicAction that makes main() return
EXIT_FAILURE. Tests can use -action panic=exit-failure option to
activate this behavior.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20220725223746.227063-2-iii@linux.ibm.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
This commit is contained in:
Ilya Leoshkevich 2022-07-26 00:37:45 +02:00 committed by Alex Bennée
parent 9b1268f55c
commit 0882caf4d6
5 changed files with 23 additions and 9 deletions

View file

@ -482,7 +482,8 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
!!info, info);
vm_stop(RUN_STATE_GUEST_PANICKED);
} else if (panic_action == PANIC_ACTION_SHUTDOWN) {
} else if (panic_action == PANIC_ACTION_SHUTDOWN ||
panic_action == PANIC_ACTION_EXIT_FAILURE) {
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
!!info, info);
vm_stop(RUN_STATE_GUEST_PANICKED);
@ -662,7 +663,7 @@ void qemu_system_debug_request(void)
qemu_notify_event();
}
static bool main_loop_should_exit(void)
static bool main_loop_should_exit(int *status)
{
RunState r;
ShutdownCause request;
@ -680,6 +681,10 @@ static bool main_loop_should_exit(void)
if (shutdown_action == SHUTDOWN_ACTION_PAUSE) {
vm_stop(RUN_STATE_SHUTDOWN);
} else {
if (request == SHUTDOWN_CAUSE_GUEST_PANIC &&
panic_action == PANIC_ACTION_EXIT_FAILURE) {
*status = EXIT_FAILURE;
}
return true;
}
}
@ -715,12 +720,14 @@ static bool main_loop_should_exit(void)
return false;
}
void qemu_main_loop(void)
int qemu_main_loop(void)
{
int status = EXIT_SUCCESS;
#ifdef CONFIG_PROFILER
int64_t ti;
#endif
while (!main_loop_should_exit()) {
while (!main_loop_should_exit(&status)) {
#ifdef CONFIG_PROFILER
ti = profile_getclock();
#endif
@ -729,6 +736,8 @@ void qemu_main_loop(void)
dev_time += profile_getclock() - ti;
#endif
}
return status;
}
void qemu_add_exit_notifier(Notifier *notify)