@samitouri / QOSamiQemu / commits / 1abe87fd59

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>

Pierrick Bouvier committed Jun 15, 2026 at 12:35 UTC 1abe87fd5924b1ecd023f332b5241d9100e83522
4 files changed +13 -7
include/plugins/qemu-plugin.h
+6 -2
@@ -840,12 +840,14 @@ void qemu_plugin_update_ns(const void *handle, int64_t time);
840 * @a6: the 6th syscall argument
841 * @a7: the 7th syscall argument
842 * @a8: the 8th syscall argument
843 + * @userdata: user data for callback
844 */
845 typedef void
846 (*qemu_plugin_vcpu_syscall_cb_t)(unsigned int vcpu_index,
847 int64_t num, uint64_t a1, uint64_t a2,
848 uint64_t a3, uint64_t a4, uint64_t a5,
848 - uint64_t a6, uint64_t a7, uint64_t a8);
849 + uint64_t a6, uint64_t a7, uint64_t a8,
850 + void *userdata);
851
852 /**
853 * typedef qemu_plugin_vcpu_syscall_filter_cb_t - vCPU syscall filter callback
@@ -891,13 +893,15 @@ typedef void
893 * qemu_plugin_register_vcpu_syscall_cb() - register a syscall entry callback
894 * @id: plugin id
895 * @cb: callback of type qemu_plugin_vcpu_syscall_cb_t
896 + * @userdata: user data for callback
897 *
898 * This registers a callback for every syscall executed by the guest. The @cb
899 * function is executed before a syscall is handled by the host.
900 */
901 QEMU_PLUGIN_API
902 void qemu_plugin_register_vcpu_syscall_cb(qemu_plugin_id_t id,
900 - qemu_plugin_vcpu_syscall_cb_t cb);
903 + qemu_plugin_vcpu_syscall_cb_t cb,
904 + void *userdata);
905
906 /**
907 * qemu_plugin_register_vcpu_syscall_filter_cb() - register a syscall filter
plugins/api.c
+3 -2
@@ -202,9 +202,10 @@ void qemu_plugin_register_vcpu_tb_trans_cb(qemu_plugin_id_t id,
202 }
203
204 void qemu_plugin_register_vcpu_syscall_cb(qemu_plugin_id_t id,
205 - qemu_plugin_vcpu_syscall_cb_t cb)
205 + qemu_plugin_vcpu_syscall_cb_t cb,
206 + void *userdata)
207 {
207 - plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_SYSCALL, cb);
208 + plugin_register_cb_udata(id, QEMU_PLUGIN_EV_VCPU_SYSCALL, cb, userdata);
209 }
210
211 void
plugins/core.c
+1 -1
@@ -534,7 +534,7 @@ qemu_plugin_vcpu_syscall(CPUState *cpu, int64_t num, uint64_t a1, uint64_t a2,
534 qemu_plugin_vcpu_syscall_cb_t func = cb->f.vcpu_syscall;
535
536 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC);
537 - func(cpu->cpu_index, num, a1, a2, a3, a4, a5, a6, a7, a8);
537 + func(cpu->cpu_index, num, a1, a2, a3, a4, a5, a6, a7, a8, cb->udata);
538 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS);
539 }
540 }
tests/tcg/plugins/syscall.c
+3 -2
@@ -128,7 +128,8 @@ static void hexdump(const GByteArray *data)
128 static void vcpu_syscall(unsigned int vcpu_index,
129 int64_t num, uint64_t a1, uint64_t a2,
130 uint64_t a3, uint64_t a4, uint64_t a5,
131 - uint64_t a6, uint64_t a7, uint64_t a8)
131 + uint64_t a6, uint64_t a7, uint64_t a8,
132 + void *userdata)
133 {
134 if (statistics) {
135 SyscallStats *entry;
@@ -271,7 +272,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
272 memory_buffer = g_byte_array_new();
273 }
274
274 - qemu_plugin_register_vcpu_syscall_cb(id, vcpu_syscall);
275 + 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_filter_cb(id, vcpu_syscall_filter);
278 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);