maintainer updates (plugins, gdbstub):
- add missing include guard comment to gdbstub.h - move gdbstub enums into separate header - move qtest_[get|set]_virtual_clock functions - allow plugins to manipulate the virtual clock - introduce an Instructions Per Second plugin - fix inject_mem_cb rw mask tests - allow qemu_plugin_vcpu_mem_cb to shortcut when no memory cbs -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmZ5OjoACgkQ+9DbCVqe KkQPlwf/VK673BAjYktuCLnf3DgWvIkkiHWwzBREP5MmseUloLjK2CQPLY/xWZED pbA/1OSzHViD/mvG5wTxwef36b9PIleWj5/YwBxGlrb/rh6hCd9004pZK4EMI3qU 53SK8Qron8TIXjey6XfmAY8rcl030GsHr0Zqf5i2pZKE5g0iaGlM3Cwkpo0SxQsu kMNqiSs9NzX7LxB+YeuAauIvC1YA2F/MGTXeFCTtO9Beyp5oV7oOI+2zIvLjlG5M Z5hKjG/STkNOteoIBGZpe1+QNpoGHSBoGE3nQnGpXb82iLx1KVBcKuQ6GoWGv1Wo hqiSh9kJX479l0mLML+IzaDsgSglbg== =pvWx -----END PGP SIGNATURE----- Merge tag 'pull-maintainer-june24-240624-1' of https://gitlab.com/stsquad/qemu into staging maintainer updates (plugins, gdbstub): - add missing include guard comment to gdbstub.h - move gdbstub enums into separate header - move qtest_[get|set]_virtual_clock functions - allow plugins to manipulate the virtual clock - introduce an Instructions Per Second plugin - fix inject_mem_cb rw mask tests - allow qemu_plugin_vcpu_mem_cb to shortcut when no memory cbs # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmZ5OjoACgkQ+9DbCVqe # KkQPlwf/VK673BAjYktuCLnf3DgWvIkkiHWwzBREP5MmseUloLjK2CQPLY/xWZED # pbA/1OSzHViD/mvG5wTxwef36b9PIleWj5/YwBxGlrb/rh6hCd9004pZK4EMI3qU # 53SK8Qron8TIXjey6XfmAY8rcl030GsHr0Zqf5i2pZKE5g0iaGlM3Cwkpo0SxQsu # kMNqiSs9NzX7LxB+YeuAauIvC1YA2F/MGTXeFCTtO9Beyp5oV7oOI+2zIvLjlG5M # Z5hKjG/STkNOteoIBGZpe1+QNpoGHSBoGE3nQnGpXb82iLx1KVBcKuQ6GoWGv1Wo # hqiSh9kJX479l0mLML+IzaDsgSglbg== # =pvWx # -----END PGP SIGNATURE----- # gpg: Signature made Mon 24 Jun 2024 02:19:54 AM PDT # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full] * tag 'pull-maintainer-june24-240624-1' of https://gitlab.com/stsquad/qemu: accel/tcg: Avoid unnecessary call overhead from qemu_plugin_vcpu_mem_cb plugins: fix inject_mem_cb rw masking contrib/plugins: add Instructions Per Second (IPS) example for cost modeling plugins: add migration blocker plugins: add time control API qtest: move qtest_{get, set}_virtual_clock to accel/qtest/qtest.c sysemu: generalise qtest_warp_clock as qemu_clock_advance_virtual_time qtest: use cpu interface in qtest_clock_warp sysemu: add set_virtual_time to accel ops plugins: Ensure register handles are not NULL gdbstub: move enums into separate header include/exec: add missing include guard comment Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
e2bc7787c8
32 changed files with 379 additions and 67 deletions
|
|
@ -1,15 +1,6 @@
|
|||
#ifndef GDBSTUB_H
|
||||
#define GDBSTUB_H
|
||||
|
||||
#define DEFAULT_GDBSTUB_PORT "1234"
|
||||
|
||||
/* GDB breakpoint/watchpoint types */
|
||||
#define GDB_BREAKPOINT_SW 0
|
||||
#define GDB_BREAKPOINT_HW 1
|
||||
#define GDB_WATCHPOINT_WRITE 2
|
||||
#define GDB_WATCHPOINT_READ 3
|
||||
#define GDB_WATCHPOINT_ACCESS 4
|
||||
|
||||
typedef struct GDBFeature {
|
||||
const char *xmlname;
|
||||
const char *xml;
|
||||
|
|
@ -144,4 +135,4 @@ void gdb_set_stop_cpu(CPUState *cpu);
|
|||
/* in gdbstub-xml.c, generated by scripts/feature_to_c.py */
|
||||
extern const GDBFeature gdb_static_features[];
|
||||
|
||||
#endif
|
||||
#endif /* GDBSTUB_H */
|
||||
|
|
|
|||
21
include/gdbstub/enums.h
Normal file
21
include/gdbstub/enums.h
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* gdbstub enums
|
||||
*
|
||||
* Copyright (c) 2024 Linaro Ltd
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#ifndef GDBSTUB_ENUMS_H
|
||||
#define GDBSTUB_ENUMS_H
|
||||
|
||||
#define DEFAULT_GDBSTUB_PORT "1234"
|
||||
|
||||
/* GDB breakpoint/watchpoint types */
|
||||
#define GDB_BREAKPOINT_SW 0
|
||||
#define GDB_BREAKPOINT_HW 1
|
||||
#define GDB_WATCHPOINT_WRITE 2
|
||||
#define GDB_WATCHPOINT_READ 3
|
||||
#define GDB_WATCHPOINT_ACCESS 4
|
||||
|
||||
#endif /* GDBSTUB_ENUMS_H */
|
||||
|
|
@ -661,6 +661,33 @@ void qemu_plugin_register_vcpu_mem_inline_per_vcpu(
|
|||
qemu_plugin_u64 entry,
|
||||
uint64_t imm);
|
||||
|
||||
/**
|
||||
* qemu_plugin_request_time_control() - request the ability to control time
|
||||
*
|
||||
* This grants the plugin the ability to control system time. Only one
|
||||
* plugin can control time so if multiple plugins request the ability
|
||||
* all but the first will fail.
|
||||
*
|
||||
* Returns an opaque handle or NULL if fails
|
||||
*/
|
||||
QEMU_PLUGIN_API
|
||||
const void *qemu_plugin_request_time_control(void);
|
||||
|
||||
/**
|
||||
* qemu_plugin_update_ns() - update system emulation time
|
||||
* @handle: opaque handle returned by qemu_plugin_request_time_control()
|
||||
* @time: time in nanoseconds
|
||||
*
|
||||
* This allows an appropriately authorised plugin (i.e. holding the
|
||||
* time control handle) to move system time forward to @time. For
|
||||
* user-mode emulation the time is not changed by this as all reported
|
||||
* time comes from the host kernel.
|
||||
*
|
||||
* Start time is 0.
|
||||
*/
|
||||
QEMU_PLUGIN_API
|
||||
void qemu_plugin_update_ns(const void *handle, int64_t time);
|
||||
|
||||
typedef void
|
||||
(*qemu_plugin_vcpu_syscall_cb_t)(qemu_plugin_id_t id, unsigned int vcpu_index,
|
||||
int64_t num, uint64_t a1, uint64_t a2,
|
||||
|
|
|
|||
|
|
@ -245,6 +245,21 @@ bool qemu_clock_run_timers(QEMUClockType type);
|
|||
*/
|
||||
bool qemu_clock_run_all_timers(void);
|
||||
|
||||
/**
|
||||
* qemu_clock_advance_virtual_time(): advance the virtual time tick
|
||||
* @target_ns: target time in nanoseconds
|
||||
*
|
||||
* This function is used where the control of the flow of time has
|
||||
* been delegated to outside the clock subsystem (be it qtest, icount
|
||||
* or some other external source). You can ask the clock system to
|
||||
* return @early at the first expired timer.
|
||||
*
|
||||
* Time can only move forward, attempts to reverse time would lead to
|
||||
* an error.
|
||||
*
|
||||
* Returns: new virtual time.
|
||||
*/
|
||||
int64_t qemu_clock_advance_virtual_time(int64_t target_ns);
|
||||
|
||||
/*
|
||||
* QEMUTimerList
|
||||
|
|
|
|||
|
|
@ -20,7 +20,12 @@
|
|||
typedef struct AccelOpsClass AccelOpsClass;
|
||||
DECLARE_CLASS_CHECKERS(AccelOpsClass, ACCEL_OPS, TYPE_ACCEL_OPS)
|
||||
|
||||
/* cpus.c operations interface */
|
||||
/**
|
||||
* struct AccelOpsClass - accelerator interfaces
|
||||
*
|
||||
* This structure is used to abstract accelerator differences from the
|
||||
* core CPU code. Not all have to be implemented.
|
||||
*/
|
||||
struct AccelOpsClass {
|
||||
/*< private >*/
|
||||
ObjectClass parent_class;
|
||||
|
|
@ -44,7 +49,18 @@ struct AccelOpsClass {
|
|||
|
||||
void (*handle_interrupt)(CPUState *cpu, int mask);
|
||||
|
||||
/**
|
||||
* @get_virtual_clock: fetch virtual clock
|
||||
* @set_virtual_clock: set virtual clock
|
||||
*
|
||||
* These allow the timer subsystem to defer to the accelerator to
|
||||
* fetch time. The set function is needed if the accelerator wants
|
||||
* to track the changes to time as the timer is warped through
|
||||
* various timer events.
|
||||
*/
|
||||
int64_t (*get_virtual_clock)(void);
|
||||
void (*set_virtual_clock)(int64_t time);
|
||||
|
||||
int64_t (*get_elapsed_ticks)(void);
|
||||
|
||||
/* gdbstub hooks */
|
||||
|
|
|
|||
|
|
@ -96,8 +96,9 @@ int64_t cpu_get_clock(void);
|
|||
|
||||
void qemu_timer_notify_cb(void *opaque, QEMUClockType type);
|
||||
|
||||
/* get the VIRTUAL clock and VM elapsed ticks via the cpus accel interface */
|
||||
/* get/set VIRTUAL clock and VM elapsed ticks via the cpus accel interface */
|
||||
int64_t cpus_get_virtual_clock(void);
|
||||
void cpus_set_virtual_clock(int64_t new_time);
|
||||
int64_t cpus_get_elapsed_ticks(void);
|
||||
|
||||
#endif /* SYSEMU_CPU_TIMERS_H */
|
||||
|
|
|
|||
|
|
@ -34,8 +34,6 @@ void qtest_server_init(const char *qtest_chrdev, const char *qtest_log, Error **
|
|||
void qtest_server_set_send_handler(void (*send)(void *, const char *),
|
||||
void *opaque);
|
||||
void qtest_server_inproc_recv(void *opaque, const char *buf);
|
||||
|
||||
int64_t qtest_get_virtual_clock(void);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue