Merge remote-tracking branch 'luiz/queue/qmp' into staging
# By Wenchao Xia # Via Luiz Capitulino * luiz/queue/qmp: HMP: add sub command table to info HMP: move define of mon_cmds HMP: add infrastructure for sub command HMP: delete info handler HMP: add QDict to info callback handler
This commit is contained in:
commit
ddc01bf16e
|
@ -1521,7 +1521,8 @@ ETEXI
|
||||||
.args_type = "item:s?",
|
.args_type = "item:s?",
|
||||||
.params = "[subcommand]",
|
.params = "[subcommand]",
|
||||||
.help = "show various information about the system state",
|
.help = "show various information about the system state",
|
||||||
.mhandler.cmd = do_info,
|
.mhandler.cmd = do_info_help,
|
||||||
|
.sub_table = info_cmds,
|
||||||
},
|
},
|
||||||
|
|
||||||
STEXI
|
STEXI
|
||||||
|
|
36
hmp.c
36
hmp.c
|
@ -31,7 +31,7 @@ static void hmp_handle_error(Monitor *mon, Error **errp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_name(Monitor *mon)
|
void hmp_info_name(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
NameInfo *info;
|
NameInfo *info;
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ void hmp_info_name(Monitor *mon)
|
||||||
qapi_free_NameInfo(info);
|
qapi_free_NameInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_version(Monitor *mon)
|
void hmp_info_version(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
VersionInfo *info;
|
VersionInfo *info;
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ void hmp_info_version(Monitor *mon)
|
||||||
qapi_free_VersionInfo(info);
|
qapi_free_VersionInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_kvm(Monitor *mon)
|
void hmp_info_kvm(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
KvmInfo *info;
|
KvmInfo *info;
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ void hmp_info_kvm(Monitor *mon)
|
||||||
qapi_free_KvmInfo(info);
|
qapi_free_KvmInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_status(Monitor *mon)
|
void hmp_info_status(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
StatusInfo *info;
|
StatusInfo *info;
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ void hmp_info_status(Monitor *mon)
|
||||||
qapi_free_StatusInfo(info);
|
qapi_free_StatusInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_uuid(Monitor *mon)
|
void hmp_info_uuid(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
UuidInfo *info;
|
UuidInfo *info;
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ void hmp_info_uuid(Monitor *mon)
|
||||||
qapi_free_UuidInfo(info);
|
qapi_free_UuidInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_chardev(Monitor *mon)
|
void hmp_info_chardev(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
ChardevInfoList *char_info, *info;
|
ChardevInfoList *char_info, *info;
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ void hmp_info_chardev(Monitor *mon)
|
||||||
qapi_free_ChardevInfoList(char_info);
|
qapi_free_ChardevInfoList(char_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_mice(Monitor *mon)
|
void hmp_info_mice(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
MouseInfoList *mice_list, *mouse;
|
MouseInfoList *mice_list, *mouse;
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ void hmp_info_mice(Monitor *mon)
|
||||||
qapi_free_MouseInfoList(mice_list);
|
qapi_free_MouseInfoList(mice_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_migrate(Monitor *mon)
|
void hmp_info_migrate(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
MigrationInfo *info;
|
MigrationInfo *info;
|
||||||
MigrationCapabilityStatusList *caps, *cap;
|
MigrationCapabilityStatusList *caps, *cap;
|
||||||
|
@ -209,7 +209,7 @@ void hmp_info_migrate(Monitor *mon)
|
||||||
qapi_free_MigrationCapabilityStatusList(caps);
|
qapi_free_MigrationCapabilityStatusList(caps);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_migrate_capabilities(Monitor *mon)
|
void hmp_info_migrate_capabilities(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
MigrationCapabilityStatusList *caps, *cap;
|
MigrationCapabilityStatusList *caps, *cap;
|
||||||
|
|
||||||
|
@ -228,13 +228,13 @@ void hmp_info_migrate_capabilities(Monitor *mon)
|
||||||
qapi_free_MigrationCapabilityStatusList(caps);
|
qapi_free_MigrationCapabilityStatusList(caps);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_migrate_cache_size(Monitor *mon)
|
void hmp_info_migrate_cache_size(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
monitor_printf(mon, "xbzrel cache size: %" PRId64 " kbytes\n",
|
monitor_printf(mon, "xbzrel cache size: %" PRId64 " kbytes\n",
|
||||||
qmp_query_migrate_cache_size(NULL) >> 10);
|
qmp_query_migrate_cache_size(NULL) >> 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_cpus(Monitor *mon)
|
void hmp_info_cpus(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
CpuInfoList *cpu_list, *cpu;
|
CpuInfoList *cpu_list, *cpu;
|
||||||
|
|
||||||
|
@ -272,7 +272,7 @@ void hmp_info_cpus(Monitor *mon)
|
||||||
qapi_free_CpuInfoList(cpu_list);
|
qapi_free_CpuInfoList(cpu_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_block(Monitor *mon)
|
void hmp_info_block(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
BlockInfoList *block_list, *info;
|
BlockInfoList *block_list, *info;
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ void hmp_info_block(Monitor *mon)
|
||||||
qapi_free_BlockInfoList(block_list);
|
qapi_free_BlockInfoList(block_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_blockstats(Monitor *mon)
|
void hmp_info_blockstats(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
BlockStatsList *stats_list, *stats;
|
BlockStatsList *stats_list, *stats;
|
||||||
|
|
||||||
|
@ -360,7 +360,7 @@ void hmp_info_blockstats(Monitor *mon)
|
||||||
qapi_free_BlockStatsList(stats_list);
|
qapi_free_BlockStatsList(stats_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_vnc(Monitor *mon)
|
void hmp_info_vnc(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
VncInfo *info;
|
VncInfo *info;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
@ -406,7 +406,7 @@ out:
|
||||||
qapi_free_VncInfo(info);
|
qapi_free_VncInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_spice(Monitor *mon)
|
void hmp_info_spice(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
SpiceChannelList *chan;
|
SpiceChannelList *chan;
|
||||||
SpiceInfo *info;
|
SpiceInfo *info;
|
||||||
|
@ -453,7 +453,7 @@ out:
|
||||||
qapi_free_SpiceInfo(info);
|
qapi_free_SpiceInfo(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_balloon(Monitor *mon)
|
void hmp_info_balloon(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
BalloonInfo *info;
|
BalloonInfo *info;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
@ -570,7 +570,7 @@ static void hmp_info_pci_device(Monitor *mon, const PciDeviceInfo *dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_pci(Monitor *mon)
|
void hmp_info_pci(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
PciInfoList *info_list, *info;
|
PciInfoList *info_list, *info;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
@ -593,7 +593,7 @@ void hmp_info_pci(Monitor *mon)
|
||||||
qapi_free_PciInfoList(info_list);
|
qapi_free_PciInfoList(info_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hmp_info_block_jobs(Monitor *mon)
|
void hmp_info_block_jobs(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
BlockJobInfoList *list;
|
BlockJobInfoList *list;
|
||||||
Error *err = NULL;
|
Error *err = NULL;
|
||||||
|
|
36
hmp.h
36
hmp.h
|
@ -18,24 +18,24 @@
|
||||||
#include "qapi-types.h"
|
#include "qapi-types.h"
|
||||||
#include "qapi/qmp/qdict.h"
|
#include "qapi/qmp/qdict.h"
|
||||||
|
|
||||||
void hmp_info_name(Monitor *mon);
|
void hmp_info_name(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_version(Monitor *mon);
|
void hmp_info_version(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_kvm(Monitor *mon);
|
void hmp_info_kvm(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_status(Monitor *mon);
|
void hmp_info_status(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_uuid(Monitor *mon);
|
void hmp_info_uuid(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_chardev(Monitor *mon);
|
void hmp_info_chardev(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_mice(Monitor *mon);
|
void hmp_info_mice(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_migrate(Monitor *mon);
|
void hmp_info_migrate(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_migrate_capabilities(Monitor *mon);
|
void hmp_info_migrate_capabilities(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_migrate_cache_size(Monitor *mon);
|
void hmp_info_migrate_cache_size(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_cpus(Monitor *mon);
|
void hmp_info_cpus(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_block(Monitor *mon);
|
void hmp_info_block(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_blockstats(Monitor *mon);
|
void hmp_info_blockstats(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_vnc(Monitor *mon);
|
void hmp_info_vnc(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_spice(Monitor *mon);
|
void hmp_info_spice(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_balloon(Monitor *mon);
|
void hmp_info_balloon(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_pci(Monitor *mon);
|
void hmp_info_pci(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_info_block_jobs(Monitor *mon);
|
void hmp_info_block_jobs(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_quit(Monitor *mon, const QDict *qdict);
|
void hmp_quit(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_stop(Monitor *mon, const QDict *qdict);
|
void hmp_stop(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_system_reset(Monitor *mon, const QDict *qdict);
|
void hmp_system_reset(Monitor *mon, const QDict *qdict);
|
||||||
|
|
|
@ -407,7 +407,7 @@ static void pic_init(PICCommonState *s)
|
||||||
qdev_init_gpio_in(&s->dev.qdev, pic_set_irq, 8);
|
qdev_init_gpio_in(&s->dev.qdev, pic_set_irq, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pic_info(Monitor *mon)
|
void pic_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
PICCommonState *s;
|
PICCommonState *s;
|
||||||
|
@ -425,7 +425,7 @@ void pic_info(Monitor *mon)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void irq_info(Monitor *mon)
|
void irq_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
#ifndef DEBUG_IRQ_COUNT
|
#ifndef DEBUG_IRQ_COUNT
|
||||||
monitor_printf(mon, "irq statistic code not compiled.\n");
|
monitor_printf(mon, "irq statistic code not compiled.\n");
|
||||||
|
|
|
@ -39,7 +39,7 @@ struct LM32PicState {
|
||||||
typedef struct LM32PicState LM32PicState;
|
typedef struct LM32PicState LM32PicState;
|
||||||
|
|
||||||
static LM32PicState *pic;
|
static LM32PicState *pic;
|
||||||
void lm32_do_pic_info(Monitor *mon)
|
void lm32_do_pic_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
if (pic == NULL) {
|
if (pic == NULL) {
|
||||||
return;
|
return;
|
||||||
|
@ -49,7 +49,7 @@ void lm32_do_pic_info(Monitor *mon)
|
||||||
pic->im, pic->ip, pic->irq_state);
|
pic->im, pic->ip, pic->irq_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lm32_irq_info(Monitor *mon)
|
void lm32_irq_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
uint32_t count;
|
uint32_t count;
|
||||||
|
|
|
@ -8,7 +8,7 @@ uint32_t lm32_pic_get_im(DeviceState *d);
|
||||||
void lm32_pic_set_ip(DeviceState *d, uint32_t ip);
|
void lm32_pic_set_ip(DeviceState *d, uint32_t ip);
|
||||||
void lm32_pic_set_im(DeviceState *d, uint32_t im);
|
void lm32_pic_set_im(DeviceState *d, uint32_t im);
|
||||||
|
|
||||||
void lm32_do_pic_info(Monitor *mon);
|
void lm32_do_pic_info(Monitor *mon, const QDict *qdict);
|
||||||
void lm32_irq_info(Monitor *mon);
|
void lm32_irq_info(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
#endif /* QEMU_HW_LM32_PIC_H */
|
#endif /* QEMU_HW_LM32_PIC_H */
|
||||||
|
|
|
@ -778,7 +778,7 @@ void *rom_ptr(hwaddr addr)
|
||||||
return rom->data + (addr - rom->addr);
|
return rom->data + (addr - rom->addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_info_roms(Monitor *mon)
|
void do_info_roms(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
Rom *rom;
|
Rom *rom;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#ifndef LOADER_H
|
#ifndef LOADER_H
|
||||||
#define LOADER_H
|
#define LOADER_H
|
||||||
|
#include "qapi/qmp/qdict.h"
|
||||||
|
|
||||||
/* loader.c */
|
/* loader.c */
|
||||||
int get_image_size(const char *filename);
|
int get_image_size(const char *filename);
|
||||||
|
@ -30,7 +31,7 @@ int rom_load_all(void);
|
||||||
void rom_set_fw(void *f);
|
void rom_set_fw(void *f);
|
||||||
int rom_copy(uint8_t *dest, hwaddr addr, size_t size);
|
int rom_copy(uint8_t *dest, hwaddr addr, size_t size);
|
||||||
void *rom_ptr(hwaddr addr);
|
void *rom_ptr(hwaddr addr);
|
||||||
void do_info_roms(Monitor *mon);
|
void do_info_roms(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
#define rom_add_file_fixed(_f, _a, _i) \
|
#define rom_add_file_fixed(_f, _a, _i) \
|
||||||
rom_add_file(_f, NULL, _a, _i)
|
rom_add_file(_f, NULL, _a, _i)
|
||||||
|
|
4
hw/pc.h
4
hw/pc.h
|
@ -40,8 +40,8 @@ qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq);
|
||||||
qemu_irq *kvm_i8259_init(ISABus *bus);
|
qemu_irq *kvm_i8259_init(ISABus *bus);
|
||||||
int pic_read_irq(DeviceState *d);
|
int pic_read_irq(DeviceState *d);
|
||||||
int pic_get_output(DeviceState *d);
|
int pic_get_output(DeviceState *d);
|
||||||
void pic_info(Monitor *mon);
|
void pic_info(Monitor *mon, const QDict *qdict);
|
||||||
void irq_info(Monitor *mon);
|
void irq_info(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
/* Global System Interrupts */
|
/* Global System Interrupts */
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ typedef struct {
|
||||||
|
|
||||||
void pcmcia_socket_register(PCMCIASocket *socket);
|
void pcmcia_socket_register(PCMCIASocket *socket);
|
||||||
void pcmcia_socket_unregister(PCMCIASocket *socket);
|
void pcmcia_socket_unregister(PCMCIASocket *socket);
|
||||||
void pcmcia_info(Monitor *mon);
|
void pcmcia_info(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
struct PCMCIACardState {
|
struct PCMCIACardState {
|
||||||
void *state;
|
void *state;
|
||||||
|
|
|
@ -564,13 +564,13 @@ static void qbus_print(Monitor *mon, BusState *bus, int indent)
|
||||||
}
|
}
|
||||||
#undef qdev_printf
|
#undef qdev_printf
|
||||||
|
|
||||||
void do_info_qtree(Monitor *mon)
|
void do_info_qtree(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
if (sysbus_get_default())
|
if (sysbus_get_default())
|
||||||
qbus_print(mon, sysbus_get_default(), 0);
|
qbus_print(mon, sysbus_get_default(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_info_qdm(Monitor *mon)
|
void do_info_qdm(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false, NULL);
|
object_class_foreach(qdev_print_devinfo, TYPE_DEVICE, false, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
|
|
||||||
/*** monitor commands ***/
|
/*** monitor commands ***/
|
||||||
|
|
||||||
void do_info_qtree(Monitor *mon);
|
void do_info_qtree(Monitor *mon, const QDict *qdict);
|
||||||
void do_info_qdm(Monitor *mon);
|
void do_info_qdm(Monitor *mon, const QDict *qdict);
|
||||||
int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
|
int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
|
||||||
int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
|
int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
|
||||||
int qdev_device_help(QemuOpts *opts);
|
int qdev_device_help(QemuOpts *opts);
|
||||||
|
|
|
@ -216,13 +216,13 @@ static void nvram_init(M48t59State *nvram, uint8_t *macaddr,
|
||||||
|
|
||||||
static DeviceState *slavio_intctl;
|
static DeviceState *slavio_intctl;
|
||||||
|
|
||||||
void sun4m_pic_info(Monitor *mon)
|
void sun4m_pic_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
if (slavio_intctl)
|
if (slavio_intctl)
|
||||||
slavio_pic_info(mon, slavio_intctl);
|
slavio_pic_info(mon, slavio_intctl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sun4m_irq_info(Monitor *mon)
|
void sun4m_irq_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
if (slavio_intctl)
|
if (slavio_intctl)
|
||||||
slavio_irq_info(mon, slavio_intctl);
|
slavio_irq_info(mon, slavio_intctl);
|
||||||
|
|
|
@ -27,8 +27,8 @@ void slavio_pic_info(Monitor *mon, DeviceState *dev);
|
||||||
void slavio_irq_info(Monitor *mon, DeviceState *dev);
|
void slavio_irq_info(Monitor *mon, DeviceState *dev);
|
||||||
|
|
||||||
/* sun4m.c */
|
/* sun4m.c */
|
||||||
void sun4m_pic_info(Monitor *mon);
|
void sun4m_pic_info(Monitor *mon, const QDict *qdict);
|
||||||
void sun4m_irq_info(Monitor *mon);
|
void sun4m_irq_info(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
/* sparc32_dma.c */
|
/* sparc32_dma.c */
|
||||||
#include "sparc32_dma.h"
|
#include "sparc32_dma.h"
|
||||||
|
|
2
hw/usb.h
2
hw/usb.h
|
@ -435,7 +435,7 @@ int set_usb_string(uint8_t *buf, const char *str);
|
||||||
/* usb-linux.c */
|
/* usb-linux.c */
|
||||||
USBDevice *usb_host_device_open(USBBus *bus, const char *devname);
|
USBDevice *usb_host_device_open(USBBus *bus, const char *devname);
|
||||||
int usb_host_device_close(const char *devname);
|
int usb_host_device_close(const char *devname);
|
||||||
void usb_host_info(Monitor *mon);
|
void usb_host_info(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
/* usb-bt.c */
|
/* usb-bt.c */
|
||||||
USBDevice *usb_bt_init(USBBus *bus, HCIInfo *hci);
|
USBDevice *usb_bt_init(USBBus *bus, HCIInfo *hci);
|
||||||
|
|
|
@ -542,7 +542,7 @@ static char *usb_get_fw_dev_path(DeviceState *qdev)
|
||||||
return fw_path;
|
return fw_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
void usb_info(Monitor *mon)
|
void usb_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
USBBus *bus;
|
USBBus *bus;
|
||||||
USBDevice *dev;
|
USBDevice *dev;
|
||||||
|
|
|
@ -633,7 +633,7 @@ static int usb_host_info_device(void *opaque,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void usb_host_info(Monitor *mon)
|
void usb_host_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
usb_host_scan(mon, usb_host_info_device);
|
usb_host_scan(mon, usb_host_info_device);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1998,7 +1998,7 @@ static void hex2str(int val, char *str, size_t size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void usb_host_info(Monitor *mon)
|
void usb_host_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
struct USBAutoFilter *f;
|
struct USBAutoFilter *f;
|
||||||
struct USBHostDevice *s;
|
struct USBHostDevice *s;
|
||||||
|
|
|
@ -112,7 +112,7 @@ ssize_t qemu_deliver_packet_iov(NetClientState *sender,
|
||||||
void *opaque);
|
void *opaque);
|
||||||
|
|
||||||
void print_net_client(Monitor *mon, NetClientState *nc);
|
void print_net_client(Monitor *mon, NetClientState *nc);
|
||||||
void do_info_network(Monitor *mon);
|
void do_info_network(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
/* NIC info */
|
/* NIC info */
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ int net_slirp_parse_legacy(QemuOptsList *opts_list, const char *optarg, int *ret
|
||||||
|
|
||||||
int net_slirp_smb(const char *exported_dir);
|
int net_slirp_smb(const char *exported_dir);
|
||||||
|
|
||||||
void do_info_usernet(Monitor *mon);
|
void do_info_usernet(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ void qemu_add_machine_init_done_notifier(Notifier *notify);
|
||||||
void do_savevm(Monitor *mon, const QDict *qdict);
|
void do_savevm(Monitor *mon, const QDict *qdict);
|
||||||
int load_vmstate(const char *name);
|
int load_vmstate(const char *name);
|
||||||
void do_delvm(Monitor *mon, const QDict *qdict);
|
void do_delvm(Monitor *mon, const QDict *qdict);
|
||||||
void do_info_snapshots(Monitor *mon);
|
void do_info_snapshots(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
void qemu_announce_self(void);
|
void qemu_announce_self(void);
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ extern CharDriverState *parallel_hds[MAX_PARALLEL_PORTS];
|
||||||
|
|
||||||
void do_usb_add(Monitor *mon, const QDict *qdict);
|
void do_usb_add(Monitor *mon, const QDict *qdict);
|
||||||
void do_usb_del(Monitor *mon, const QDict *qdict);
|
void do_usb_del(Monitor *mon, const QDict *qdict);
|
||||||
void usb_info(Monitor *mon);
|
void usb_info(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
void rtc_change_mon_event(struct tm *tm);
|
void rtc_change_mon_event(struct tm *tm);
|
||||||
|
|
||||||
|
|
200
monitor.c
200
monitor.c
|
@ -123,13 +123,17 @@ typedef struct mon_cmd_t {
|
||||||
const char *help;
|
const char *help;
|
||||||
void (*user_print)(Monitor *mon, const QObject *data);
|
void (*user_print)(Monitor *mon, const QObject *data);
|
||||||
union {
|
union {
|
||||||
void (*info)(Monitor *mon);
|
|
||||||
void (*cmd)(Monitor *mon, const QDict *qdict);
|
void (*cmd)(Monitor *mon, const QDict *qdict);
|
||||||
int (*cmd_new)(Monitor *mon, const QDict *params, QObject **ret_data);
|
int (*cmd_new)(Monitor *mon, const QDict *params, QObject **ret_data);
|
||||||
int (*cmd_async)(Monitor *mon, const QDict *params,
|
int (*cmd_async)(Monitor *mon, const QDict *params,
|
||||||
MonitorCompletion *cb, void *opaque);
|
MonitorCompletion *cb, void *opaque);
|
||||||
} mhandler;
|
} mhandler;
|
||||||
int flags;
|
int flags;
|
||||||
|
/* @sub_table is a list of 2nd level of commands. If it do not exist,
|
||||||
|
* mhandler should be used. If it exist, sub_table[?].mhandler should be
|
||||||
|
* used, and mhandler of 1st level plays the role of help function.
|
||||||
|
*/
|
||||||
|
struct mon_cmd_t *sub_table;
|
||||||
} mon_cmd_t;
|
} mon_cmd_t;
|
||||||
|
|
||||||
/* file descriptors passed via SCM_RIGHTS */
|
/* file descriptors passed via SCM_RIGHTS */
|
||||||
|
@ -807,28 +811,8 @@ static void user_async_cmd_handler(Monitor *mon, const mon_cmd_t *cmd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_info(Monitor *mon, const QDict *qdict)
|
static void do_info_help(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
const mon_cmd_t *cmd;
|
|
||||||
const char *item = qdict_get_try_str(qdict, "item");
|
|
||||||
|
|
||||||
if (!item) {
|
|
||||||
goto help;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (cmd = info_cmds; cmd->name != NULL; cmd++) {
|
|
||||||
if (compare_cmd(item, cmd->name))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd->name == NULL) {
|
|
||||||
goto help;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd->mhandler.info(mon);
|
|
||||||
return;
|
|
||||||
|
|
||||||
help:
|
|
||||||
help_cmd(mon, "info");
|
help_cmd(mon, "info");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -899,19 +883,19 @@ int monitor_get_cpu_index(void)
|
||||||
return cpu->cpu_index;
|
return cpu->cpu_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_info_registers(Monitor *mon)
|
static void do_info_registers(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
CPUArchState *env;
|
CPUArchState *env;
|
||||||
env = mon_get_cpu();
|
env = mon_get_cpu();
|
||||||
cpu_dump_state(env, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
|
cpu_dump_state(env, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_info_jit(Monitor *mon)
|
static void do_info_jit(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
dump_exec_info((FILE *)mon, monitor_fprintf);
|
dump_exec_info((FILE *)mon, monitor_fprintf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_info_history(Monitor *mon)
|
static void do_info_history(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const char *str;
|
const char *str;
|
||||||
|
@ -930,7 +914,7 @@ static void do_info_history(Monitor *mon)
|
||||||
|
|
||||||
#if defined(TARGET_PPC)
|
#if defined(TARGET_PPC)
|
||||||
/* XXX: not implemented in other targets */
|
/* XXX: not implemented in other targets */
|
||||||
static void do_info_cpu_stats(Monitor *mon)
|
static void do_info_cpu_stats(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
CPUArchState *env;
|
CPUArchState *env;
|
||||||
|
|
||||||
|
@ -939,7 +923,7 @@ static void do_info_cpu_stats(Monitor *mon)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void do_trace_print_events(Monitor *mon)
|
static void do_trace_print_events(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
trace_print_events((FILE *)mon, &monitor_fprintf);
|
trace_print_events((FILE *)mon, &monitor_fprintf);
|
||||||
}
|
}
|
||||||
|
@ -1491,7 +1475,7 @@ static void tlb_info_64(Monitor *mon, CPUArchState *env)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void tlb_info(Monitor *mon)
|
static void tlb_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
CPUArchState *env;
|
CPUArchState *env;
|
||||||
|
|
||||||
|
@ -1714,7 +1698,7 @@ static void mem_info_64(Monitor *mon, CPUArchState *env)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void mem_info(Monitor *mon)
|
static void mem_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
CPUArchState *env;
|
CPUArchState *env;
|
||||||
|
|
||||||
|
@ -1753,7 +1737,7 @@ static void print_tlb(Monitor *mon, int idx, tlb_t *tlb)
|
||||||
tlb->d, tlb->wt);
|
tlb->d, tlb->wt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tlb_info(Monitor *mon)
|
static void tlb_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
CPUArchState *env = mon_get_cpu();
|
CPUArchState *env = mon_get_cpu();
|
||||||
int i;
|
int i;
|
||||||
|
@ -1769,7 +1753,7 @@ static void tlb_info(Monitor *mon)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(TARGET_SPARC) || defined(TARGET_PPC) || defined(TARGET_XTENSA)
|
#if defined(TARGET_SPARC) || defined(TARGET_PPC) || defined(TARGET_XTENSA)
|
||||||
static void tlb_info(Monitor *mon)
|
static void tlb_info(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
CPUArchState *env1 = mon_get_cpu();
|
CPUArchState *env1 = mon_get_cpu();
|
||||||
|
|
||||||
|
@ -1777,12 +1761,12 @@ static void tlb_info(Monitor *mon)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void do_info_mtree(Monitor *mon)
|
static void do_info_mtree(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
mtree_info((fprintf_function)monitor_printf, mon);
|
mtree_info((fprintf_function)monitor_printf, mon);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_info_numa(Monitor *mon)
|
static void do_info_numa(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
CPUArchState *env;
|
CPUArchState *env;
|
||||||
|
@ -1808,7 +1792,7 @@ static void do_info_numa(Monitor *mon)
|
||||||
int64_t qemu_time;
|
int64_t qemu_time;
|
||||||
int64_t dev_time;
|
int64_t dev_time;
|
||||||
|
|
||||||
static void do_info_profile(Monitor *mon)
|
static void do_info_profile(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
int64_t total;
|
int64_t total;
|
||||||
total = qemu_time;
|
total = qemu_time;
|
||||||
|
@ -1822,7 +1806,7 @@ static void do_info_profile(Monitor *mon)
|
||||||
dev_time = 0;
|
dev_time = 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static void do_info_profile(Monitor *mon)
|
static void do_info_profile(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
monitor_printf(mon, "Internal profiler not compiled\n");
|
monitor_printf(mon, "Internal profiler not compiled\n");
|
||||||
}
|
}
|
||||||
|
@ -1831,7 +1815,7 @@ static void do_info_profile(Monitor *mon)
|
||||||
/* Capture support */
|
/* Capture support */
|
||||||
static QLIST_HEAD (capture_list_head, CaptureState) capture_head;
|
static QLIST_HEAD (capture_list_head, CaptureState) capture_head;
|
||||||
|
|
||||||
static void do_info_capture(Monitor *mon)
|
static void do_info_capture(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
CaptureState *s;
|
CaptureState *s;
|
||||||
|
@ -2429,12 +2413,6 @@ int monitor_handle_fd_param(Monitor *mon, const char *fdname)
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* mon_cmds and info_cmds would be sorted at runtime */
|
|
||||||
static mon_cmd_t mon_cmds[] = {
|
|
||||||
#include "hmp-commands.h"
|
|
||||||
{ NULL, NULL, },
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Please update hmp-commands.hx when adding or changing commands */
|
/* Please update hmp-commands.hx when adding or changing commands */
|
||||||
static mon_cmd_t info_cmds[] = {
|
static mon_cmd_t info_cmds[] = {
|
||||||
{
|
{
|
||||||
|
@ -2442,63 +2420,63 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the version of QEMU",
|
.help = "show the version of QEMU",
|
||||||
.mhandler.info = hmp_info_version,
|
.mhandler.cmd = hmp_info_version,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "network",
|
.name = "network",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the network state",
|
.help = "show the network state",
|
||||||
.mhandler.info = do_info_network,
|
.mhandler.cmd = do_info_network,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "chardev",
|
.name = "chardev",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the character devices",
|
.help = "show the character devices",
|
||||||
.mhandler.info = hmp_info_chardev,
|
.mhandler.cmd = hmp_info_chardev,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "block",
|
.name = "block",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the block devices",
|
.help = "show the block devices",
|
||||||
.mhandler.info = hmp_info_block,
|
.mhandler.cmd = hmp_info_block,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "blockstats",
|
.name = "blockstats",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show block device statistics",
|
.help = "show block device statistics",
|
||||||
.mhandler.info = hmp_info_blockstats,
|
.mhandler.cmd = hmp_info_blockstats,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "block-jobs",
|
.name = "block-jobs",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show progress of ongoing block device operations",
|
.help = "show progress of ongoing block device operations",
|
||||||
.mhandler.info = hmp_info_block_jobs,
|
.mhandler.cmd = hmp_info_block_jobs,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "registers",
|
.name = "registers",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the cpu registers",
|
.help = "show the cpu registers",
|
||||||
.mhandler.info = do_info_registers,
|
.mhandler.cmd = do_info_registers,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "cpus",
|
.name = "cpus",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show infos for each CPU",
|
.help = "show infos for each CPU",
|
||||||
.mhandler.info = hmp_info_cpus,
|
.mhandler.cmd = hmp_info_cpus,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "history",
|
.name = "history",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the command line history",
|
.help = "show the command line history",
|
||||||
.mhandler.info = do_info_history,
|
.mhandler.cmd = do_info_history,
|
||||||
},
|
},
|
||||||
#if defined(TARGET_I386) || defined(TARGET_PPC) || defined(TARGET_MIPS) || \
|
#if defined(TARGET_I386) || defined(TARGET_PPC) || defined(TARGET_MIPS) || \
|
||||||
defined(TARGET_LM32) || (defined(TARGET_SPARC) && !defined(TARGET_SPARC64))
|
defined(TARGET_LM32) || (defined(TARGET_SPARC) && !defined(TARGET_SPARC64))
|
||||||
|
@ -2508,11 +2486,11 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the interrupts statistics (if available)",
|
.help = "show the interrupts statistics (if available)",
|
||||||
#ifdef TARGET_SPARC
|
#ifdef TARGET_SPARC
|
||||||
.mhandler.info = sun4m_irq_info,
|
.mhandler.cmd = sun4m_irq_info,
|
||||||
#elif defined(TARGET_LM32)
|
#elif defined(TARGET_LM32)
|
||||||
.mhandler.info = lm32_irq_info,
|
.mhandler.cmd = lm32_irq_info,
|
||||||
#else
|
#else
|
||||||
.mhandler.info = irq_info,
|
.mhandler.cmd = irq_info,
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -2521,11 +2499,11 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show i8259 (PIC) state",
|
.help = "show i8259 (PIC) state",
|
||||||
#ifdef TARGET_SPARC
|
#ifdef TARGET_SPARC
|
||||||
.mhandler.info = sun4m_pic_info,
|
.mhandler.cmd = sun4m_pic_info,
|
||||||
#elif defined(TARGET_LM32)
|
#elif defined(TARGET_LM32)
|
||||||
.mhandler.info = lm32_do_pic_info,
|
.mhandler.cmd = lm32_do_pic_info,
|
||||||
#else
|
#else
|
||||||
.mhandler.info = pic_info,
|
.mhandler.cmd = pic_info,
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
@ -2534,7 +2512,7 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show PCI info",
|
.help = "show PCI info",
|
||||||
.mhandler.info = hmp_info_pci,
|
.mhandler.cmd = hmp_info_pci,
|
||||||
},
|
},
|
||||||
#if defined(TARGET_I386) || defined(TARGET_SH4) || defined(TARGET_SPARC) || \
|
#if defined(TARGET_I386) || defined(TARGET_SH4) || defined(TARGET_SPARC) || \
|
||||||
defined(TARGET_PPC) || defined(TARGET_XTENSA)
|
defined(TARGET_PPC) || defined(TARGET_XTENSA)
|
||||||
|
@ -2543,7 +2521,7 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show virtual to physical memory mappings",
|
.help = "show virtual to physical memory mappings",
|
||||||
.mhandler.info = tlb_info,
|
.mhandler.cmd = tlb_info,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#if defined(TARGET_I386)
|
#if defined(TARGET_I386)
|
||||||
|
@ -2552,7 +2530,7 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the active virtual memory mappings",
|
.help = "show the active virtual memory mappings",
|
||||||
.mhandler.info = mem_info,
|
.mhandler.cmd = mem_info,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
@ -2560,91 +2538,91 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show memory tree",
|
.help = "show memory tree",
|
||||||
.mhandler.info = do_info_mtree,
|
.mhandler.cmd = do_info_mtree,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "jit",
|
.name = "jit",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show dynamic compiler info",
|
.help = "show dynamic compiler info",
|
||||||
.mhandler.info = do_info_jit,
|
.mhandler.cmd = do_info_jit,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "kvm",
|
.name = "kvm",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show KVM information",
|
.help = "show KVM information",
|
||||||
.mhandler.info = hmp_info_kvm,
|
.mhandler.cmd = hmp_info_kvm,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "numa",
|
.name = "numa",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show NUMA information",
|
.help = "show NUMA information",
|
||||||
.mhandler.info = do_info_numa,
|
.mhandler.cmd = do_info_numa,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "usb",
|
.name = "usb",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show guest USB devices",
|
.help = "show guest USB devices",
|
||||||
.mhandler.info = usb_info,
|
.mhandler.cmd = usb_info,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "usbhost",
|
.name = "usbhost",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show host USB devices",
|
.help = "show host USB devices",
|
||||||
.mhandler.info = usb_host_info,
|
.mhandler.cmd = usb_host_info,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "profile",
|
.name = "profile",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show profiling information",
|
.help = "show profiling information",
|
||||||
.mhandler.info = do_info_profile,
|
.mhandler.cmd = do_info_profile,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "capture",
|
.name = "capture",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show capture information",
|
.help = "show capture information",
|
||||||
.mhandler.info = do_info_capture,
|
.mhandler.cmd = do_info_capture,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "snapshots",
|
.name = "snapshots",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the currently saved VM snapshots",
|
.help = "show the currently saved VM snapshots",
|
||||||
.mhandler.info = do_info_snapshots,
|
.mhandler.cmd = do_info_snapshots,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "status",
|
.name = "status",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the current VM status (running|paused)",
|
.help = "show the current VM status (running|paused)",
|
||||||
.mhandler.info = hmp_info_status,
|
.mhandler.cmd = hmp_info_status,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "pcmcia",
|
.name = "pcmcia",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show guest PCMCIA status",
|
.help = "show guest PCMCIA status",
|
||||||
.mhandler.info = pcmcia_info,
|
.mhandler.cmd = pcmcia_info,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "mice",
|
.name = "mice",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show which guest mouse is receiving events",
|
.help = "show which guest mouse is receiving events",
|
||||||
.mhandler.info = hmp_info_mice,
|
.mhandler.cmd = hmp_info_mice,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "vnc",
|
.name = "vnc",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the vnc server status",
|
.help = "show the vnc server status",
|
||||||
.mhandler.info = hmp_info_vnc,
|
.mhandler.cmd = hmp_info_vnc,
|
||||||
},
|
},
|
||||||
#if defined(CONFIG_SPICE)
|
#if defined(CONFIG_SPICE)
|
||||||
{
|
{
|
||||||
|
@ -2652,7 +2630,7 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the spice server status",
|
.help = "show the spice server status",
|
||||||
.mhandler.info = hmp_info_spice,
|
.mhandler.cmd = hmp_info_spice,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
@ -2660,14 +2638,14 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the current VM name",
|
.help = "show the current VM name",
|
||||||
.mhandler.info = hmp_info_name,
|
.mhandler.cmd = hmp_info_name,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "uuid",
|
.name = "uuid",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show the current VM UUID",
|
.help = "show the current VM UUID",
|
||||||
.mhandler.info = hmp_info_uuid,
|
.mhandler.cmd = hmp_info_uuid,
|
||||||
},
|
},
|
||||||
#if defined(TARGET_PPC)
|
#if defined(TARGET_PPC)
|
||||||
{
|
{
|
||||||
|
@ -2675,7 +2653,7 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show CPU statistics",
|
.help = "show CPU statistics",
|
||||||
.mhandler.info = do_info_cpu_stats,
|
.mhandler.cmd = do_info_cpu_stats,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_SLIRP)
|
#if defined(CONFIG_SLIRP)
|
||||||
|
@ -2684,7 +2662,7 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show user network stack connection states",
|
.help = "show user network stack connection states",
|
||||||
.mhandler.info = do_info_usernet,
|
.mhandler.cmd = do_info_usernet,
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
@ -2692,62 +2670,68 @@ static mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show migration status",
|
.help = "show migration status",
|
||||||
.mhandler.info = hmp_info_migrate,
|
.mhandler.cmd = hmp_info_migrate,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "migrate_capabilities",
|
.name = "migrate_capabilities",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show current migration capabilities",
|
.help = "show current migration capabilities",
|
||||||
.mhandler.info = hmp_info_migrate_capabilities,
|
.mhandler.cmd = hmp_info_migrate_capabilities,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "migrate_cache_size",
|
.name = "migrate_cache_size",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show current migration xbzrle cache size",
|
.help = "show current migration xbzrle cache size",
|
||||||
.mhandler.info = hmp_info_migrate_cache_size,
|
.mhandler.cmd = hmp_info_migrate_cache_size,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "balloon",
|
.name = "balloon",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show balloon information",
|
.help = "show balloon information",
|
||||||
.mhandler.info = hmp_info_balloon,
|
.mhandler.cmd = hmp_info_balloon,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "qtree",
|
.name = "qtree",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show device tree",
|
.help = "show device tree",
|
||||||
.mhandler.info = do_info_qtree,
|
.mhandler.cmd = do_info_qtree,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "qdm",
|
.name = "qdm",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show qdev device model list",
|
.help = "show qdev device model list",
|
||||||
.mhandler.info = do_info_qdm,
|
.mhandler.cmd = do_info_qdm,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "roms",
|
.name = "roms",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show roms",
|
.help = "show roms",
|
||||||
.mhandler.info = do_info_roms,
|
.mhandler.cmd = do_info_roms,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "trace-events",
|
.name = "trace-events",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show available trace-events & their state",
|
.help = "show available trace-events & their state",
|
||||||
.mhandler.info = do_trace_print_events,
|
.mhandler.cmd = do_trace_print_events,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = NULL,
|
.name = NULL,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* mon_cmds and info_cmds would be sorted at runtime */
|
||||||
|
static mon_cmd_t mon_cmds[] = {
|
||||||
|
#include "hmp-commands.h"
|
||||||
|
{ NULL, NULL, },
|
||||||
|
};
|
||||||
|
|
||||||
static const mon_cmd_t qmp_cmds[] = {
|
static const mon_cmd_t qmp_cmds[] = {
|
||||||
#include "qmp-commands-old.h"
|
#include "qmp-commands-old.h"
|
||||||
{ /* NULL */ },
|
{ /* NULL */ },
|
||||||
|
@ -3542,18 +3526,27 @@ static const mon_cmd_t *search_dispatch_table(const mon_cmd_t *disp_table,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const mon_cmd_t *monitor_find_command(const char *cmdname)
|
|
||||||
{
|
|
||||||
return search_dispatch_table(mon_cmds, cmdname);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const mon_cmd_t *qmp_find_cmd(const char *cmdname)
|
static const mon_cmd_t *qmp_find_cmd(const char *cmdname)
|
||||||
{
|
{
|
||||||
return search_dispatch_table(qmp_cmds, cmdname);
|
return search_dispatch_table(qmp_cmds, cmdname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parse @cmdline according to command table @table.
|
||||||
|
* If @cmdline is blank, return NULL.
|
||||||
|
* If it can't be parsed, report to @mon, and return NULL.
|
||||||
|
* Else, insert command arguments into @qdict, and return the command.
|
||||||
|
* If sub-command table exist, and if @cmdline contains addtional string for
|
||||||
|
* sub-command, this function will try search sub-command table. if no
|
||||||
|
* addtional string for sub-command exist, this function will return the found
|
||||||
|
* one in @table.
|
||||||
|
* Do not assume the returned command points into @table! It doesn't
|
||||||
|
* when the command is a sub-command.
|
||||||
|
*/
|
||||||
static const mon_cmd_t *monitor_parse_command(Monitor *mon,
|
static const mon_cmd_t *monitor_parse_command(Monitor *mon,
|
||||||
const char *cmdline,
|
const char *cmdline,
|
||||||
|
int start,
|
||||||
|
mon_cmd_t *table,
|
||||||
QDict *qdict)
|
QDict *qdict)
|
||||||
{
|
{
|
||||||
const char *p, *typestr;
|
const char *p, *typestr;
|
||||||
|
@ -3564,20 +3557,35 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
|
||||||
char *key;
|
char *key;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
monitor_printf(mon, "command='%s'\n", cmdline);
|
monitor_printf(mon, "command='%s', start='%d'\n", cmdline, start);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* extract the command name */
|
/* extract the command name */
|
||||||
p = get_command_name(cmdline, cmdname, sizeof(cmdname));
|
p = get_command_name(cmdline + start, cmdname, sizeof(cmdname));
|
||||||
if (!p)
|
if (!p)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
cmd = monitor_find_command(cmdname);
|
cmd = search_dispatch_table(table, cmdname);
|
||||||
if (!cmd) {
|
if (!cmd) {
|
||||||
monitor_printf(mon, "unknown command: '%s'\n", cmdname);
|
monitor_printf(mon, "unknown command: '%.*s'\n",
|
||||||
|
(int)(p - cmdline), cmdline);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* filter out following useless space */
|
||||||
|
while (qemu_isspace(*p)) {
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
/* search sub command */
|
||||||
|
if (cmd->sub_table != NULL) {
|
||||||
|
/* check if user set additional command */
|
||||||
|
if (*p == '\0') {
|
||||||
|
return cmd;
|
||||||
|
}
|
||||||
|
return monitor_parse_command(mon, cmdline, p - cmdline,
|
||||||
|
cmd->sub_table, qdict);
|
||||||
|
}
|
||||||
|
|
||||||
/* parse the parameters */
|
/* parse the parameters */
|
||||||
typestr = cmd->args_type;
|
typestr = cmd->args_type;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
|
@ -3933,7 +3941,7 @@ static void handle_user_command(Monitor *mon, const char *cmdline)
|
||||||
|
|
||||||
qdict = qdict_new();
|
qdict = qdict_new();
|
||||||
|
|
||||||
cmd = monitor_parse_command(mon, cmdline, qdict);
|
cmd = monitor_parse_command(mon, cmdline, 0, mon_cmds, qdict);
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
|
|
@ -852,7 +852,7 @@ void print_net_client(Monitor *mon, NetClientState *nc)
|
||||||
NetClientOptionsKind_lookup[nc->info->type], nc->info_str);
|
NetClientOptionsKind_lookup[nc->info->type], nc->info_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_info_network(Monitor *mon)
|
void do_info_network(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
NetClientState *nc, *peer;
|
NetClientState *nc, *peer;
|
||||||
NetClientOptionsKind type;
|
NetClientOptionsKind type;
|
||||||
|
|
|
@ -670,7 +670,7 @@ static int slirp_guestfwd(SlirpState *s, const char *config_str,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_info_usernet(Monitor *mon)
|
void do_info_usernet(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
SlirpState *s;
|
SlirpState *s;
|
||||||
|
|
||||||
|
|
2
savevm.c
2
savevm.c
|
@ -2307,7 +2307,7 @@ void do_delvm(Monitor *mon, const QDict *qdict)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_info_snapshots(Monitor *mon)
|
void do_info_snapshots(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
BlockDriverState *bs, *bs1;
|
BlockDriverState *bs, *bs1;
|
||||||
QEMUSnapshotInfo *sn_tab, *sn, s, *sn_info = &s;
|
QEMUSnapshotInfo *sn_tab, *sn, s, *sn_info = &s;
|
||||||
|
|
Loading…
Reference in a new issue