monitor: union for info handlers
This commit adds a union to mon_cmd_t for info handlers and converts do_info() and info_cmds[] array to use it. This improves type safety. Next commit will convert command handlers. Patchworks-ID: 35336 Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									d7f9b68971
								
							
						
					
					
						commit
						910df89d87
					
				
							
								
								
									
										77
									
								
								monitor.c
								
								
								
								
							
							
						
						
									
										77
									
								
								monitor.c
								
								
								
								
							| 
						 | 
				
			
			@ -74,6 +74,9 @@ typedef struct mon_cmd_t {
 | 
			
		|||
    void *handler;
 | 
			
		||||
    const char *params;
 | 
			
		||||
    const char *help;
 | 
			
		||||
    union {
 | 
			
		||||
        void (*info)(Monitor *mon);
 | 
			
		||||
    } mhandler;
 | 
			
		||||
} mon_cmd_t;
 | 
			
		||||
 | 
			
		||||
/* file descriptors passed via SCM_RIGHTS */
 | 
			
		||||
| 
						 | 
				
			
			@ -283,7 +286,6 @@ static void do_info(Monitor *mon, const QDict *qdict)
 | 
			
		|||
{
 | 
			
		||||
    const mon_cmd_t *cmd;
 | 
			
		||||
    const char *item = qdict_get_try_str(qdict, "item");
 | 
			
		||||
    void (*handler)(Monitor *);
 | 
			
		||||
 | 
			
		||||
    if (!item)
 | 
			
		||||
        goto help;
 | 
			
		||||
| 
						 | 
				
			
			@ -295,8 +297,7 @@ static void do_info(Monitor *mon, const QDict *qdict)
 | 
			
		|||
    help_cmd(mon, "info");
 | 
			
		||||
    return;
 | 
			
		||||
 found:
 | 
			
		||||
    handler = cmd->handler;
 | 
			
		||||
    handler(mon);
 | 
			
		||||
    cmd->mhandler.info(mon);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void do_info_version(Monitor *mon)
 | 
			
		||||
| 
						 | 
				
			
			@ -1816,255 +1817,255 @@ static const mon_cmd_t info_cmds[] = {
 | 
			
		|||
    {
 | 
			
		||||
        .name       = "version",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_version,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the version of QEMU",
 | 
			
		||||
        .mhandler.info = do_info_version,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "network",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_network,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the network state",
 | 
			
		||||
        .mhandler.info = do_info_network,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "chardev",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = qemu_chr_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the character devices",
 | 
			
		||||
        .mhandler.info = qemu_chr_info,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "block",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = bdrv_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the block devices",
 | 
			
		||||
        .mhandler.info = bdrv_info,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "blockstats",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = bdrv_info_stats,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show block device statistics",
 | 
			
		||||
        .mhandler.info = bdrv_info_stats,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "registers",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_registers,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the cpu registers",
 | 
			
		||||
        .mhandler.info = do_info_registers,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "cpus",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_cpus,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show infos for each CPU",
 | 
			
		||||
        .mhandler.info = do_info_cpus,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "history",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_history,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the command line history",
 | 
			
		||||
        .mhandler.info = do_info_history,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "irq",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = irq_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the interrupts statistics (if available)",
 | 
			
		||||
        .mhandler.info = irq_info,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "pic",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = pic_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show i8259 (PIC) state",
 | 
			
		||||
        .mhandler.info = pic_info,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "pci",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = pci_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show PCI info",
 | 
			
		||||
        .mhandler.info = pci_info,
 | 
			
		||||
    },
 | 
			
		||||
#if defined(TARGET_I386) || defined(TARGET_SH4)
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "tlb",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = tlb_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show virtual to physical memory mappings",
 | 
			
		||||
        .mhandler.info = tlb_info,
 | 
			
		||||
    },
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(TARGET_I386)
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "mem",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = mem_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the active virtual memory mappings",
 | 
			
		||||
        .mhandler.info = mem_info,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "hpet",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_hpet,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show state of HPET",
 | 
			
		||||
        .mhandler.info = do_info_hpet,
 | 
			
		||||
    },
 | 
			
		||||
#endif
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "jit",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_jit,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show dynamic compiler info",
 | 
			
		||||
        .mhandler.info = do_info_jit,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "kvm",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_kvm,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show KVM information",
 | 
			
		||||
        .mhandler.info = do_info_kvm,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "numa",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_numa,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show NUMA information",
 | 
			
		||||
        .mhandler.info = do_info_numa,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "usb",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = usb_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show guest USB devices",
 | 
			
		||||
        .mhandler.info = usb_info,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "usbhost",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = usb_host_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show host USB devices",
 | 
			
		||||
        .mhandler.info = usb_host_info,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "profile",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_profile,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show profiling information",
 | 
			
		||||
        .mhandler.info = do_info_profile,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "capture",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_capture,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show capture information",
 | 
			
		||||
        .mhandler.info = do_info_capture,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "snapshots",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_snapshots,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the currently saved VM snapshots",
 | 
			
		||||
        .mhandler.info = do_info_snapshots,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "status",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_status,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the current VM status (running|paused)",
 | 
			
		||||
        .mhandler.info = do_info_status,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "pcmcia",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = pcmcia_info,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show guest PCMCIA status",
 | 
			
		||||
        .mhandler.info = pcmcia_info,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "mice",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_mice,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show which guest mouse is receiving events",
 | 
			
		||||
        .mhandler.info = do_info_mice,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "vnc",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_vnc,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the vnc server status",
 | 
			
		||||
        .mhandler.info = do_info_vnc,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "name",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_name,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the current VM name",
 | 
			
		||||
        .mhandler.info = do_info_name,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "uuid",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_uuid,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show the current VM UUID",
 | 
			
		||||
        .mhandler.info = do_info_uuid,
 | 
			
		||||
    },
 | 
			
		||||
#if defined(TARGET_PPC)
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "cpustats",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_cpu_stats,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show CPU statistics",
 | 
			
		||||
        .mhandler.info = do_info_cpu_stats,
 | 
			
		||||
    },
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(CONFIG_SLIRP)
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "usernet",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_usernet,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show user network stack connection states",
 | 
			
		||||
        .mhandler.info = do_info_usernet,
 | 
			
		||||
    },
 | 
			
		||||
#endif
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "migrate",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_migrate,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show migration status",
 | 
			
		||||
        .mhandler.info = do_info_migrate,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "balloon",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_balloon,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show balloon information",
 | 
			
		||||
        .mhandler.info = do_info_balloon,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "qtree",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_qtree,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show device tree",
 | 
			
		||||
        .mhandler.info = do_info_qtree,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "qdm",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_qdm,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show qdev device model list",
 | 
			
		||||
        .mhandler.info = do_info_qdm,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = "roms",
 | 
			
		||||
        .args_type  = "",
 | 
			
		||||
        .handler    = do_info_roms,
 | 
			
		||||
        .params     = "",
 | 
			
		||||
        .help       = "show roms",
 | 
			
		||||
        .mhandler.info = do_info_roms,
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .name       = NULL,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue