In principle I like this, but 1/ throughout the API can we please make everything consistent sure that all registrations take a handle (void *) and all callbacks functions pass that handle (and the ID) - right now, some things do, some things dont, and this specific case seems to take a handle on registration, but does not provide it on callback (!)
(This is the current implementation : typedef int64_t (*qemu_plugin_time_cb_t) (void); ... QEMU_PLUGIN_API void qemu_plugin_register_time_cb(qemu_plugin_id_t id, const void *handle, qemu_plugin_time_cb_t cb); ) 2/ The current implementation makes use of the callback _ONLY_ in the case of single TCG — it’s most interesting when we have MTTCG enabled (and I see no reason not to provide the same mechanism for any other accelerator if/when anything in QEMU requests ’the time’. Cheers Mark. > On 3 Apr 2025, at 13:38, Alex Bennée <alex.ben...@linaro.org> wrote: > > WARNING: This email originated from outside of Qualcomm. Please be wary of > any links or attachments, and do not enable macros. > > Rather than allowing cpus_get_virtual_clock() to fall through to > cpu_get_clock() introduce a TCG handler so it can make a decision > about what time it is. > > Initially this just calls cpu_get_clock() as before but this will > change in later commits. > > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > --- > accel/tcg/tcg-accel-ops.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/accel/tcg/tcg-accel-ops.c b/accel/tcg/tcg-accel-ops.c > index d9b662efe3..1432d1c5b1 100644 > --- a/accel/tcg/tcg-accel-ops.c > +++ b/accel/tcg/tcg-accel-ops.c > @@ -197,6 +197,11 @@ static inline void tcg_remove_all_breakpoints(CPUState > *cpu) > cpu_watchpoint_remove_all(cpu, BP_GDB); > } > > +static int64_t tcg_get_virtual_clock(void) > +{ > + return cpu_get_clock(); > +} > + > static void tcg_accel_ops_init(AccelOpsClass *ops) > { > if (qemu_tcg_mttcg_enabled()) { > @@ -212,6 +217,7 @@ static void tcg_accel_ops_init(AccelOpsClass *ops) > ops->get_virtual_clock = icount_get; > ops->get_elapsed_ticks = icount_get; > } else { > + ops->get_virtual_clock = tcg_get_virtual_clock; > ops->handle_interrupt = tcg_handle_interrupt; > } > } > -- > 2.39.5 >