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;