On 6/10/2026 10:19 PM, Manos Pitsidianakis wrote:
> On Wed, 03 Jun 2026 23:51, Pierrick Bouvier
> <[email protected]> wrote:
>> Signed-off-by: Pierrick Bouvier <[email protected]>
>> ---
>> contrib/plugins/bbv.c         |  4 ++--
>> contrib/plugins/execlog.c     |  4 ++--
>> contrib/plugins/ips.c         |  4 ++--
>> contrib/plugins/uftrace.c     |  4 ++--
>> include/plugins/qemu-plugin.h |  4 +++-
>> plugins/api.c                 |  5 +++--
>> plugins/core.c                | 26 +++++++++++++++++++++++---
>> tests/tcg/plugins/insn.c      |  4 ++--
>> tests/tcg/plugins/registers.c |  4 ++--
>> 9 files changed, 41 insertions(+), 18 deletions(-)
>>
>> diff --git a/contrib/plugins/bbv.c b/contrib/plugins/bbv.c
>> index 72cc896a0a6..0ad1301a1de 100644
>> --- a/contrib/plugins/bbv.c
>> +++ b/contrib/plugins/bbv.c
>> @@ -60,7 +60,7 @@ static qemu_plugin_u64 bb_count_u64(Bb *bb)
>>     return qemu_plugin_scoreboard_u64(bb->count);
>> }
>>
>> -static void vcpu_init(unsigned int vcpu_index)
>> +static void vcpu_init(unsigned int vcpu_index, void *userdata)
>> {
>>     g_autofree gchar *vcpu_filename = NULL;
>>     Vcpu *vcpu = qemu_plugin_scoreboard_find(vcpus, vcpu_index);
>> @@ -156,7 +156,7 @@ QEMU_PLUGIN_EXPORT int
>> qemu_plugin_install(qemu_plugin_id_t id,
>>     bbs = g_hash_table_new_full(g_int64_hash, g_int64_equal, NULL,
>> free_bb);
>>     vcpus = qemu_plugin_scoreboard_new(sizeof(Vcpu));
>>     qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
>> -    qemu_plugin_register_vcpu_init_cb(id, vcpu_init);
>> +    qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
>>     qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
>>
>>     return 0;
>> diff --git a/contrib/plugins/execlog.c b/contrib/plugins/execlog.c
>> index 398aa4a1f3f..2d02816a184 100644
>> --- a/contrib/plugins/execlog.c
>> +++ b/contrib/plugins/execlog.c
>> @@ -382,7 +382,7 @@ static GPtrArray *registers_init(int vcpu_index)
>>  * As we could have multiple threads trying to do this we need to
>>  * serialise the expansion under a lock.
>>  */
>> -static void vcpu_init(unsigned int vcpu_index)
>> +static void vcpu_init(unsigned int vcpu_index, void *userdata)
>> {
>>     CPU *c;
>>
>> @@ -481,7 +481,7 @@ QEMU_PLUGIN_EXPORT int
>> qemu_plugin_install(qemu_plugin_id_t id,
>>     }
>>
>>     /* Register init, translation block and exit callbacks */
>> -    qemu_plugin_register_vcpu_init_cb(id, vcpu_init);
>> +    qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
>>     qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
>>     qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
>>
>> diff --git a/contrib/plugins/ips.c b/contrib/plugins/ips.c
>> index 32fd86c87ac..1290a624489 100644
>> --- a/contrib/plugins/ips.c
>> +++ b/contrib/plugins/ips.c
>> @@ -89,7 +89,7 @@ static void update_system_time(vCPUTime *vcpu)
>>     g_mutex_unlock(&global_state_lock);
>> }
>>
>> -static void vcpu_init(unsigned int cpu_index)
>> +static void vcpu_init(unsigned int cpu_index, void *userdata)
>> {
>>     vCPUTime *vcpu = qemu_plugin_scoreboard_find(vcpus, cpu_index);
>>     vcpu->total_insn = 0;
>> @@ -207,7 +207,7 @@ QEMU_PLUGIN_EXPORT int
>> qemu_plugin_install(qemu_plugin_id_t id,
>>     g_assert(time_handle);
>>
>>     qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
>> -    qemu_plugin_register_vcpu_init_cb(id, vcpu_init);
>> +    qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
>>     qemu_plugin_register_vcpu_exit_cb(id, vcpu_exit);
>>     qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
>>
>> diff --git a/contrib/plugins/uftrace.c b/contrib/plugins/uftrace.c
>> index 438cebf2831..8be8409dce2 100644
>> --- a/contrib/plugins/uftrace.c
>> +++ b/contrib/plugins/uftrace.c
>> @@ -874,7 +874,7 @@ static void vcpu_tb_trans(qemu_plugin_id_t id,
>> struct qemu_plugin_tb *tb)
>>     }
>> }
>>
>> -static void vcpu_init(unsigned int vcpu_index)
>> +static void vcpu_init(unsigned int vcpu_index, void *userdata)
>> {
>>     Cpu *cpu = qemu_plugin_scoreboard_find(score, vcpu_index);
>>     cpu->ops = arch_ops;
>> @@ -985,7 +985,7 @@ QEMU_PLUGIN_EXPORT int
>> qemu_plugin_install(qemu_plugin_id_t id,
>>     }
>>
>>     score = qemu_plugin_scoreboard_new(sizeof(Cpu));
>> -    qemu_plugin_register_vcpu_init_cb(id, vcpu_init);
>> +    qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
>>     qemu_plugin_register_atexit_cb(id, at_exit, (void *) info-
>> >system_emulation);
>>     qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
>>
>> diff --git a/include/plugins/qemu-plugin.h b/include/plugins/qemu-
>> plugin.h
>> index 8aaf404504b..bb4569a2291 100644
>> --- a/include/plugins/qemu-plugin.h
>> +++ b/include/plugins/qemu-plugin.h
>> @@ -242,6 +242,7 @@ void qemu_plugin_reset(qemu_plugin_id_t id,
>> qemu_plugin_udata_cb_t cb,
>>  * qemu_plugin_register_vcpu_init_cb() - register a vCPU
>> initialization callback
>>  * @id: plugin ID
>>  * @cb: callback function
>> + * @userdata: any plugin data to pass to the @cb
>>  *
>>  * The @cb function is called every time a vCPU is initialized.
>>  *
>> @@ -249,7 +250,8 @@ void qemu_plugin_reset(qemu_plugin_id_t id,
>> qemu_plugin_udata_cb_t cb,
>>  */
>> QEMU_PLUGIN_API
>> void qemu_plugin_register_vcpu_init_cb(qemu_plugin_id_t id,
>> -                                       qemu_plugin_vcpu_simple_cb_t cb);
>> +                                       qemu_plugin_vcpu_udata_cb_t cb,
>> +                                       void *userdata);
>>
>> /**
>>  * qemu_plugin_register_vcpu_exit_cb() - register a vCPU exit callback
>> diff --git a/plugins/api.c b/plugins/api.c
>> index 91c9a24a6b2..68b564bb9c2 100644
>> --- a/plugins/api.c
>> +++ b/plugins/api.c
>> @@ -71,9 +71,10 @@ void qemu_plugin_reset(qemu_plugin_id_t id,
>> qemu_plugin_udata_cb_t cb,
>>  */
>>
>> void qemu_plugin_register_vcpu_init_cb(qemu_plugin_id_t id,
>> -                                       qemu_plugin_vcpu_simple_cb_t cb)
>> +                                       qemu_plugin_vcpu_udata_cb_t cb,
>> +                                       void *userdata)
>> {
>> -    plugin_register_cb(id, QEMU_PLUGIN_EV_VCPU_INIT, cb);
>> +    plugin_register_cb_udata(id, QEMU_PLUGIN_EV_VCPU_INIT, cb,
>> userdata);
>> }
>>
>> void qemu_plugin_register_vcpu_exit_cb(qemu_plugin_id_t id,
>> diff --git a/plugins/core.c b/plugins/core.c
>> index 217d6608c1d..1d5692b3f41 100644
>> --- a/plugins/core.c
>> +++ b/plugins/core.c
>> @@ -89,7 +89,6 @@ static void plugin_vcpu_cb__simple(CPUState *cpu,
>> enum qemu_plugin_event ev)
>>     struct qemu_plugin_cb *cb, *next;
>>
>>     switch (ev) {
>> -    case QEMU_PLUGIN_EV_VCPU_INIT:
>>     case QEMU_PLUGIN_EV_VCPU_EXIT:
>>     case QEMU_PLUGIN_EV_VCPU_IDLE:
>>     case QEMU_PLUGIN_EV_VCPU_RESUME:
>> @@ -104,6 +103,28 @@ static void plugin_vcpu_cb__simple(CPUState *cpu,
>> enum qemu_plugin_event ev)
>>     }
>> }
>>
>> +/*
>> + * Disable CFI checks.
>> + * The callback function has been loaded from an external library so
>> we do not
>> + * have type information
>> + */
>> +QEMU_DISABLE_CFI
>> +static void plugin_vcpu_cb__udata(CPUState *cpu, enum
>> qemu_plugin_event ev)
>> +{
>> +    struct qemu_plugin_cb *cb, *next;
>> +
>> +    switch (ev) {
>> +    case QEMU_PLUGIN_EV_VCPU_INIT:
>> +        QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) {
>> +            qemu_plugin_vcpu_udata_cb_t func = cb->f.vcpu_udata;
>> +            func(cpu->cpu_index, cb->udata);
>> +        }
>> +        break;
>> +    default:
>> +        g_assert_not_reached();
>> +    }
>> +}
>> +
>> /*
>>  * Disable CFI checks.
>>  * The callback function has been loaded from an external library so
>> we do not
>> @@ -145,7 +166,6 @@ static void plugin_cb__udata(enum
>> qemu_plugin_event ev)
>>     case QEMU_PLUGIN_EV_FLUSH:
>>         QLIST_FOREACH_SAFE_RCU(cb, &plugin.cb_lists[ev], entry, next) {
>>             qemu_plugin_udata_cb_t func = cb->f.udata;
>> -
> 
> Accidental or something missing?
>

Accidental delete I would say :)

> LGTM though:
> 
> Reviewed-by: Manos Pitsidianakis <[email protected]>
> 
> 
>>             func(cb->udata);
>>         }
>>         break;
>> @@ -271,7 +291,7 @@ static void qemu_plugin_vcpu_init__async(CPUState
>> *cpu, run_on_cpu_data unused)
>>     qemu_rec_mutex_unlock(&plugin.lock);
>>
>>     qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_RW_REGS);
>> -    plugin_vcpu_cb__simple(cpu, QEMU_PLUGIN_EV_VCPU_INIT);
>> +    plugin_vcpu_cb__udata(cpu, QEMU_PLUGIN_EV_VCPU_INIT);
>>     qemu_plugin_set_cb_flags(cpu, QEMU_PLUGIN_CB_NO_REGS);
>> }
>>
>> diff --git a/tests/tcg/plugins/insn.c b/tests/tcg/plugins/insn.c
>> index 80f7cbb2967..d9f94888d6f 100644
>> --- a/tests/tcg/plugins/insn.c
>> +++ b/tests/tcg/plugins/insn.c
>> @@ -84,7 +84,7 @@ static Instruction * get_insn_record(const char
>> *disas, uint64_t vaddr, Match *m
>> /*
>>  * Initialise a new vcpu with reading the register list
>>  */
>> -static void vcpu_init(unsigned int vcpu_index)
>> +static void vcpu_init(unsigned int vcpu_index, void *userdata)
>> {
>>     g_autoptr(GArray) reg_list = qemu_plugin_get_registers();
>>     g_autoptr(GByteArray) reg_value = g_byte_array_new();
>> @@ -296,7 +296,7 @@ QEMU_PLUGIN_EXPORT int
>> qemu_plugin_install(qemu_plugin_id_t id,
>>         qemu_plugin_scoreboard_new(sizeof(uint64_t)));
>>
>>     /* Register init, translation block and exit callbacks */
>> -    qemu_plugin_register_vcpu_init_cb(id, vcpu_init);
>> +    qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL);
>>     qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans);
>>     qemu_plugin_register_atexit_cb(id, plugin_exit, NULL);
>>     return 0;
>> diff --git a/tests/tcg/plugins/registers.c b/tests/tcg/plugins/
>> registers.c
>> index 94776d887fe..0e41734435f 100644
>> --- a/tests/tcg/plugins/registers.c
>> +++ b/tests/tcg/plugins/registers.c
>> @@ -21,7 +21,7 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_version =
>> QEMU_PLUGIN_VERSION;
>>  * registers that cannot be written to, which would fail the test.
>>  * See: https://lists.gnu.org/archive/html/qemu-devel/2026-02/
>> msg07025.html
>>  */
>> -static void vcpu_init_cb(unsigned int vcpu_index)
>> +static void vcpu_init_cb(unsigned int vcpu_index, void *userdata)
>> {
>>     g_autoptr(GArray) regs = qemu_plugin_get_registers();
>>     g_assert(regs != NULL);
>> @@ -74,6 +74,6 @@ QEMU_PLUGIN_EXPORT int
>> qemu_plugin_install(qemu_plugin_id_t id,
>>                                            const qemu_info_t *info,
>>                                            int argc, char **argv)
>> {
>> -    qemu_plugin_register_vcpu_init_cb(id, vcpu_init_cb);
>> +    qemu_plugin_register_vcpu_init_cb(id, vcpu_init_cb, NULL);
>>     return 0;
>> }
>> -- 
>> 2.43.0
>>
>>


Reply via email to