On Mon, Jun 1, 2015 at 1:03 AM, Paolo Bonzini <pbonz...@redhat.com> wrote: > > > On 31/05/2015 08:11, Peter Crosthwaite wrote: >> Not dealing with this problem as of this RFC, but comments on how >> to solve it welcome. The approach adopted by this series is to >> implement multi-arch as multiple translators, so a single global >> TCG profiler is now ill-defined. > > Probably some kind of tcg-common.c? The counts can be added together > for all CPUs, and hence moved out of tcg_ctx. > > Also for example tcg/tcg-opc.h should only depend on > TCG_TARGET_REG_BITS, i.e. not on the arch. Hence tcg_op_defs should > also be arch-independent. >
it is. Due to disas/tci.c's usages of tcg_op_defs this has been pulled to tcg-common.c. tcg_table_op_count and tcg_dump_op_count could go with it, but we are left with a harder problem with dump_exec_info which reaches into the tcg_ctx. So dump_exec_info is converted to a CPU_HOOK using the monitor CPU as context. This means you will get the TCG stats for tcg_ctx for the current CPU only. To keep the semantics consistent, I have done the same for dump_opcount_info. So both are CPU hooks: --- a/monitor.c +++ b/monitor.c @@ -962,13 +962,13 @@ static void hmp_info_registers(Monitor *mon, const QDict *qdict) static void hmp_info_jit(Monitor *mon, const QDict *qdict) { - dump_exec_info((FILE *)mon, monitor_fprintf); + CPU_HOOK(mon_get_cpu(), dump_exec_info)((FILE *)mon, monitor_fprintf); dump_drift_info((FILE *)mon, monitor_fprintf); } static void hmp_info_opcount(Monitor *mon, const QDict *qdict) { - dump_opcount_info((FILE *)mon, monitor_fprintf); + CPU_HOOK(mon_get_cpu(), dump_opcount_info)((FILE *)mon, monitor_fprintf); } static void hmp_info_history(Monitor *mon, const QDict *qdict) Regards, Peter P.S. Your macro CPU_HOOK suggestion has allowed me to remove all the stub implementations of hook functions, making it scarily easy to add new hooks. > Paolo > >> Signed-off-by: Peter Crosthwaite <crosthwaite.pe...@gmail.com> >> --- >> monitor.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/monitor.c b/monitor.c >> index 1a17cf3..f3ee785 100644 >> --- a/monitor.c >> +++ b/monitor.c >> @@ -1036,13 +1036,17 @@ static void hmp_info_registers(Monitor *mon, const >> QDict *qdict) >> >> static void hmp_info_jit(Monitor *mon, const QDict *qdict) >> { >> +#if 0 >> dump_exec_info((FILE *)mon, monitor_fprintf); >> +#endif >> dump_drift_info((FILE *)mon, monitor_fprintf); >> } >> >> static void hmp_info_opcount(Monitor *mon, const QDict *qdict) >> { >> +#if 0 >> dump_opcount_info((FILE *)mon, monitor_fprintf); >> +#endif >> } >> >> static void hmp_info_history(Monitor *mon, const QDict *qdict) >> >