softmmu/runstate: add a way to detect force shutdowns
This can be useful for devices that might take too long to shut down gracefully, but may have a way to shutdown quickly otherwise if needed or explicitly requested by a force shutdown. For now we only consider SIGTERM or the QMP quit() command a force shutdown, since those bypass the guest entirely and are equivalent to pulling the power plug. Signed-off-by: Daniil Tatianin <d-tatianin@yandex-team.ru> Message-Id: <20250609212547.2859224-2-d-tatianin@yandex-team.ru> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
9f749129e2
commit
260f826cf8
2 changed files with 11 additions and 0 deletions
|
|
@ -107,6 +107,7 @@ void qemu_system_vmstop_request(RunState reason);
|
|||
void qemu_system_vmstop_request_prepare(void);
|
||||
bool qemu_vmstop_requested(RunState *r);
|
||||
ShutdownCause qemu_shutdown_requested_get(void);
|
||||
bool qemu_force_shutdown_requested(void);
|
||||
ShutdownCause qemu_reset_requested_get(void);
|
||||
void qemu_system_killed(int signal, pid_t pid);
|
||||
void qemu_system_reset(ShutdownCause reason);
|
||||
|
|
|
|||
|
|
@ -437,6 +437,7 @@ static ShutdownCause reset_requested;
|
|||
static ShutdownCause shutdown_requested;
|
||||
static int shutdown_exit_code = EXIT_SUCCESS;
|
||||
static int shutdown_signal;
|
||||
static bool force_shutdown;
|
||||
static pid_t shutdown_pid;
|
||||
static int powerdown_requested;
|
||||
static int debug_requested;
|
||||
|
|
@ -457,6 +458,11 @@ ShutdownCause qemu_shutdown_requested_get(void)
|
|||
return shutdown_requested;
|
||||
}
|
||||
|
||||
bool qemu_force_shutdown_requested(void)
|
||||
{
|
||||
return force_shutdown;
|
||||
}
|
||||
|
||||
ShutdownCause qemu_reset_requested_get(void)
|
||||
{
|
||||
return reset_requested;
|
||||
|
|
@ -805,6 +811,7 @@ void qemu_system_killed(int signal, pid_t pid)
|
|||
* we are in a signal handler.
|
||||
*/
|
||||
shutdown_requested = SHUTDOWN_CAUSE_HOST_SIGNAL;
|
||||
force_shutdown = true;
|
||||
qemu_notify_event();
|
||||
}
|
||||
|
||||
|
|
@ -820,6 +827,9 @@ void qemu_system_shutdown_request(ShutdownCause reason)
|
|||
trace_qemu_system_shutdown_request(reason);
|
||||
replay_shutdown_request(reason);
|
||||
shutdown_requested = reason;
|
||||
if (reason == SHUTDOWN_CAUSE_HOST_QMP_QUIT) {
|
||||
force_shutdown = true;
|
||||
}
|
||||
qemu_notify_event();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue