summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorPierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>2026-06-15 12:35:01 -0700
committerPierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>2026-06-16 10:59:05 -0700
commitd3b790036a5819f3679953eaedd2a3ca5bf9cdb9 (patch)
treeede5a1b05d73f236f99e288200e20ba737428f09 /plugins
parente5dcb06798a10c7f0514c95256bd8e8baa73a3f9 (diff)
downloadqemu-d3b790036a5819f3679953eaedd2a3ca5bf9cdb9.tar.gz
qemu-d3b790036a5819f3679953eaedd2a3ca5bf9cdb9.zip
plugins: add userdata for qemu_plugin_{uninstall, reset}
We do both at the same time because they internally use the same implementation. Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Link: https://lore.kernel.org/qemu-devel/20260615193526.2883349-3-pierrick.bouvier@oss.qualcomm.com Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Diffstat (limited to 'plugins')
-rw-r--r--plugins/api.c10
-rw-r--r--plugins/loader.c13
-rw-r--r--plugins/plugin.h3
3 files changed, 16 insertions, 10 deletions
diff --git a/plugins/api.c b/plugins/api.c
index 2d5fe9327f..91c9a24a6b 100644
--- a/plugins/api.c
+++ b/plugins/api.c
@@ -51,14 +51,16 @@
/* Uninstall and Reset handlers */
-void qemu_plugin_uninstall(qemu_plugin_id_t id, qemu_plugin_simple_cb_t cb)
+void qemu_plugin_uninstall(qemu_plugin_id_t id, qemu_plugin_udata_cb_t cb,
+ void *userdata)
{
- plugin_reset_uninstall(id, cb, false);
+ plugin_reset_uninstall(id, cb, userdata, false);
}
-void qemu_plugin_reset(qemu_plugin_id_t id, qemu_plugin_simple_cb_t cb)
+void qemu_plugin_reset(qemu_plugin_id_t id, qemu_plugin_udata_cb_t cb,
+ void *userdata)
{
- plugin_reset_uninstall(id, cb, true);
+ plugin_reset_uninstall(id, cb, userdata, true);
}
/*
diff --git a/plugins/loader.c b/plugins/loader.c
index 0dbe7bea26..0d587c344c 100644
--- a/plugins/loader.c
+++ b/plugins/loader.c
@@ -253,7 +253,7 @@ static int plugin_load(struct qemu_plugin_desc *desc, const qemu_info_t *info, E
* call a full uninstall if the plugin did not yet call it.
*/
if (!ctx->uninstalling) {
- plugin_reset_uninstall(ctx->id, NULL, false);
+ plugin_reset_uninstall(ctx->id, NULL, NULL, false);
}
}
@@ -314,7 +314,8 @@ int qemu_plugin_load_list(QemuPluginList *head, Error **errp)
struct qemu_plugin_reset_data {
struct qemu_plugin_ctx *ctx;
- qemu_plugin_simple_cb_t cb;
+ qemu_plugin_udata_cb_t cb;
+ void *userdata;
bool reset;
};
@@ -338,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->cb(ctx->id, data->userdata);
}
ctx->resetting = false;
g_free(data);
@@ -357,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->cb(ctx->id, data->userdata);
}
if (!g_module_close(ctx->handle)) {
warn_report("%s: %s", __func__, g_module_error());
@@ -383,7 +384,8 @@ static void plugin_flush_destroy(CPUState *cpu, run_on_cpu_data arg)
}
void plugin_reset_uninstall(qemu_plugin_id_t id,
- qemu_plugin_simple_cb_t cb,
+ qemu_plugin_udata_cb_t cb,
+ void *userdata,
bool reset)
{
struct qemu_plugin_reset_data *data;
@@ -401,6 +403,7 @@ void plugin_reset_uninstall(qemu_plugin_id_t id,
data = g_new(struct qemu_plugin_reset_data, 1);
data->ctx = ctx;
data->cb = cb;
+ data->userdata = userdata;
data->reset = reset;
/*
* Only flush the code cache if the vCPUs have been created. If so,
diff --git a/plugins/plugin.h b/plugins/plugin.h
index 9179da4385..c901016b8c 100644
--- a/plugins/plugin.h
+++ b/plugins/plugin.h
@@ -76,7 +76,8 @@ void plugin_register_inline_op_on_entry(GArray **arr,
uint64_t imm);
void plugin_reset_uninstall(qemu_plugin_id_t id,
- qemu_plugin_simple_cb_t cb,
+ qemu_plugin_udata_cb_t cb,
+ void *userdata,
bool reset);
void plugin_register_cb(qemu_plugin_id_t id, enum qemu_plugin_event ev,