machine: Move QMP commands from monitor/ to hw/core/
This moves these commands from MAINTAINERS section "QMP" to "Machine core". Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20230124121946.1139465-10-armbru@redhat.com>
This commit is contained in:
parent
29b62a1063
commit
d9c631ea9f
@ -9,6 +9,9 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "hw/boards.h"
|
||||
#include "hw/intc/intc.h"
|
||||
#include "hw/mem/memory-device.h"
|
||||
#include "hw/rdma/rdma.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qapi-builtin-visit.h"
|
||||
#include "qapi/qapi-commands-machine.h"
|
||||
@ -17,11 +20,13 @@
|
||||
#include "qapi/qobject-input-visitor.h"
|
||||
#include "qapi/type-helpers.h"
|
||||
#include "qemu/main-loop.h"
|
||||
#include "qemu/uuid.h"
|
||||
#include "qom/qom-qobject.h"
|
||||
#include "sysemu/hostmem.h"
|
||||
#include "sysemu/hw_accel.h"
|
||||
#include "sysemu/numa.h"
|
||||
#include "sysemu/runstate.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
||||
static void cpustate_to_cpuinfo_s390(CpuInfoS390 *info, const CPUState *cpu)
|
||||
{
|
||||
@ -239,3 +244,142 @@ HumanReadableText *qmp_x_query_numa(Error **errp)
|
||||
done:
|
||||
return human_readable_text_from_str(buf);
|
||||
}
|
||||
|
||||
KvmInfo *qmp_query_kvm(Error **errp)
|
||||
{
|
||||
KvmInfo *info = g_malloc0(sizeof(*info));
|
||||
|
||||
info->enabled = kvm_enabled();
|
||||
info->present = accel_find("kvm");
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
UuidInfo *qmp_query_uuid(Error **errp)
|
||||
{
|
||||
UuidInfo *info = g_malloc0(sizeof(*info));
|
||||
|
||||
info->UUID = qemu_uuid_unparse_strdup(&qemu_uuid);
|
||||
return info;
|
||||
}
|
||||
|
||||
void qmp_system_reset(Error **errp)
|
||||
{
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_HOST_QMP_SYSTEM_RESET);
|
||||
}
|
||||
|
||||
void qmp_system_powerdown(Error **errp)
|
||||
{
|
||||
qemu_system_powerdown_request();
|
||||
}
|
||||
|
||||
void qmp_system_wakeup(Error **errp)
|
||||
{
|
||||
if (!qemu_wakeup_suspend_enabled()) {
|
||||
error_setg(errp,
|
||||
"wake-up from suspend is not supported by this guest");
|
||||
return;
|
||||
}
|
||||
|
||||
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, errp);
|
||||
}
|
||||
|
||||
MemoryDeviceInfoList *qmp_query_memory_devices(Error **errp)
|
||||
{
|
||||
return qmp_memory_device_list();
|
||||
}
|
||||
|
||||
MemoryInfo *qmp_query_memory_size_summary(Error **errp)
|
||||
{
|
||||
MemoryInfo *mem_info = g_new0(MemoryInfo, 1);
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
|
||||
mem_info->base_memory = ms->ram_size;
|
||||
|
||||
mem_info->plugged_memory = get_plugged_memory_size();
|
||||
mem_info->has_plugged_memory =
|
||||
mem_info->plugged_memory != (uint64_t)-1;
|
||||
|
||||
return mem_info;
|
||||
}
|
||||
|
||||
static int qmp_x_query_rdma_foreach(Object *obj, void *opaque)
|
||||
{
|
||||
RdmaProvider *rdma;
|
||||
RdmaProviderClass *k;
|
||||
GString *buf = opaque;
|
||||
|
||||
if (object_dynamic_cast(obj, INTERFACE_RDMA_PROVIDER)) {
|
||||
rdma = RDMA_PROVIDER(obj);
|
||||
k = RDMA_PROVIDER_GET_CLASS(obj);
|
||||
if (k->format_statistics) {
|
||||
k->format_statistics(rdma, buf);
|
||||
} else {
|
||||
g_string_append_printf(buf,
|
||||
"RDMA statistics not available for %s.\n",
|
||||
object_get_typename(obj));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
HumanReadableText *qmp_x_query_rdma(Error **errp)
|
||||
{
|
||||
g_autoptr(GString) buf = g_string_new("");
|
||||
|
||||
object_child_foreach_recursive(object_get_root(),
|
||||
qmp_x_query_rdma_foreach, buf);
|
||||
|
||||
return human_readable_text_from_str(buf);
|
||||
}
|
||||
|
||||
HumanReadableText *qmp_x_query_ramblock(Error **errp)
|
||||
{
|
||||
g_autoptr(GString) buf = ram_block_format();
|
||||
|
||||
return human_readable_text_from_str(buf);
|
||||
}
|
||||
|
||||
static int qmp_x_query_irq_foreach(Object *obj, void *opaque)
|
||||
{
|
||||
InterruptStatsProvider *intc;
|
||||
InterruptStatsProviderClass *k;
|
||||
GString *buf = opaque;
|
||||
|
||||
if (object_dynamic_cast(obj, TYPE_INTERRUPT_STATS_PROVIDER)) {
|
||||
intc = INTERRUPT_STATS_PROVIDER(obj);
|
||||
k = INTERRUPT_STATS_PROVIDER_GET_CLASS(obj);
|
||||
uint64_t *irq_counts;
|
||||
unsigned int nb_irqs, i;
|
||||
if (k->get_statistics &&
|
||||
k->get_statistics(intc, &irq_counts, &nb_irqs)) {
|
||||
if (nb_irqs > 0) {
|
||||
g_string_append_printf(buf, "IRQ statistics for %s:\n",
|
||||
object_get_typename(obj));
|
||||
for (i = 0; i < nb_irqs; i++) {
|
||||
if (irq_counts[i] > 0) {
|
||||
g_string_append_printf(buf, "%2d: %" PRId64 "\n", i,
|
||||
irq_counts[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
g_string_append_printf(buf,
|
||||
"IRQ statistics not available for %s.\n",
|
||||
object_get_typename(obj));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
HumanReadableText *qmp_x_query_irq(Error **errp)
|
||||
{
|
||||
g_autoptr(GString) buf = g_string_new("");
|
||||
|
||||
object_child_foreach_recursive(object_get_root(),
|
||||
qmp_x_query_irq_foreach, buf);
|
||||
|
||||
return human_readable_text_from_str(buf);
|
||||
}
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qapi-commands-acpi.h"
|
||||
#include "qapi/qapi-commands-control.h"
|
||||
#include "qapi/qapi-commands-machine.h"
|
||||
#include "qapi/qapi-commands-misc.h"
|
||||
#include "qapi/qapi-commands-stats.h"
|
||||
#include "qapi/type-helpers.h"
|
||||
@ -42,24 +41,6 @@ NameInfo *qmp_query_name(Error **errp)
|
||||
return info;
|
||||
}
|
||||
|
||||
KvmInfo *qmp_query_kvm(Error **errp)
|
||||
{
|
||||
KvmInfo *info = g_malloc0(sizeof(*info));
|
||||
|
||||
info->enabled = kvm_enabled();
|
||||
info->present = accel_find("kvm");
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
UuidInfo *qmp_query_uuid(Error **errp)
|
||||
{
|
||||
UuidInfo *info = g_malloc0(sizeof(*info));
|
||||
|
||||
info->UUID = qemu_uuid_unparse_strdup(&qemu_uuid);
|
||||
return info;
|
||||
}
|
||||
|
||||
void qmp_quit(Error **errp)
|
||||
{
|
||||
shutdown_action = SHUTDOWN_ACTION_POWEROFF;
|
||||
@ -82,16 +63,6 @@ void qmp_stop(Error **errp)
|
||||
}
|
||||
}
|
||||
|
||||
void qmp_system_reset(Error **errp)
|
||||
{
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_HOST_QMP_SYSTEM_RESET);
|
||||
}
|
||||
|
||||
void qmp_system_powerdown(Error **errp)
|
||||
{
|
||||
qemu_system_powerdown_request();
|
||||
}
|
||||
|
||||
void qmp_cont(Error **errp)
|
||||
{
|
||||
BlockBackend *blk;
|
||||
@ -145,17 +116,6 @@ void qmp_cont(Error **errp)
|
||||
}
|
||||
}
|
||||
|
||||
void qmp_system_wakeup(Error **errp)
|
||||
{
|
||||
if (!qemu_wakeup_suspend_enabled()) {
|
||||
error_setg(errp,
|
||||
"wake-up from suspend is not supported by this guest");
|
||||
return;
|
||||
}
|
||||
|
||||
qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER, errp);
|
||||
}
|
||||
|
||||
void qmp_add_client(const char *protocol, const char *fdname,
|
||||
bool has_skipauth, bool skipauth, bool has_tls, bool tls,
|
||||
Error **errp)
|
||||
@ -196,11 +156,6 @@ void qmp_add_client(const char *protocol, const char *fdname,
|
||||
}
|
||||
}
|
||||
|
||||
MemoryDeviceInfoList *qmp_query_memory_devices(Error **errp)
|
||||
{
|
||||
return qmp_memory_device_list();
|
||||
}
|
||||
|
||||
ACPIOSTInfoList *qmp_query_acpi_ospm_status(Error **errp)
|
||||
{
|
||||
bool ambig;
|
||||
@ -220,101 +175,6 @@ ACPIOSTInfoList *qmp_query_acpi_ospm_status(Error **errp)
|
||||
return head;
|
||||
}
|
||||
|
||||
MemoryInfo *qmp_query_memory_size_summary(Error **errp)
|
||||
{
|
||||
MemoryInfo *mem_info = g_new0(MemoryInfo, 1);
|
||||
MachineState *ms = MACHINE(qdev_get_machine());
|
||||
|
||||
mem_info->base_memory = ms->ram_size;
|
||||
|
||||
mem_info->plugged_memory = get_plugged_memory_size();
|
||||
mem_info->has_plugged_memory =
|
||||
mem_info->plugged_memory != (uint64_t)-1;
|
||||
|
||||
return mem_info;
|
||||
}
|
||||
|
||||
static int qmp_x_query_rdma_foreach(Object *obj, void *opaque)
|
||||
{
|
||||
RdmaProvider *rdma;
|
||||
RdmaProviderClass *k;
|
||||
GString *buf = opaque;
|
||||
|
||||
if (object_dynamic_cast(obj, INTERFACE_RDMA_PROVIDER)) {
|
||||
rdma = RDMA_PROVIDER(obj);
|
||||
k = RDMA_PROVIDER_GET_CLASS(obj);
|
||||
if (k->format_statistics) {
|
||||
k->format_statistics(rdma, buf);
|
||||
} else {
|
||||
g_string_append_printf(buf,
|
||||
"RDMA statistics not available for %s.\n",
|
||||
object_get_typename(obj));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
HumanReadableText *qmp_x_query_rdma(Error **errp)
|
||||
{
|
||||
g_autoptr(GString) buf = g_string_new("");
|
||||
|
||||
object_child_foreach_recursive(object_get_root(),
|
||||
qmp_x_query_rdma_foreach, buf);
|
||||
|
||||
return human_readable_text_from_str(buf);
|
||||
}
|
||||
|
||||
HumanReadableText *qmp_x_query_ramblock(Error **errp)
|
||||
{
|
||||
g_autoptr(GString) buf = ram_block_format();
|
||||
|
||||
return human_readable_text_from_str(buf);
|
||||
}
|
||||
|
||||
static int qmp_x_query_irq_foreach(Object *obj, void *opaque)
|
||||
{
|
||||
InterruptStatsProvider *intc;
|
||||
InterruptStatsProviderClass *k;
|
||||
GString *buf = opaque;
|
||||
|
||||
if (object_dynamic_cast(obj, TYPE_INTERRUPT_STATS_PROVIDER)) {
|
||||
intc = INTERRUPT_STATS_PROVIDER(obj);
|
||||
k = INTERRUPT_STATS_PROVIDER_GET_CLASS(obj);
|
||||
uint64_t *irq_counts;
|
||||
unsigned int nb_irqs, i;
|
||||
if (k->get_statistics &&
|
||||
k->get_statistics(intc, &irq_counts, &nb_irqs)) {
|
||||
if (nb_irqs > 0) {
|
||||
g_string_append_printf(buf, "IRQ statistics for %s:\n",
|
||||
object_get_typename(obj));
|
||||
for (i = 0; i < nb_irqs; i++) {
|
||||
if (irq_counts[i] > 0) {
|
||||
g_string_append_printf(buf, "%2d: %" PRId64 "\n", i,
|
||||
irq_counts[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
g_string_append_printf(buf,
|
||||
"IRQ statistics not available for %s.\n",
|
||||
object_get_typename(obj));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
HumanReadableText *qmp_x_query_irq(Error **errp)
|
||||
{
|
||||
g_autoptr(GString) buf = g_string_new("");
|
||||
|
||||
object_child_foreach_recursive(object_get_root(),
|
||||
qmp_x_query_irq_foreach, buf);
|
||||
|
||||
return human_readable_text_from_str(buf);
|
||||
}
|
||||
|
||||
typedef struct StatsCallbacks {
|
||||
StatsProvider provider;
|
||||
StatRetrieveFunc *stats_cb;
|
||||
|
Loading…
Reference in New Issue
Block a user