Browse Source
Since commit a0e61807a3 ("qapi: Remove QMP events and commands from
user-mode builds") we don't generate the "qapi-commands-machine.h"
header in a user-emulation-only build.
Rename 'hmp.c' as 'monitor.c' and move the QMP functions from
cpu-exec.c (which is always compiled) to monitor.c (which is only
compiled when system-emulation is selected).
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20221219170806.60580-4-philmd@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
pull/232/head
5 changed files with 112 additions and 101 deletions
@ -1,14 +0,0 @@ |
|||
#include "qemu/osdep.h" |
|||
#include "qemu/error-report.h" |
|||
#include "qapi/error.h" |
|||
#include "qapi/qapi-commands-machine.h" |
|||
#include "exec/exec-all.h" |
|||
#include "monitor/monitor.h" |
|||
|
|||
static void hmp_tcg_register(void) |
|||
{ |
|||
monitor_register_hmp_info_hrt("jit", qmp_x_query_jit); |
|||
monitor_register_hmp_info_hrt("opcount", qmp_x_query_opcount); |
|||
} |
|||
|
|||
type_init(hmp_tcg_register); |
|||
@ -0,0 +1,106 @@ |
|||
/*
|
|||
* SPDX-License-Identifier: LGPL-2.1-or-later |
|||
* |
|||
* QEMU TCG monitor |
|||
* |
|||
* Copyright (c) 2003-2005 Fabrice Bellard |
|||
*/ |
|||
|
|||
#include "qemu/osdep.h" |
|||
#include "qapi/error.h" |
|||
#include "qapi/type-helpers.h" |
|||
#include "qapi/qapi-commands-machine.h" |
|||
#include "monitor/monitor.h" |
|||
#include "sysemu/cpus.h" |
|||
#include "sysemu/cpu-timers.h" |
|||
#include "sysemu/tcg.h" |
|||
#include "internal.h" |
|||
|
|||
|
|||
static void dump_drift_info(GString *buf) |
|||
{ |
|||
if (!icount_enabled()) { |
|||
return; |
|||
} |
|||
|
|||
g_string_append_printf(buf, "Host - Guest clock %"PRIi64" ms\n", |
|||
(cpu_get_clock() - icount_get()) / SCALE_MS); |
|||
if (icount_align_option) { |
|||
g_string_append_printf(buf, "Max guest delay %"PRIi64" ms\n", |
|||
-max_delay / SCALE_MS); |
|||
g_string_append_printf(buf, "Max guest advance %"PRIi64" ms\n", |
|||
max_advance / SCALE_MS); |
|||
} else { |
|||
g_string_append_printf(buf, "Max guest delay NA\n"); |
|||
g_string_append_printf(buf, "Max guest advance NA\n"); |
|||
} |
|||
} |
|||
|
|||
HumanReadableText *qmp_x_query_jit(Error **errp) |
|||
{ |
|||
g_autoptr(GString) buf = g_string_new(""); |
|||
|
|||
if (!tcg_enabled()) { |
|||
error_setg(errp, "JIT information is only available with accel=tcg"); |
|||
return NULL; |
|||
} |
|||
|
|||
dump_exec_info(buf); |
|||
dump_drift_info(buf); |
|||
|
|||
return human_readable_text_from_str(buf); |
|||
} |
|||
|
|||
HumanReadableText *qmp_x_query_opcount(Error **errp) |
|||
{ |
|||
g_autoptr(GString) buf = g_string_new(""); |
|||
|
|||
if (!tcg_enabled()) { |
|||
error_setg(errp, |
|||
"Opcode count information is only available with accel=tcg"); |
|||
return NULL; |
|||
} |
|||
|
|||
tcg_dump_op_count(buf); |
|||
|
|||
return human_readable_text_from_str(buf); |
|||
} |
|||
|
|||
#ifdef CONFIG_PROFILER |
|||
|
|||
int64_t dev_time; |
|||
|
|||
HumanReadableText *qmp_x_query_profile(Error **errp) |
|||
{ |
|||
g_autoptr(GString) buf = g_string_new(""); |
|||
static int64_t last_cpu_exec_time; |
|||
int64_t cpu_exec_time; |
|||
int64_t delta; |
|||
|
|||
cpu_exec_time = tcg_cpu_exec_time(); |
|||
delta = cpu_exec_time - last_cpu_exec_time; |
|||
|
|||
g_string_append_printf(buf, "async time %" PRId64 " (%0.3f)\n", |
|||
dev_time, dev_time / (double)NANOSECONDS_PER_SECOND); |
|||
g_string_append_printf(buf, "qemu time %" PRId64 " (%0.3f)\n", |
|||
delta, delta / (double)NANOSECONDS_PER_SECOND); |
|||
last_cpu_exec_time = cpu_exec_time; |
|||
dev_time = 0; |
|||
|
|||
return human_readable_text_from_str(buf); |
|||
} |
|||
#else |
|||
HumanReadableText *qmp_x_query_profile(Error **errp) |
|||
{ |
|||
error_setg(errp, "Internal profiler not compiled"); |
|||
return NULL; |
|||
} |
|||
#endif |
|||
|
|||
static void hmp_tcg_register(void) |
|||
{ |
|||
monitor_register_hmp_info_hrt("jit", qmp_x_query_jit); |
|||
monitor_register_hmp_info_hrt("opcount", qmp_x_query_opcount); |
|||
} |
|||
|
|||
type_init(hmp_tcg_register); |
|||
Loading…
Reference in new issue