#include "exec/gdbstub.h"
#include "net/net.h"
#include "net/slirp.h"
-#include "sysemu/char.h"
+#include "chardev/char-fe.h"
#include "ui/qemu-spice.h"
#include "sysemu/numa.h"
#include "monitor/monitor.h"
static void monitor_data_destroy(Monitor *mon)
{
- qemu_chr_fe_deinit(&mon->chr);
+ qemu_chr_fe_deinit(&mon->chr, false);
if (monitor_is_qmp(mon)) {
json_message_parser_destroy(&mon->qmp.parser);
}
static void hmp_info_numa(Monitor *mon, const QDict *qdict)
{
int i;
- CPUState *cpu;
uint64_t *node_mem;
+ CpuInfoList *cpu_list, *cpu;
+ cpu_list = qmp_query_cpus(&error_abort);
node_mem = g_new0(uint64_t, nb_numa_nodes);
query_numa_node_mem(node_mem);
monitor_printf(mon, "%d nodes\n", nb_numa_nodes);
for (i = 0; i < nb_numa_nodes; i++) {
monitor_printf(mon, "node %d cpus:", i);
- CPU_FOREACH(cpu) {
- if (cpu->numa_node == i) {
- monitor_printf(mon, " %d", cpu->cpu_index);
+ for (cpu = cpu_list; cpu; cpu = cpu->next) {
+ if (cpu->value->has_props && cpu->value->props->has_node_id &&
+ cpu->value->props->node_id == i) {
+ monitor_printf(mon, " %" PRIi64, cpu->value->CPU);
}
}
monitor_printf(mon, "\n");
monitor_printf(mon, "node %d size: %" PRId64 " MB\n", i,
node_mem[i] >> 20);
}
+ qapi_free_CpuInfoList(cpu_list);
g_free(node_mem);
}
QDict *qdict;
const mon_cmd_t *cmd;
+ trace_handle_hmp_command(mon, cmdline);
+
cmd = monitor_parse_command(mon, &cmdline, mon->cmd_table);
if (!cmd) {
return;
QDict *qdict = NULL;
Monitor *mon = cur_mon;
Error *err = NULL;
+ QString *req_json;
req = json_parser_parse_err(tokens, NULL, &err);
if (!req && !err) {
qdict_del(qdict, "id");
} /* else will fail qmp_dispatch() */
+ req_json = qobject_to_json(req);
+ trace_handle_qmp_command(mon, qstring_get_str(req_json));
+ qobject_decref(QOBJECT(req_json));
+
rsp = qmp_dispatch(cur_mon->qmp.commands, req);
if (mon->qmp.commands == &qmp_cap_negotiation_commands) {