From: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
To: qemu-devel@nongnu.org,
Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Cc: "Chao Liu" <chao.liu.zevorn@gmail.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Brian Cain" <brian.cain@oss.qualcomm.com>,
"Philippe Mathieu-Daudé " <philmd@linaro.org>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Pierrick Bouvier" <pierrick.bouvier@oss.qualcomm.com>,
"Alexandre Iooss" <erdnaxe@crans.org>
Subject: Re: [PATCH 02/25] plugins: add userdata for qemu_plugin_{uninstall, reset}
Date: Mon, 08 Jun 2026 09:01:06 +0300 [thread overview]
Message-ID: <tgau87.2zyzu7optwbli@linaro.org> (raw)
In-Reply-To: <20260603205152.1440291-3-pierrick.bouvier@oss.qualcomm.com>
On Wed, 03 Jun 2026 23:51, Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> wrote:
>We do both at the same time because they internally use the same
>implementation.
>
>Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
>---
LGTM,
Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
> contrib/plugins/lockstep.c | 10 +++++-----
> include/plugins/qemu-plugin.h | 8 ++++++--
> plugins/api.c | 10 ++++++----
> plugins/loader.c | 13 ++++++++-----
> plugins/plugin.h | 3 ++-
> tests/tcg/plugins/reset.c | 8 ++++----
> 6 files changed, 31 insertions(+), 21 deletions(-)
>
>diff --git a/contrib/plugins/lockstep.c b/contrib/plugins/lockstep.c
>index 62981d4e098..36b003ead2d 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)
>+static void plugin_cleanup(qemu_plugin_id_t id, void *userdata)
> {
> /* Free our block data */
> g_slist_free_full(blocks, &g_free);
>@@ -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);
>+ plugin_cleanup(id, NULL);
> }
>
> /*
>@@ -189,7 +189,7 @@ static void report_divergance(ExecState *us, ExecState *them)
> }
> qemu_plugin_outs(out->str);
> qemu_plugin_outs("giving up\n");
>- qemu_plugin_uninstall(our_id, plugin_cleanup);
>+ qemu_plugin_uninstall(our_id, plugin_cleanup, NULL);
> }
> }
>
>@@ -212,7 +212,7 @@ static void vcpu_tb_exec(unsigned int cpu_index, void *udata)
> qemu_plugin_outs(bytes < 0 ?
> "problem writing to socket" :
> "wrote less than expected to socket");
>- qemu_plugin_uninstall(our_id, plugin_cleanup);
>+ qemu_plugin_uninstall(our_id, plugin_cleanup, NULL);
> return;
> }
>
>@@ -225,7 +225,7 @@ static void vcpu_tb_exec(unsigned int cpu_index, void *udata)
> qemu_plugin_outs(bytes < 0 ?
> "problem reading from socket" :
> "read less than expected");
>- qemu_plugin_uninstall(our_id, plugin_cleanup);
>+ qemu_plugin_uninstall(our_id, plugin_cleanup, NULL);
> return;
> }
>
>diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-plugin.h
>index 435a14f5a00..11213c2ca3f 100644
>--- a/include/plugins/qemu-plugin.h
>+++ b/include/plugins/qemu-plugin.h
>@@ -221,6 +221,7 @@ typedef void (*qemu_plugin_vcpu_discon_cb_t)(qemu_plugin_id_t id,
> * qemu_plugin_uninstall() - Uninstall a plugin
> * @id: this plugin's opaque ID
> * @cb: callback to be called once the plugin has been removed
>+ * @userdata: any plugin data to pass to the @cb
> *
> * Do NOT assume that the plugin has been uninstalled once this function
> * returns. Plugins are uninstalled asynchronously, and therefore the given
>@@ -229,12 +230,14 @@ typedef void (*qemu_plugin_vcpu_discon_cb_t)(qemu_plugin_id_t id,
> * Note: Calling this function from qemu_plugin_install() is a bug.
> */
> QEMU_PLUGIN_API
>-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);
>
> /**
> * qemu_plugin_reset() - Reset a plugin
> * @id: this plugin's opaque ID
> * @cb: callback to be called once the plugin has been reset
>+ * @userdata: any plugin data to pass to the @cb
> *
> * Unregisters all callbacks for the plugin given by @id.
> *
>@@ -243,7 +246,8 @@ void qemu_plugin_uninstall(qemu_plugin_id_t id, qemu_plugin_simple_cb_t cb);
> * callbacks until @cb is called.
> */
> QEMU_PLUGIN_API
>-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);
>
> /**
> * qemu_plugin_register_vcpu_init_cb() - register a vCPU initialization callback
>diff --git a/plugins/api.c b/plugins/api.c
>index 2d5fe9327f7..91c9a24a6b2 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 0dbe7bea263..0d587c344c4 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 9179da43851..c901016b8c1 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,
>diff --git a/tests/tcg/plugins/reset.c b/tests/tcg/plugins/reset.c
>index 1be8be2a4b2..6ea675b8095 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)
>+static void after_uninstall(qemu_plugin_id_t id, void *userdata)
> {
> g_assert(was_reset && !was_uninstalled);
> qemu_plugin_outs("uninstall done\n");
>@@ -24,7 +24,7 @@ static void after_uninstall(qemu_plugin_id_t id)
> static void tb_exec_after_reset(unsigned int vcpu_index, void *userdata)
> {
> g_assert(was_reset && !was_uninstalled);
>- qemu_plugin_uninstall(plugin_id, after_uninstall);
>+ qemu_plugin_uninstall(plugin_id, after_uninstall, NULL);
> }
>
> static void tb_trans_after_reset(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
>@@ -34,7 +34,7 @@ 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)
>+static void after_reset(qemu_plugin_id_t id, void *userdata)
> {
> g_assert(!was_reset && !was_uninstalled);
> qemu_plugin_outs("reset done\n");
>@@ -45,7 +45,7 @@ static void after_reset(qemu_plugin_id_t id)
> 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);
>+ qemu_plugin_reset(plugin_id, after_reset, NULL);
> }
>
> static void tb_trans_before_reset(qemu_plugin_id_t id, struct qemu_plugin_tb *tb)
>--
>2.43.0
>
>
next prev parent reply other threads:[~2026-06-08 6:05 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-03 20:51 [PATCH 00/25] plugins: refactor API to maintain state through callbacks chain Pierrick Bouvier
2026-06-03 20:51 ` [PATCH 01/25] plugins: bump version Pierrick Bouvier
2026-06-08 5:58 ` Manos Pitsidianakis
2026-06-08 16:53 ` Pierrick Bouvier
2026-06-03 20:51 ` [PATCH 02/25] plugins: add userdata for qemu_plugin_{uninstall, reset} Pierrick Bouvier
2026-06-08 6:01 ` Manos Pitsidianakis [this message]
2026-06-03 20:51 ` [PATCH 03/25] plugins: add userdata to qemu_plugin_register_flush_cb Pierrick Bouvier
2026-06-08 6:05 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 04/25] plugins: remove type qemu_plugin_simple_cb_t Pierrick Bouvier
2026-06-08 6:10 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 05/25] plugins: remove qemu_plugin_id_t from qemu_plugin_udata_cb_t Pierrick Bouvier
2026-06-11 5:13 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 06/25] plugins: remove qemu_plugin_id_t from qemu_plugin_vcpu_simple_cb_t Pierrick Bouvier
2026-06-11 5:17 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 07/25] plugins: add userdata to qemu_plugin_register_vcpu_init_cb Pierrick Bouvier
2026-06-11 5:19 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 08/25] plugins: add userdata to qemu_plugin_register_vcpu_exit_cb Pierrick Bouvier
2026-06-11 5:31 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 09/25] plugins: add userdata to qemu_plugin_register_vcpu_idle_cb Pierrick Bouvier
2026-06-11 5:32 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 10/25] plugins: add userdata to qemu_plugin_register_vcpu_resume_cb Pierrick Bouvier
2026-06-11 5:33 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 11/25] plugins: add userdata to qemu_plugin_vcpu_for_each Pierrick Bouvier
2026-06-11 5:34 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 12/25] plugins: remove type qemu_plugin_vcpu_simple_cb_t Pierrick Bouvier
2026-06-11 5:35 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 13/25] plugins: add userdata to qemu_plugin_register_vcpu_discon_cb Pierrick Bouvier
2026-06-11 5:35 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 14/25] plugins: remove qemu_plugin_id from qemu_plugin_vcpu_discon_cb_t Pierrick Bouvier
2026-06-11 5:36 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 15/25] plugins: remove qemu_plugin_id from qemu_plugin_vcpu_tb_trans_cb_t Pierrick Bouvier
2026-06-11 5:55 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 16/25] plugins: add userdata to qemu_plugin_vcpu_tb_trans_cb_t Pierrick Bouvier
2026-06-11 5:57 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 17/25] plugins: remove qemu_plugin_id from qemu_plugin_vcpu_syscall_cb_t Pierrick Bouvier
2026-06-11 5:58 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 18/25] plugins: add userdata to qemu_plugin_register_vcpu_syscall_cb Pierrick Bouvier
2026-06-11 6:00 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 19/25] plugins: remove qemu_plugin_id from qemu_plugin_vcpu_syscall_filter_cb_t Pierrick Bouvier
2026-06-11 6:02 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 20/25] plugins: add userdata to qemu_plugin_register_vcpu_syscall_filter_cb Pierrick Bouvier
2026-06-11 6:03 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 21/25] plugins: remove qemu_plugin_id from qemu_plugin_vcpu_syscall_ret_cb_t Pierrick Bouvier
2026-06-11 6:10 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 22/25] plugins: add userdata to qemu_plugin_register_vcpu_syscall_ret_cb Pierrick Bouvier
2026-06-11 6:08 ` Manos Pitsidianakis
2026-06-03 20:51 ` [PATCH 23/25] scripts/checkpatch: ignore spaces required around some operators in C++ Pierrick Bouvier
2026-06-08 9:21 ` Peter Maydell
2026-06-08 16:56 ` Pierrick Bouvier
2026-06-03 20:51 ` [PATCH 24/25] scripts/checkpatch: remove check on forbidden space before '[' " Pierrick Bouvier
2026-06-04 6:22 ` Philippe Mathieu-Daudé
2026-06-11 6:07 ` Manos Pitsidianakis
2026-06-11 6:28 ` Chao Liu
2026-06-03 20:51 ` [PATCH 25/25] plugins/cpp: register callbacks using captureless lambda Pierrick Bouvier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tgau87.2zyzu7optwbli@linaro.org \
--to=manos.pitsidianakis@linaro.org \
--cc=alex.bennee@linaro.org \
--cc=brian.cain@oss.qualcomm.com \
--cc=chao.liu.zevorn@gmail.com \
--cc=erdnaxe@crans.org \
--cc=philmd@linaro.org \
--cc=pierrick.bouvier@oss.qualcomm.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.