@samitouri / QOSamiQemu / commits / 214d9c0e33

plugins: add userdata to qemu_plugin_register_vcpu_exit_cb

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260615193526.2883349-9-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 214d9c0e337dd84c43cbf27dc707016cfa14bf7e
4 files changed +10 -7
contrib/plugins/ips.c
+2 -2
@@ -97,7 +97,7 @@ static void vcpu_init(unsigned int cpu_index, void *userdata)
97 vcpu->last_quantum_time = now_ns();
98 }
99
100 -static void vcpu_exit(unsigned int cpu_index)
100 +static void vcpu_exit(unsigned int cpu_index, void *userdata)
101 {
102 vCPUTime *vcpu = qemu_plugin_scoreboard_find(vcpus, cpu_index);
103 update_system_time(vcpu);
@@ -208,7 +208,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
208
209 qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
210 qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
211 - qemu_plugin_register_vcpu_exit_cb(id, vcpu_exit);
211 + qemu_plugin_register_vcpu_exit_cb(id, vcpu_exit, NULL);
212 qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
213
214 return 0;
include/plugins/qemu-plugin.h
+3 -1
@@ -257,6 +257,7 @@ void qemu_plugin_register_vcpu_init_cb(qemu_plugin_id_t id,
257 * qemu_plugin_register_vcpu_exit_cb() - register a vCPU exit callback
258 * @id: plugin ID
259 * @cb: callback function
260 + * @userdata: any plugin data to pass to the @cb
261 *
262 * The @cb function is called every time a vCPU exits.
263 *
@@ -264,7 +265,8 @@ void qemu_plugin_register_vcpu_init_cb(qemu_plugin_id_t id,
265 */
266 QEMU_PLUGIN_API
267 void qemu_plugin_register_vcpu_exit_cb(qemu_plugin_id_t id,
267 - qemu_plugin_vcpu_simple_cb_t cb);
268 + qemu_plugin_vcpu_udata_cb_t cb,
269 + void *userdata);
270
271 /**
272 * qemu_plugin_register_vcpu_idle_cb() - register a vCPU idle callback
plugins/api.c
+3 -2
@@ -78,9 +78,10 @@ void qemu_plugin_register_vcpu_init_cb(qemu_plugin_id_t id,
78 }
79
80 void qemu_plugin_register_vcpu_exit_cb(qemu_plugin_id_t id,
81 - qemu_plugin_vcpu_simple_cb_t cb)
81 + qemu_plugin_vcpu_udata_cb_t cb,
82 + void *userdata)
83 {
83 - plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_EXIT, cb);
84 + plugin_register_cb_udata(id, QEMU_PLUGIN_EV_VCPU_EXIT, cb, userdata);
85 }
86
87 static bool tb_is_mem_only(void)
plugins/core.c
+2 -2
@@ -89,7 +89,6 @@ static void plugin_vcpu_cb__simple(CPUState *cpu, enum qemu_plugin_event ev)
89 struct qemu_plugin_cb *cb, *next;
90
91 switch (ev) {
92 - case QEMU_PLUGIN_EV_VCPU_EXIT:
92 case QEMU_PLUGIN_EV_VCPU_IDLE:
93 case QEMU_PLUGIN_EV_VCPU_RESUME:
94 /* iterate safely; plugins might uninstall themselves at any time */
@@ -115,6 +114,7 @@ static void plugin_vcpu_cb__udata(CPUState *cpu, enum qemu_plugin_event ev)
114
115 switch (ev) {
116 case QEMU_PLUGIN_EV_VCPU_INIT:
117 + case QEMU_PLUGIN_EV_VCPU_EXIT:
118 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) {
119 qemu_plugin_vcpu_udata_cb_t func = cb->f.vcpu_udata;
120 func(cpu->cpu_index, cb->udata);
@@ -307,7 +307,7 @@ void qemu_plugin_vcpu_exit_hook(CPUState *cpu)
307 bool success;
308
309 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS);
310 - plugin_vcpu_cb__simple(cpu, QEMU_PLUGIN_EV_VCPU_EXIT);
310 + plugin_vcpu_cb__udata(cpu, QEMU_PLUGIN_EV_VCPU_EXIT);
311 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS);
312
313 assert(cpu->cpu_index != UNASSIGNED_CPU_INDEX);