plugins: add userdata to qemu_plugin_register_vcpu_syscall_cb

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
Link: https://lore.kernel.org/qemu-devel/20260615193526.2883349-19-pierrick.bouvier@oss.qualcomm.com
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
This commit is contained in:
Pierrick Bouvier
2026-06-15 12:35:17 -07:00
parent 0d71602089
commit 1abe87fd59
4 changed files with 13 additions and 7 deletions

View File

@@ -840,12 +840,14 @@ void qemu_plugin_update_ns(const void *handle, int64_t time);
* @a6: the 6th syscall argument
* @a7: the 7th syscall argument
* @a8: the 8th syscall argument
* @userdata: user data for callback
*/
typedef void
(*qemu_plugin_vcpu_syscall_cb_t)(unsigned int vcpu_index,
int64_t num, uint64_t a1, uint64_t a2,
uint64_t a3, uint64_t a4, uint64_t a5,
uint64_t a6, uint64_t a7, uint64_t a8);
uint64_t a6, uint64_t a7, uint64_t a8,
void *userdata);
/**
* typedef qemu_plugin_vcpu_syscall_filter_cb_t - vCPU syscall filter callback
@@ -891,13 +893,15 @@ typedef void
* qemu_plugin_register_vcpu_syscall_cb() - register a syscall entry callback
* @id: plugin id
* @cb: callback of type qemu_plugin_vcpu_syscall_cb_t
* @userdata: user data for callback
*
* This registers a callback for every syscall executed by the guest. The @cb
* function is executed before a syscall is handled by the host.
*/
QEMU_PLUGIN_API
void qemu_plugin_register_vcpu_syscall_cb(qemu_plugin_id_t id,
qemu_plugin_vcpu_syscall_cb_t cb);
qemu_plugin_vcpu_syscall_cb_t cb,
void *userdata);
/**
* qemu_plugin_register_vcpu_syscall_filter_cb() - register a syscall filter

View File

@@ -202,9 +202,10 @@ void qemu_plugin_register_vcpu_tb_trans_cb(qemu_plugin_id_t id,
}
void qemu_plugin_register_vcpu_syscall_cb(qemu_plugin_id_t id,
qemu_plugin_vcpu_syscall_cb_t cb)
qemu_plugin_vcpu_syscall_cb_t cb,
void *userdata)
{
plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_SYSCALL, cb);
plugin_register_cb_udata(id, QEMU_PLUGIN_EV_VCPU_SYSCALL, cb, userdata);
}
void

View File

@@ -534,7 +534,7 @@ qemu_plugin_vcpu_syscall(CPUState *cpu, int64_t num, uint64_t a1, uint64_t a2,
qemu_plugin_vcpu_syscall_cb_t func = cb->f.vcpu_syscall;
qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC);
func(cpu->cpu_index, num, a1, a2, a3, a4, a5, a6, a7, a8);
func(cpu->cpu_index, num, a1, a2, a3, a4, a5, a6, a7, a8, cb->udata);
qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS);
}
}

View File

@@ -128,7 +128,8 @@ static void hexdump(const GByteArray *data)
static void vcpu_syscall(unsigned int vcpu_index,
int64_t num, uint64_t a1, uint64_t a2,
uint64_t a3, uint64_t a4, uint64_t a5,
uint64_t a6, uint64_t a7, uint64_t a8)
uint64_t a6, uint64_t a7, uint64_t a8,
void *userdata)
{
if (statistics) {
SyscallStats *entry;
@@ -271,7 +272,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
memory_buffer = g_byte_array_new();
}
qemu_plugin_register_vcpu_syscall_cb(id, vcpu_syscall);
qemu_plugin_register_vcpu_syscall_cb(id, vcpu_syscall, NULL);
qemu_plugin_register_vcpu_syscall_ret_cb(id, vcpu_syscall_ret);
qemu_plugin_register_vcpu_syscall_filter_cb(id, vcpu_syscall_filter);
qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);