@samitouri / QOSamiQemu / commits / e12944179a

plugins: add userdata to qemu_plugin_register_vcpu_resume_cb

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260615193526.2883349-11-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 e12944179af1e546dd3c0f644054257f864bbffa
2 files changed +8 -27
include/plugins/qemu-plugin.h
+3 -1
@@ -285,12 +285,14 @@ void qemu_plugin_register_vcpu_idle_cb(qemu_plugin_id_t id,
285 * qemu_plugin_register_vcpu_resume_cb() - register a vCPU resume callback
286 * @id: plugin ID
287 * @cb: callback function
288 + * @userdata: any plugin data to pass to the @cb
289 *
290 * The @cb function is called every time a vCPU resumes execution.
291 */
292 QEMU_PLUGIN_API
293 void qemu_plugin_register_vcpu_resume_cb(qemu_plugin_id_t id,
293 - qemu_plugin_vcpu_simple_cb_t cb);
294 + qemu_plugin_vcpu_udata_cb_t cb,
295 + void *userdata);
296
297 /**
298 * qemu_plugin_register_vcpu_discon_cb() - register a discontinuity callback
plugins/core.c
+5 -26
@@ -78,29 +78,6 @@ void plugin_unregister_cb__locked(struct qemu_plugin_ctx *ctx,
78 }
79 }
80
81 -/*
82 - * Disable CFI checks.
83 - * The callback function has been loaded from an external library so we do not
84 - * have type information
85 - */
86 -QEMU_DISABLE_CFI
87 -static void plugin_vcpu_cb__simple(CPUState *cpu, enum qemu_plugin_event ev)
88 -{
89 - struct qemu_plugin_cb *cb, *next;
90 -
91 - switch (ev) {
92 - case QEMU_PLUGIN_EV_VCPU_RESUME:
93 - /* iterate safely; plugins might uninstall themselves at any time */
94 - QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) {
95 - qemu_plugin_vcpu_simple_cb_t func = cb->f.vcpu_simple;
96 - func(cpu->cpu_index);
97 - }
98 - break;
99 - default:
100 - g_assert_not_reached();
101 - }
102 -}
103 -
81 /*
82 * Disable CFI checks.
83 * The callback function has been loaded from an external library so we do not
@@ -114,6 +91,7 @@ static void plugin_vcpu_cb__udata(CPUState *cpu, enum qemu_plugin_event ev)
91 switch (ev) {
92 case QEMU_PLUGIN_EV_VCPU_INIT:
93 case QEMU_PLUGIN_EV_VCPU_IDLE:
94 + case QEMU_PLUGIN_EV_VCPU_RESUME:
95 case QEMU_PLUGIN_EV_VCPU_EXIT:
96 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) {
97 qemu_plugin_vcpu_udata_cb_t func = cb->f.vcpu_udata;
@@ -636,7 +614,7 @@ void qemu_plugin_vcpu_resume_cb(CPUState *cpu)
614 {
615 if (cpu->cpu_index < plugin.num_vcpus) {
616 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC);
639 - plugin_vcpu_cb__simple(cpu, QEMU_PLUGIN_EV_VCPU_RESUME);
617 + plugin_vcpu_cb__udata(cpu, QEMU_PLUGIN_EV_VCPU_RESUME);
618 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS);
619 }
620 }
@@ -667,9 +645,10 @@ void qemu_plugin_register_vcpu_idle_cb(qemu_plugin_id_t id,
645 }
646
647 void qemu_plugin_register_vcpu_resume_cb(qemu_plugin_id_t id,
670 - qemu_plugin_vcpu_simple_cb_t cb)
648 + qemu_plugin_vcpu_udata_cb_t cb,
649 + void *userdata)
650 {
672 - plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_RESUME, cb);
651 + plugin_register_cb_udata(id, QEMU_PLUGIN_EV_VCPU_RESUME, cb, userdata);
652 }
653
654 void qemu_plugin_register_vcpu_discon_cb(qemu_plugin_id_t id,