hw/misc/sifive_test.c: replace exit calls with proper shutdown

This replaces the exit calls by shutdown requests, ensuring a proper
cleanup of Qemu. Otherwise, some connections like gdb could be broken
before its final packet ("Wxx") is being sent. This part, being done
inside qemu_cleanup function, can be reached only when the main loop
exits after a shutdown request.

Signed-off-by: Clément Chigot <chigot@adacore.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20231003071427.188697-4-chigot@adacore.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
Clément Chigot 2023-10-03 09:14:25 +02:00 committed by Alistair Francis
parent 66bbe3e9b4
commit 215128e44b

View File

@ -25,6 +25,7 @@
#include "qemu/module.h" #include "qemu/module.h"
#include "sysemu/runstate.h" #include "sysemu/runstate.h"
#include "hw/misc/sifive_test.h" #include "hw/misc/sifive_test.h"
#include "sysemu/sysemu.h"
static uint64_t sifive_test_read(void *opaque, hwaddr addr, unsigned int size) static uint64_t sifive_test_read(void *opaque, hwaddr addr, unsigned int size)
{ {
@ -39,9 +40,13 @@ static void sifive_test_write(void *opaque, hwaddr addr,
int code = (val64 >> 16) & 0xffff; int code = (val64 >> 16) & 0xffff;
switch (status) { switch (status) {
case FINISHER_FAIL: case FINISHER_FAIL:
exit(code); qemu_system_shutdown_request_with_code(
SHUTDOWN_CAUSE_GUEST_PANIC, code);
return;
case FINISHER_PASS: case FINISHER_PASS:
exit(0); qemu_system_shutdown_request_with_code(
SHUTDOWN_CAUSE_GUEST_SHUTDOWN, code);
return;
case FINISHER_RESET: case FINISHER_RESET:
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
return; return;