Commit 32a0ddf36a for qemu.org
commit 32a0ddf36a51c80529056dc7e4cce892870e5261
Author: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Date: Mon Jun 15 12:35:04 2026 -0700
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>
diff --git a/contrib/plugins/bbv.c b/contrib/plugins/bbv.c
index 5913cc6c63..f2b1b258a9 100644
--- a/contrib/plugins/bbv.c
+++ b/contrib/plugins/bbv.c
@@ -28,7 +28,7 @@ static char *filename;
static struct qemu_plugin_scoreboard *vcpus;
static uint64_t interval = 100000000;
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
Vcpu *vcpu;
diff --git a/contrib/plugins/cache.c b/contrib/plugins/cache.c
index 56508587d3..f41ddb0aa4 100644
--- a/contrib/plugins/cache.c
+++ b/contrib/plugins/cache.c
@@ -694,7 +694,7 @@ finish:
g_list_free(miss_insns);
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
log_stats();
log_top_insns();
diff --git a/contrib/plugins/cflow.c b/contrib/plugins/cflow.c
index b5e33f25f9..4d00879cca 100644
--- a/contrib/plugins/cflow.c
+++ b/contrib/plugins/cflow.c
@@ -134,7 +134,7 @@ static gboolean filter_non_branches(gpointer key, gpointer value,
return node->dest_count == 0;
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) result = g_string_new("collected ");
GList *data;
diff --git a/contrib/plugins/drcov.c b/contrib/plugins/drcov.c
index 5edc94dcaf..458c0d2084 100644
--- a/contrib/plugins/drcov.c
+++ b/contrib/plugins/drcov.c
@@ -86,7 +86,7 @@ static void count_block(gpointer data, gpointer user_data)
}
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
unsigned long count = 0;
g_mutex_lock(&lock);
diff --git a/contrib/plugins/execlog.c b/contrib/plugins/execlog.c
index d00d9c4ff3..d347ac25b6 100644
--- a/contrib/plugins/execlog.c
+++ b/contrib/plugins/execlog.c
@@ -400,7 +400,7 @@ static void vcpu_init(qemu_plugin_id_t id, unsigned int vcpu_index)
/**
* On plugin exit, print last instruction in cache
*/
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
guint i;
g_rw_lock_reader_lock(&expand_array_lock);
diff --git a/contrib/plugins/hotblocks.c b/contrib/plugins/hotblocks.c
index 8ecf033997..92859872ac 100644
--- a/contrib/plugins/hotblocks.c
+++ b/contrib/plugins/hotblocks.c
@@ -70,7 +70,7 @@ static void exec_count_free(gpointer key, gpointer value, gpointer user_data)
qemu_plugin_scoreboard_free(cnt->exec_count);
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) report = g_string_new("collected ");
GList *counts, *sorted_counts, *it;
diff --git a/contrib/plugins/hotpages.c b/contrib/plugins/hotpages.c
index 9d48ac969e..a6d83b06c7 100644
--- a/contrib/plugins/hotpages.c
+++ b/contrib/plugins/hotpages.c
@@ -73,7 +73,7 @@ static gint cmp_access_count(gconstpointer a, gconstpointer b, gpointer d)
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) report = g_string_new("Addr, RCPUs, Reads, WCPUs, Writes\n");
int i;
diff --git a/contrib/plugins/howvec.c b/contrib/plugins/howvec.c
index 42bddb6566..7572889619 100644
--- a/contrib/plugins/howvec.c
+++ b/contrib/plugins/howvec.c
@@ -172,7 +172,7 @@ static void free_record(gpointer data)
g_free(rec);
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) report = g_string_new("Instruction Classes:\n");
int i;
diff --git a/contrib/plugins/hwprofile.c b/contrib/plugins/hwprofile.c
index a9838ccc87..b7f96117e9 100644
--- a/contrib/plugins/hwprofile.c
+++ b/contrib/plugins/hwprofile.c
@@ -106,7 +106,7 @@ static void fmt_dev_record(GString *s, DeviceCounts *rec)
g_string_append_c(s, '\n');
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) report = g_string_new("");
GList *counts;
diff --git a/contrib/plugins/ips.c b/contrib/plugins/ips.c
index f110c565bc..7614ae1eaf 100644
--- a/contrib/plugins/ips.c
+++ b/contrib/plugins/ips.c
@@ -124,7 +124,7 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
quantum_insn, max_insn_per_quantum, NULL);
}
-static void plugin_exit(qemu_plugin_id_t id, void *udata)
+static void plugin_exit(void *udata)
{
qemu_plugin_scoreboard_free(vcpus);
}
diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
index 36b003ead2..c1c2b0aca8 100644
--- a/contrib/plugins/lockstep.c
+++ b/contrib/plugins/lockstep.c
@@ -77,7 +77,7 @@ static char *path_to_unlink;
static bool verbose;
-static void plugin_cleanup(qemu_plugin_id_t id, void *userdata)
+static void plugin_cleanup(void *userdata)
{
/* Free our block data */
g_slist_free_full(blocks, &g_free);
@@ -90,7 +90,7 @@ static void plugin_cleanup(qemu_plugin_id_t id, void *userdata)
}
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) out = g_string_new("No divergence :-)\n");
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)
g_string_append_printf(out, "Executed ~%ld instructions\n", insn_count);
qemu_plugin_outs(out->str);
- plugin_cleanup(id, NULL);
+ plugin_cleanup(NULL);
}
/*
@@ -393,6 +393,6 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
our_id = id;
qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
- qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
+ qemu_plugin_register_atexit_cb(id, plugin_exit, (void *)id);
return 0;
}
diff --git a/contrib/plugins/stoptrigger.c b/contrib/plugins/stoptrigger.c
index b3a6ed66a7..40f8fd313d 100644
--- a/contrib/plugins/stoptrigger.c
+++ b/contrib/plugins/stoptrigger.c
@@ -93,7 +93,7 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
}
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_hash_table_destroy(addrs_ht);
qemu_plugin_scoreboard_free(insn_count_sb);
diff --git a/contrib/plugins/traps.c b/contrib/plugins/traps.c
index a741580fbf..4b879a8212 100644
--- a/contrib/plugins/traps.c
+++ b/contrib/plugins/traps.c
@@ -44,7 +44,7 @@ static void vcpu_discon(qemu_plugin_id_t id, unsigned int vcpu_index,
}
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) report;
report = g_string_new("VCPU, interrupts, exceptions, hostcalls\n");
diff --git a/contrib/plugins/uftrace.c b/contrib/plugins/uftrace.c
index f974090e23..a071a34ea7 100644
--- a/contrib/plugins/uftrace.c
+++ b/contrib/plugins/uftrace.c
@@ -928,7 +928,7 @@ static void vcpu_end(unsigned int vcpu_index)
memset(cpu, 0, sizeof(Cpu));
}
-static void at_exit(qemu_plugin_id_t id, void *data)
+static void at_exit(void *data)
{
bool system_emulation = (bool) data;
g_autoptr(GArray) traces = g_array_new(0, 0, sizeof(Trace *));
diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h
index 3c6f32bacf..d7d972103c 100644
--- a/include/plugins/qemu-plugin.h
+++ b/include/plugins/qemu-plugin.h
@@ -142,11 +142,10 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id,
/**
* typedef qemu_plugin_udata_cb_t - callback with user data
- * @id: the unique qemu_plugin_id_t
* @userdata: a pointer to some user data supplied when the callback
* was registered.
*/
-typedef void (*qemu_plugin_udata_cb_t)(qemu_plugin_id_t id, void *userdata);
+typedef void (*qemu_plugin_udata_cb_t)(void *userdata);
/**
* typedef qemu_plugin_vcpu_simple_cb_t - vcpu callback
diff --git a/plugins/core.c b/plugins/core.c
index 21a3c5b15c..b0532e8d0d 100644
--- a/plugins/core.c
+++ b/plugins/core.c
@@ -147,7 +147,7 @@ static void plugin_cb__udata(enum qemu_plugin_event ev)
QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) {
qemu_plugin_udata_cb_t func = cb->f.udata;
- func(cb->ctx->id, cb->udata);
+ func(cb->udata);
}
break;
default:
diff --git a/plugins/loader.c b/plugins/loader.c
index 0d587c344c..b10ebe8cc0 100644
--- a/plugins/loader.c
+++ b/plugins/loader.c
@@ -339,7 +339,7 @@ static void plugin_reset_destroy__locked(struct qemu_plugin_reset_data *data)
if (data->reset) {
g_assert(ctx->resetting);
if (data->cb) {
- data->cb(ctx->id, data->userdata);
+ data->cb(data->userdata);
}
ctx->resetting = false;
g_free(data);
@@ -358,7 +358,7 @@ static void plugin_reset_destroy__locked(struct qemu_plugin_reset_data *data)
g_assert(success);
QTAILQ_REMOVE(&plugin.ctxs, ctx, entry);
if (data->cb) {
- data->cb(ctx->id, data->userdata);
+ data->cb(data->userdata);
}
if (!g_module_close(ctx->handle)) {
warn_report("%s: %s", __func__, g_module_error());
diff --git a/tests/tcg/plugins/bb.c b/tests/tcg/plugins/bb.c
index 36776dee1e..8a854408aa 100644
--- a/tests/tcg/plugins/bb.c
+++ b/tests/tcg/plugins/bb.c
@@ -40,7 +40,7 @@ static void gen_one_cpu_report(CPUCount *count, GString *report,
}
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) report = g_string_new("");
diff --git a/tests/tcg/plugins/inline.c b/tests/tcg/plugins/inline.c
index 73dde99578..1d17884b40 100644
--- a/tests/tcg/plugins/inline.c
+++ b/tests/tcg/plugins/inline.c
@@ -121,7 +121,7 @@ static void stats_mem(void)
g_assert(inl_per_vcpu == expected);
}
-static void plugin_exit(qemu_plugin_id_t id, void *udata)
+static void plugin_exit(void *udata)
{
const unsigned int num_cpus = qemu_plugin_num_vcpus();
g_autoptr(GString) stats = g_string_new("");
diff --git a/tests/tcg/plugins/insn.c b/tests/tcg/plugins/insn.c
index e6c5207cd6..12421054f6 100644
--- a/tests/tcg/plugins/insn.c
+++ b/tests/tcg/plugins/insn.c
@@ -190,7 +190,7 @@ static void vcpu_tb_trans(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
}
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) out = g_string_new(NULL);
int i;
diff --git a/tests/tcg/plugins/mem.c b/tests/tcg/plugins/mem.c
index 6b0732dc0f..5cdf71c7e4 100644
--- a/tests/tcg/plugins/mem.c
+++ b/tests/tcg/plugins/mem.c
@@ -68,7 +68,7 @@ static gint addr_order(gconstpointer a, gconstpointer b, gpointer d)
}
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
g_autoptr(GString) out = g_string_new("");
diff --git a/tests/tcg/plugins/reset.c b/tests/tcg/plugins/reset.c
index 6ea675b809..ef5a32781b 100644
--- a/tests/tcg/plugins/reset.c
+++ b/tests/tcg/plugins/reset.c
@@ -14,7 +14,7 @@ static qemu_plugin_id_t plugin_id;
static bool was_reset;
static bool was_uninstalled;
-static void after_uninstall(qemu_plugin_id_t id, void *userdata)
+static void after_uninstall(void *userdata)
{
g_assert(was_reset && !was_uninstalled);
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)
QEMU_PLUGIN_CB_NO_REGS, NULL);
}
-static void after_reset(qemu_plugin_id_t id, void *userdata)
+static void after_reset(void *userdata)
{
+ qemu_plugin_id_t id = (qemu_plugin_id_t) userdata;
g_assert(!was_reset && !was_uninstalled);
qemu_plugin_outs("reset done\n");
was_reset = true;
@@ -45,7 +46,7 @@ static void after_reset(qemu_plugin_id_t id, void *userdata)
static void tb_exec_before_reset(unsigned int vcpu_index, void *userdata)
{
g_assert(!was_reset && !was_uninstalled);
- qemu_plugin_reset(plugin_id, after_reset, NULL);
+ qemu_plugin_reset(plugin_id, after_reset, (void *) plugin_id);
}
static void tb_trans_before_reset(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
diff --git a/tests/tcg/plugins/syscall.c b/tests/tcg/plugins/syscall.c
index 5658f83087..938646f935 100644
--- a/tests/tcg/plugins/syscall.c
+++ b/tests/tcg/plugins/syscall.c
@@ -207,7 +207,7 @@ static gint comp_func(gconstpointer ea, gconstpointer eb, gpointer d)
}
/* ************************************************************************* */
-static void plugin_exit(qemu_plugin_id_t id, void *p)
+static void plugin_exit(void *p)
{
if (!statistics) {
return;