@samitouri / QOSamiQemu / commits / 32a0ddf36a

plugins: remove qemu_plugin_id_t from qemu_plugin_udata_cb_t

We can now rely on userdata being always available to pass down this id if needed. In our plugins, only tests/tcg/plugins/reset.c was using it. Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260615193526.2883349-6-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 32a0ddf36a51c80529056dc7e4cce892870e5261
23 files changed +30 -30
contrib/plugins/bbv.c
+1 -1
@@ -28,7 +28,7 @@ static char *filename;
28 static struct qemu_plugin_scoreboard *vcpus;
29 static uint64_t interval = 100000000;
30
31 -static void plugin_exit(qemu_plugin_id_t id, void *p)
31 +static void plugin_exit(void *p)
32 {
33 Vcpu *vcpu;
34
contrib/plugins/cache.c
+1 -1
@@ -694,7 +694,7 @@ finish:
694 g_list_free(miss_insns);
695 }
696
697 -static void plugin_exit(qemu_plugin_id_t id, void *p)
697 +static void plugin_exit(void *p)
698 {
699 log_stats();
700 log_top_insns();
contrib/plugins/cflow.c
+1 -1
@@ -134,7 +134,7 @@ static gboolean filter_non_branches(gpointer key, gpointer value,
134 return node->dest_count == 0;
135 }
136
137 -static void plugin_exit(qemu_plugin_id_t id, void *p)
137 +static void plugin_exit(void *p)
138 {
139 g_autoptr(GString) result = g_string_new("collected ");
140 GList *data;
contrib/plugins/drcov.c
+1 -1
@@ -86,7 +86,7 @@ static void count_block(gpointer data, gpointer user_data)
86 }
87 }
88
89 -static void plugin_exit(qemu_plugin_id_t id, void *p)
89 +static void plugin_exit(void *p)
90 {
91 unsigned long count = 0;
92 g_mutex_lock(&lock);
contrib/plugins/execlog.c
+1 -1
@@ -400,7 +400,7 @@ static void vcpu_init(qemu_plugin_id_t id, unsigned int vcpu_index)
400 /**
401 * On plugin exit, print last instruction in cache
402 */
403 -static void plugin_exit(qemu_plugin_id_t id, void *p)
403 +static void plugin_exit(void *p)
404 {
405 guint i;
406 g_rw_lock_reader_lock(&expand_array_lock);
contrib/plugins/hotblocks.c
+1 -1
@@ -70,7 +70,7 @@ static void exec_count_free(gpointer key, gpointer value, gpointer user_data)
70 qemu_plugin_scoreboard_free(cnt->exec_count);
71 }
72
73 -static void plugin_exit(qemu_plugin_id_t id, void *p)
73 +static void plugin_exit(void *p)
74 {
75 g_autoptr(GString) report = g_string_new("collected ");
76 GList *counts, *sorted_counts, *it;
contrib/plugins/hotpages.c
+1 -1
@@ -73,7 +73,7 @@ static gint cmp_access_count(gconstpointer a, gconstpointer b, gpointer d)
73 }
74
75
76 -static void plugin_exit(qemu_plugin_id_t id, void *p)
76 +static void plugin_exit(void *p)
77 {
78 g_autoptr(GString) report = g_string_new("Addr, RCPUs, Reads, WCPUs, Writes\n");
79 int i;
contrib/plugins/howvec.c
+1 -1
@@ -172,7 +172,7 @@ static void free_record(gpointer data)
172 g_free(rec);
173 }
174
175 -static void plugin_exit(qemu_plugin_id_t id, void *p)
175 +static void plugin_exit(void *p)
176 {
177 g_autoptr(GString) report = g_string_new("Instruction Classes:\n");
178 int i;
contrib/plugins/hwprofile.c
+1 -1
@@ -106,7 +106,7 @@ static void fmt_dev_record(GString *s, DeviceCounts *rec)
106 g_string_append_c(s, '\n');
107 }
108
109 -static void plugin_exit(qemu_plugin_id_t id, void *p)
109 +static void plugin_exit(void *p)
110 {
111 g_autoptr(GString) report = g_string_new("");
112 GList *counts;
contrib/plugins/ips.c
+1 -1
@@ -124,7 +124,7 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
124 quantum_insn, max_insn_per_quantum, NULL);
125 }
126
127 -static void plugin_exit(qemu_plugin_id_t id, void *udata)
127 +static void plugin_exit(void *udata)
128 {
129 qemu_plugin_scoreboard_free(vcpus);
130 }
contrib/plugins/lockstep.c
+4 -4
@@ -77,7 +77,7 @@ static char *path_to_unlink;
77
78 static bool verbose;
79
80 -static void plugin_cleanup(qemu_plugin_id_t id, void *userdata)
80 +static void plugin_cleanup(void *userdata)
81 {
82 /* Free our block data */
83 g_slist_free_full(blocks, &g_free);
@@ -90,7 +90,7 @@ static void plugin_cleanup(qemu_plugin_id_t id, void *userdata)
90 }
91 }
92
93 -static void plugin_exit(qemu_plugin_id_t id, void *p)
93 +static void plugin_exit(void *p)
94 {
95 g_autoptr(GString) out = g_string_new("No divergence :-)\n");
96 g_string_append_printf(out, "Executed %ld/%d blocks\n",
@@ -98,7 +98,7 @@ static void plugin_exit(qemu_plugin_id_t id, void *p)
98 g_string_append_printf(out, "Executed ~%ld instructions\n", insn_count);
99 qemu_plugin_outs(out->str);
100
101 - plugin_cleanup(id, NULL);
101 + plugin_cleanup(NULL);
102 }
103
104 /*
@@ -393,6 +393,6 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
393 our_id = id;
394
395 qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
396 - qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
396 + qemu_plugin_register_atexit_cb(id, plugin_exit, (void *)id);
397 return 0;
398 }
contrib/plugins/stoptrigger.c
+1 -1
@@ -93,7 +93,7 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
93 }
94 }
95
96 -static void plugin_exit(qemu_plugin_id_t id, void *p)
96 +static void plugin_exit(void *p)
97 {
98 g_hash_table_destroy(addrs_ht);
99 qemu_plugin_scoreboard_free(insn_count_sb);
contrib/plugins/traps.c
+1 -1
@@ -44,7 +44,7 @@ static void vcpu_discon(qemu_plugin_id_t id, unsigned int vcpu_index,
44 }
45 }
46
47 -static void plugin_exit(qemu_plugin_id_t id, void *p)
47 +static void plugin_exit(void *p)
48 {
49 g_autoptr(GString) report;
50 report = g_string_new("VCPU, interrupts, exceptions, hostcalls\n");
contrib/plugins/uftrace.c
+1 -1
@@ -928,7 +928,7 @@ static void vcpu_end(unsigned int vcpu_index)
928 memset(cpu, 0, sizeof(Cpu));
929 }
930
931 -static void at_exit(qemu_plugin_id_t id, void *data)
931 +static void at_exit(void *data)
932 {
933 bool system_emulation = (bool) data;
934 g_autoptr(GArray) traces = g_array_new(0, 0, sizeof(Trace *));
include/plugins/qemu-plugin.h
+1 -2
@@ -142,11 +142,10 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
142
143 /**
144 * typedef qemu_plugin_udata_cb_t - callback with user data
145 - * @id: the unique qemu_plugin_id_t
145 * @userdata: a pointer to some user data supplied when the callback
146 * was registered.
147 */
149 -typedef void (*qemu_plugin_udata_cb_t)(qemu_plugin_id_t id, void *userdata);
148 +typedef void (*qemu_plugin_udata_cb_t)(void *userdata);
149
150 /**
151 * typedef qemu_plugin_vcpu_simple_cb_t - vcpu callback
plugins/core.c
+1 -1
@@ -147,7 +147,7 @@ static void plugin_cb__udata(enum qemu_plugin_event ev)
147 QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) {
148 qemu_plugin_udata_cb_t func = cb->f.udata;
149
150 - func(cb->ctx->id, cb->udata);
150 + func(cb->udata);
151 }
152 break;
153 default:
plugins/loader.c
+2 -2
@@ -339,7 +339,7 @@ static void plugin_reset_destroy__locked(struct qemu_plugin_reset_data *data)
339 if (data->reset) {
340 g_assert(ctx->resetting);
341 if (data->cb) {
342 - data->cb(ctx->id, data->userdata);
342 + data->cb(data->userdata);
343 }
344 ctx->resetting = false;
345 g_free(data);
@@ -358,7 +358,7 @@ static void plugin_reset_destroy__locked(struct qemu_plugin_reset_data *data)
358 g_assert(success);
359 QTAILQ_REMOVE(&plugin.ctxs, ctx, entry);
360 if (data->cb) {
361 - data->cb(ctx->id, data->userdata);
361 + data->cb(data->userdata);
362 }
363 if (!g_module_close(ctx->handle)) {
364 warn_report("%s: %s", __func__, g_module_error());
tests/tcg/plugins/bb.c
+1 -1
@@ -40,7 +40,7 @@ static void gen_one_cpu_report(CPUCount *count, GString *report,
40 }
41 }
42
43 -static void plugin_exit(qemu_plugin_id_t id, void *p)
43 +static void plugin_exit(void *p)
44 {
45 g_autoptr(GString) report = g_string_new("");
46
tests/tcg/plugins/inline.c
+1 -1
@@ -121,7 +121,7 @@ static void stats_mem(void)
121 g_assert(inl_per_vcpu == expected);
122 }
123
124 -static void plugin_exit(qemu_plugin_id_t id, void *udata)
124 +static void plugin_exit(void *udata)
125 {
126 const unsigned int num_cpus = qemu_plugin_num_vcpus();
127 g_autoptr(GString) stats = g_string_new("");
tests/tcg/plugins/insn.c
+1 -1
@@ -190,7 +190,7 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
190 }
191 }
192
193 -static void plugin_exit(qemu_plugin_id_t id, void *p)
193 +static void plugin_exit(void *p)
194 {
195 g_autoptr(GString) out = g_string_new(NULL);
196 int i;
tests/tcg/plugins/mem.c
+1 -1
@@ -68,7 +68,7 @@ static gint addr_order(gconstpointer a, gconstpointer b, gpointer d)
68 }
69
70
71 -static void plugin_exit(qemu_plugin_id_t id, void *p)
71 +static void plugin_exit(void *p)
72 {
73 g_autoptr(GString) out = g_string_new("");
74
tests/tcg/plugins/reset.c
+4 -3
@@ -14,7 +14,7 @@ static qemu_plugin_id_t plugin_id;
14 static bool was_reset;
15 static bool was_uninstalled;
16
17 -static void after_uninstall(qemu_plugin_id_t id, void *userdata)
17 +static void after_uninstall(void *userdata)
18 {
19 g_assert(was_reset && !was_uninstalled);
20 qemu_plugin_outs("uninstall done\n");
@@ -34,8 +34,9 @@ static void tb_trans_after_reset(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
34 QEMU_PLUGIN_CB_NO_REGS, NULL);
35 }
36
37 -static void after_reset(qemu_plugin_id_t id, void *userdata)
37 +static void after_reset(void *userdata)
38 {
39 + qemu_plugin_id_t id = (qemu_plugin_id_t) userdata;
40 g_assert(!was_reset && !was_uninstalled);
41 qemu_plugin_outs("reset done\n");
42 was_reset = true;
@@ -45,7 +46,7 @@ static void after_reset(qemu_plugin_id_t id, void *userdata)
46 static void tb_exec_before_reset(unsigned int vcpu_index, void *userdata)
47 {
48 g_assert(!was_reset && !was_uninstalled);
48 - qemu_plugin_reset(plugin_id, after_reset, NULL);
49 + qemu_plugin_reset(plugin_id, after_reset, (void *) plugin_id);
50 }
51
52 static void tb_trans_before_reset(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
tests/tcg/plugins/syscall.c
+1 -1
@@ -207,7 +207,7 @@ static gint comp_func(gconstpointer ea, gconstpointer eb, gpointer d)
207 }
208
209 /* ************************************************************************* */
210 -static void plugin_exit(qemu_plugin_id_t id, void *p)
210 +static void plugin_exit(void *p)
211 {
212 if (!statistics) {
213 return;