mirror of
https://github.com/qemu/qemu.git
synced 2025-08-15 22:31:15 +00:00

- Unify x86/arm hw/xen/arch_hvm.h header
- Move non-system-specific 'accel/accel-ops.h' and 'accel-cpu-ops.h' to accel/
- Move KVM definitions qapi/accelerator.json
- Add @qom-type field to CpuInfoFast QAPI structure
- Display CPU model name in 'info cpus' HMP command
- Introduce @x-accel-stats QMP command
- Add 'info accel' on HMP
- Improve qemu_add_vm_change_state_handler*() docstring
- Extract TCG statistic related code to tcg-stats.c
- Implement AccelClass::get_[vcpu]_stats() handlers for TCG and HVF
- Do not dump NaN in TCG statistics
- Revert incomplete "accel/tcg: Unregister the RCU before exiting RR thread"
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmh2r4UACgkQ4+MsLN6t
wN5i6xAAkOvwFh1GmsPUdz5RxzsWoIUDvyENg6E8Axwe5tSEMRFiPjabbTQJomQg
GZt75XIS24LZFZ+hvqrLSA+dFgXTgWv08ZE81EjwjmAMBlLCOPhCgeN6C1p8100Y
scSvRJbP9k9lpA5K7et/1X4AkK2cZyh+LGJgCjr2Al2mbERpPueDF8fxqeohFvXQ
nTSks4XlA0yQ06+9r49aQAiuXvgg9lDT1wIglD2HEV7vOVs/ud+yyL8+z5YMeFzx
pSIc6wDu4PqdA46w4MZs90uTy7S/PMvBiYDEiV3tKzg0MLttvFGlT58/YjVtguTP
mNkfwIEwQtDQzoxsFIJO7yBTlTRBs95V4aIVk3pB+Gb/bideRPIkeVQvgMSEBKj7
N0pEXWOxfB9iIWO6b1utYpQ4uxeDOU/8DPUCit1IBbNgKTaJkJb77fboYk7NaB0K
KEtObAk6jMatB/xr+vUFWc4sMk9wlm72w8wcQzgKZ0xV2U3d1/Y/9nS4GvI510ev
TRQ3mKj7N319uCeId1czF6W8rillCJ2u8ZK53u+Nfp7R3PbsRSMc6IDJ1UdDUlyR
HFcWHxbcbEGhe8SnFGab4Qd6fWChcn2EaEoAJJz+Rqv0k3zcwqccNM5waCABAjTE
0S22JIHePJKcpkMLGq3EOUAQuu+8Zsol7gPCLxSAMclVqPTl9ck=
=rAav
-----END PGP SIGNATURE-----
Merge tag 'accel-20250715' of https://github.com/philmd/qemu into staging
Accelerators patches
- Unify x86/arm hw/xen/arch_hvm.h header
- Move non-system-specific 'accel/accel-ops.h' and 'accel-cpu-ops.h' to accel/
- Move KVM definitions qapi/accelerator.json
- Add @qom-type field to CpuInfoFast QAPI structure
- Display CPU model name in 'info cpus' HMP command
- Introduce @x-accel-stats QMP command
- Add 'info accel' on HMP
- Improve qemu_add_vm_change_state_handler*() docstring
- Extract TCG statistic related code to tcg-stats.c
- Implement AccelClass::get_[vcpu]_stats() handlers for TCG and HVF
- Do not dump NaN in TCG statistics
- Revert incomplete "accel/tcg: Unregister the RCU before exiting RR thread"
# -----BEGIN PGP SIGNATURE-----
#
# iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmh2r4UACgkQ4+MsLN6t
# wN5i6xAAkOvwFh1GmsPUdz5RxzsWoIUDvyENg6E8Axwe5tSEMRFiPjabbTQJomQg
# GZt75XIS24LZFZ+hvqrLSA+dFgXTgWv08ZE81EjwjmAMBlLCOPhCgeN6C1p8100Y
# scSvRJbP9k9lpA5K7et/1X4AkK2cZyh+LGJgCjr2Al2mbERpPueDF8fxqeohFvXQ
# nTSks4XlA0yQ06+9r49aQAiuXvgg9lDT1wIglD2HEV7vOVs/ud+yyL8+z5YMeFzx
# pSIc6wDu4PqdA46w4MZs90uTy7S/PMvBiYDEiV3tKzg0MLttvFGlT58/YjVtguTP
# mNkfwIEwQtDQzoxsFIJO7yBTlTRBs95V4aIVk3pB+Gb/bideRPIkeVQvgMSEBKj7
# N0pEXWOxfB9iIWO6b1utYpQ4uxeDOU/8DPUCit1IBbNgKTaJkJb77fboYk7NaB0K
# KEtObAk6jMatB/xr+vUFWc4sMk9wlm72w8wcQzgKZ0xV2U3d1/Y/9nS4GvI510ev
# TRQ3mKj7N319uCeId1czF6W8rillCJ2u8ZK53u+Nfp7R3PbsRSMc6IDJ1UdDUlyR
# HFcWHxbcbEGhe8SnFGab4Qd6fWChcn2EaEoAJJz+Rqv0k3zcwqccNM5waCABAjTE
# 0S22JIHePJKcpkMLGq3EOUAQuu+8Zsol7gPCLxSAMclVqPTl9ck=
# =rAav
# -----END PGP SIGNATURE-----
# gpg: Signature made Tue 15 Jul 2025 15:44:05 EDT
# gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE
# gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full]
# Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE
* tag 'accel-20250715' of https://github.com/philmd/qemu:
system/runstate: Document qemu_add_vm_change_state_handler_prio* in hdr
system/runstate: Document qemu_add_vm_change_state_handler()
accel/hvf: Implement AccelClass::get_vcpu_stats() handler
accel/tcg: Implement AccelClass::get_stats() handler
accel/tcg: Propagate AccelState to dump_accel_info()
accel/system: Add 'info accel' on human monitor
accel/system: Introduce @x-accel-stats QMP command
accel/tcg: Extract statistic related code to tcg-stats.c
Revert "accel/tcg: Unregister the RCU before exiting RR thread"
accel: Extract AccelClass definition to 'accel/accel-ops.h'
accel: Rename 'system/accel-ops.h' -> 'accel/accel-cpu-ops.h'
accel/tcg: Do not dump NaN statistics
hw/core/machine: Display CPU model name in 'info cpus' command
qapi/machine: Add @qom-type field to CpuInfoFast structure
qapi/accel: Move definitions related to accelerators in their own file
hw/arm/xen-pvh: Remove unnecessary 'hw/xen/arch_hvm.h' header
hw/xen/arch_hvm: Unify x86 and ARM variants
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Conflicts:
qapi/machine.json
Commit 0462da9d6b
("qapi: remove trivial "Returns:" sections")
removed trivial "Returns:". This caused a conflict with the move from
machine.json to accelerator.json.
161 lines
6.0 KiB
C
161 lines
6.0 KiB
C
#ifndef SYSTEM_RUNSTATE_H
|
|
#define SYSTEM_RUNSTATE_H
|
|
|
|
#include "qapi/qapi-types-run-state.h"
|
|
#include "qemu/notify.h"
|
|
|
|
bool runstate_check(RunState state);
|
|
void runstate_set(RunState new_state);
|
|
RunState runstate_get(void);
|
|
bool runstate_is_running(void);
|
|
bool runstate_needs_reset(void);
|
|
void runstate_replay_enable(void);
|
|
|
|
typedef void VMChangeStateHandler(void *opaque, bool running, RunState state);
|
|
typedef int VMChangeStateHandlerWithRet(void *opaque, bool running, RunState state);
|
|
|
|
/**
|
|
* qemu_add_vm_change_state_handler:
|
|
* @cb: the callback to invoke
|
|
* @opaque: user data passed to the callback
|
|
*
|
|
* Register a callback function that is invoked when the vm starts or stops
|
|
* running.
|
|
*
|
|
* Returns: an entry to be freed using qemu_del_vm_change_state_handler()
|
|
*/
|
|
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
|
|
void *opaque);
|
|
/**
|
|
* qemu_add_vm_change_state_handler_prio:
|
|
* @cb: the callback to invoke
|
|
* @opaque: user data passed to the callback
|
|
* @priority: low priorities execute first when the vm runs and the reverse is
|
|
* true when the vm stops
|
|
*
|
|
* Register a callback function that is invoked when the vm starts or stops
|
|
* running.
|
|
*
|
|
* Returns: an entry to be freed using qemu_del_vm_change_state_handler()
|
|
*/
|
|
VMChangeStateEntry *qemu_add_vm_change_state_handler_prio(
|
|
VMChangeStateHandler *cb, void *opaque, int priority);
|
|
VMChangeStateEntry *
|
|
/**
|
|
* qemu_add_vm_change_state_handler_prio_full:
|
|
* @cb: the main callback to invoke
|
|
* @prepare_cb: a callback to invoke before the main callback
|
|
* @cb_ret: the main callback to invoke with return value
|
|
* @opaque: user data passed to the callbacks
|
|
* @priority: low priorities execute first when the vm runs and the reverse is
|
|
* true when the vm stops
|
|
*
|
|
* Register a main callback function and an optional prepare callback function
|
|
* that are invoked when the vm starts or stops running. The main callback and
|
|
* the prepare callback are called in two separate phases: First all prepare
|
|
* callbacks are called and only then all main callbacks are called. As its
|
|
* name suggests, the prepare callback can be used to do some preparatory work
|
|
* before invoking the main callback.
|
|
*
|
|
* Returns: an entry to be freed using qemu_del_vm_change_state_handler()
|
|
*/
|
|
qemu_add_vm_change_state_handler_prio_full(VMChangeStateHandler *cb,
|
|
VMChangeStateHandler *prepare_cb,
|
|
VMChangeStateHandlerWithRet *cb_ret,
|
|
void *opaque, int priority);
|
|
VMChangeStateEntry *qdev_add_vm_change_state_handler(DeviceState *dev,
|
|
VMChangeStateHandler *cb,
|
|
VMChangeStateHandlerWithRet *cb_ret,
|
|
void *opaque);
|
|
VMChangeStateEntry *qdev_add_vm_change_state_handler_full(
|
|
DeviceState *dev, VMChangeStateHandler *cb, VMChangeStateHandler *prepare_cb,
|
|
VMChangeStateHandlerWithRet *cb_ret, void *opaque);
|
|
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
|
|
/**
|
|
* vm_state_notify: Notify the state of the VM
|
|
*
|
|
* @running: whether the VM is running or not.
|
|
* @state: the #RunState of the VM.
|
|
*
|
|
* Return the result of the callback which has return value.
|
|
* If no callback has return value, still return 0 and the
|
|
* upper layer should not do additional processing.
|
|
*/
|
|
int vm_state_notify(bool running, RunState state);
|
|
|
|
static inline bool shutdown_caused_by_guest(ShutdownCause cause)
|
|
{
|
|
return cause >= SHUTDOWN_CAUSE_GUEST_SHUTDOWN;
|
|
}
|
|
|
|
/*
|
|
* In a "live" state, the vcpu clock is ticking, and the runstate notifiers
|
|
* think we are running.
|
|
*/
|
|
static inline bool runstate_is_live(RunState state)
|
|
{
|
|
return state == RUN_STATE_RUNNING || state == RUN_STATE_SUSPENDED;
|
|
}
|
|
|
|
void vm_start(void);
|
|
|
|
/**
|
|
* vm_prepare_start: Prepare for starting/resuming the VM
|
|
*
|
|
* @step_pending: whether any of the CPUs is about to be single-stepped by gdb
|
|
*/
|
|
int vm_prepare_start(bool step_pending);
|
|
|
|
/**
|
|
* vm_resume: If @state is a live state, start the vm and set the state,
|
|
* else just set the state.
|
|
*
|
|
* @state: the state to restore
|
|
*/
|
|
void vm_resume(RunState state);
|
|
|
|
int vm_stop(RunState state);
|
|
int vm_stop_force_state(RunState state);
|
|
int vm_shutdown(void);
|
|
void vm_set_suspended(bool suspended);
|
|
bool vm_get_suspended(void);
|
|
|
|
typedef enum WakeupReason {
|
|
/* Always keep QEMU_WAKEUP_REASON_NONE = 0 */
|
|
QEMU_WAKEUP_REASON_NONE = 0,
|
|
QEMU_WAKEUP_REASON_RTC,
|
|
QEMU_WAKEUP_REASON_PMTIMER,
|
|
QEMU_WAKEUP_REASON_OTHER,
|
|
} WakeupReason;
|
|
|
|
void qemu_system_reset_request(ShutdownCause reason);
|
|
void qemu_system_suspend_request(void);
|
|
void qemu_register_suspend_notifier(Notifier *notifier);
|
|
bool qemu_wakeup_suspend_enabled(void);
|
|
void qemu_system_wakeup_request(WakeupReason reason, Error **errp);
|
|
void qemu_system_wakeup_enable(WakeupReason reason, bool enabled);
|
|
void qemu_register_wakeup_notifier(Notifier *notifier);
|
|
void qemu_register_wakeup_support(void);
|
|
void qemu_system_shutdown_request_with_code(ShutdownCause reason,
|
|
int exit_code);
|
|
void qemu_system_shutdown_request(ShutdownCause reason);
|
|
void qemu_system_powerdown_request(void);
|
|
void qemu_register_powerdown_notifier(Notifier *notifier);
|
|
void qemu_register_shutdown_notifier(Notifier *notifier);
|
|
void qemu_system_debug_request(void);
|
|
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);
|
|
void qemu_system_guest_panicked(GuestPanicInformation *info);
|
|
void qemu_system_guest_crashloaded(GuestPanicInformation *info);
|
|
void qemu_system_guest_pvshutdown(void);
|
|
bool qemu_system_dump_in_progress(void);
|
|
|
|
#endif
|
|
|