diff options
| author | Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> | 2026-06-15 12:35:01 -0700 |
|---|---|---|
| committer | Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> | 2026-06-16 10:59:05 -0700 |
| commit | d3b790036a5819f3679953eaedd2a3ca5bf9cdb9 (patch) | |
| tree | ede5a1b05d73f236f99e288200e20ba737428f09 /plugins | |
| parent | e5dcb06798a10c7f0514c95256bd8e8baa73a3f9 (diff) | |
| download | qemu-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.c | 10 | ||||
| -rw-r--r-- | plugins/loader.c | 13 | ||||
| -rw-r--r-- | plugins/plugin.h | 3 |
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, |
