@samitouri / QOSamiQemu / commits / 25c6c15f7d

plugins: add userdata to qemu_plugin_register_vcpu_syscall_ret_cb

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260615193526.2883349-23-pierrick.bouvier@oss.qualcomm.com Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>

Pierrick Bouvier committed Jun 15, 2026 at 12:35 UTC 25c6c15f7d105b8a310ebd1507349caf6011c000
4 files changed +13 -7
include/plugins/qemu-plugin.h
+6 -2
@@ -882,10 +882,12 @@ typedef bool
882 * @vcpu_index: the executing vCPU
883 * @num: the syscall number
884 * @ret: the syscall return value
885 + * @userdata: user data for callback
886 */
887 typedef void
888 (*qemu_plugin_vcpu_syscall_ret_cb_t)(unsigned int vcpu_index,
888 - int64_t num, int64_t ret);
889 + int64_t num, int64_t ret,
890 + void *userdata);
891
892 /**
893 * qemu_plugin_register_vcpu_syscall_cb() - register a syscall entry callback
@@ -925,6 +927,7 @@ qemu_plugin_register_vcpu_syscall_filter_cb(qemu_plugin_id_t id,
927 * callback
928 * @id: plugin id
929 * @cb: callback of type qemu_plugin_vcpu_syscall_ret_cb_t
930 + * @userdata: user data for callback
931 *
932 * This registers a callback for every syscall executed by the guest. The @cb
933 * function is executed upon return from the host syscall before execution is
@@ -933,7 +936,8 @@ qemu_plugin_register_vcpu_syscall_filter_cb(qemu_plugin_id_t id,
936 QEMU_PLUGIN_API
937 void
938 qemu_plugin_register_vcpu_syscall_ret_cb(qemu_plugin_id_t id,
936 - qemu_plugin_vcpu_syscall_ret_cb_t cb);
939 + qemu_plugin_vcpu_syscall_ret_cb_t cb,
940 + void *userdata);
941
942 /**
943 * qemu_plugin_insn_disas() - return disassembly string for instruction
plugins/api.c
+3 -2
@@ -210,9 +210,10 @@ void qemu_plugin_register_vcpu_syscall_cb(qemu_plugin_id_t id,
210
211 void
212 qemu_plugin_register_vcpu_syscall_ret_cb(qemu_plugin_id_t id,
213 - qemu_plugin_vcpu_syscall_ret_cb_t cb)
213 + qemu_plugin_vcpu_syscall_ret_cb_t cb,
214 + void *userdata)
215 {
215 - plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_SYSCALL_RET, cb);
216 + plugin_register_cb_udata(id, QEMU_PLUGIN_EV_VCPU_SYSCALL_RET, cb, userdata);
217 }
218
219 void
plugins/core.c
+1 -1
@@ -558,7 +558,7 @@ void qemu_plugin_vcpu_syscall_ret(CPUState *cpu, int64_t num, int64_t ret)
558 qemu_plugin_vcpu_syscall_ret_cb_t func = cb->f.vcpu_syscall_ret;
559
560 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC);
561 - func(cpu->cpu_index, num, ret);
561 + func(cpu->cpu_index, num, ret, cb->udata);
562 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS);
563 }
564 }
tests/tcg/plugins/syscall.c
+3 -2
@@ -152,7 +152,8 @@ static void vcpu_syscall(unsigned int vcpu_index,
152 }
153
154 static void vcpu_syscall_ret(unsigned int vcpu_idx,
155 - int64_t num, int64_t ret)
155 + int64_t num, int64_t ret,
156 + void *userdata)
157 {
158 if (statistics) {
159 SyscallStats *entry;
@@ -273,7 +274,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
274 }
275
276 qemu_plugin_register_vcpu_syscall_cb(id, vcpu_syscall, NULL);
276 - qemu_plugin_register_vcpu_syscall_ret_cb(id, vcpu_syscall_ret);
277 + qemu_plugin_register_vcpu_syscall_ret_cb(id, vcpu_syscall_ret, NULL);
278 qemu_plugin_register_vcpu_syscall_filter_cb(id, vcpu_syscall_filter, NULL);
279 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
280 return 0;