@samitouri / QOSamiQemu / commits / 89662f8903

plugins: add userdata to qemu_plugin_register_vcpu_idle_cb

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260615193526.2883349-10-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 89662f8903b4309623473e3b444195683c4eba44
3 files changed +10 -7
include/plugins/qemu-plugin.h
+3 -1
@@ -272,12 +272,14 @@ void qemu_plugin_register_vcpu_exit_cb(qemu_plugin_id_t id,
272 * qemu_plugin_register_vcpu_idle_cb() - register a vCPU idle callback
273 * @id: plugin ID
274 * @cb: callback function
275 + * @userdata: any plugin data to pass to the @cb
276 *
277 * The @cb function is called every time a vCPU idles.
278 */
279 QEMU_PLUGIN_API
280 void qemu_plugin_register_vcpu_idle_cb(qemu_plugin_id_t id,
280 - qemu_plugin_vcpu_simple_cb_t cb);
281 + qemu_plugin_vcpu_udata_cb_t cb,
282 + void *userdata);
283
284 /**
285 * qemu_plugin_register_vcpu_resume_cb() - register a vCPU resume callback
plugins/core.c
+5 -4
@@ -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_IDLE:
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) {
@@ -114,6 +113,7 @@ static void plugin_vcpu_cb__udata(CPUState *cpu, enum qemu_plugin_event ev)
113
114 switch (ev) {
115 case QEMU_PLUGIN_EV_VCPU_INIT:
116 + case QEMU_PLUGIN_EV_VCPU_IDLE:
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;
@@ -627,7 +627,7 @@ void qemu_plugin_vcpu_idle_cb(CPUState *cpu)
627 /* idle and resume cb may be called before init, ignore in this case */
628 if (cpu->cpu_index < plugin.num_vcpus) {
629 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS_PC);
630 - plugin_vcpu_cb__simple(cpu, QEMU_PLUGIN_EV_VCPU_IDLE);
630 + plugin_vcpu_cb__udata(cpu, QEMU_PLUGIN_EV_VCPU_IDLE);
631 qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS);
632 }
633 }
@@ -660,9 +660,10 @@ void qemu_plugin_vcpu_hostcall_cb(CPUState *cpu, uint64_t from)
660 }
661
662 void qemu_plugin_register_vcpu_idle_cb(qemu_plugin_id_t id,
663 - qemu_plugin_vcpu_simple_cb_t cb)
663 + qemu_plugin_vcpu_udata_cb_t cb,
664 + void *userdata)
665 {
665 - plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_IDLE, cb);
666 + plugin_register_cb_udata(id, QEMU_PLUGIN_EV_VCPU_IDLE, cb, userdata);
667 }
668
669 void qemu_plugin_register_vcpu_resume_cb(qemu_plugin_id_t id,
tests/tcg/plugins/bb.c
+2 -2
@@ -56,7 +56,7 @@ static void plugin_exit(void *p)
56 qemu_plugin_scoreboard_free(counts);
57 }
58
59 -static void vcpu_idle(unsigned int cpu_index)
59 +static void vcpu_idle(unsigned int cpu_index, void *userdata)
60 {
61 CPUCount *count = qemu_plugin_scoreboard_find(counts, cpu_index);
62 g_autoptr(GString) report = g_string_new("");
@@ -124,7 +124,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
124 counts, CPUCount, insn_count);
125
126 if (idle_report) {
127 - qemu_plugin_register_vcpu_idle_cb(id, vcpu_idle);
127 + qemu_plugin_register_vcpu_idle_cb(id, vcpu_idle, NULL);
128 }
129
130 qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);