Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/dgilbert/tags/pull-hmp-20180621…
Browse files Browse the repository at this point in the history
…' into staging

HMP pull 2018-06-21

Minor fixes and reenable preconfig

# gpg: Signature made Thu 21 Jun 2018 17:43:09 BST
# gpg:                using RSA key 0516331EBC5BFDE7
# gpg: Good signature from "Dr. David Alan Gilbert (RH2) <dgilbert@redhat.com>"
# Primary key fingerprint: 45F5 C71B 4A0C B7FB 977A  9FA9 0516 331E BC5B FDE7

* remotes/dgilbert/tags/pull-hmp-20180621:
  hmp: Allow HMP in preconfig state again
  hmp: add exit_preconfig
  hmp: Add commands for preconfig
  qmp: Enable a few commands in preconfig state
  hmp: Restrict auto-complete in preconfig
  hmp: Allow help on preconfig commands
  hmp: Add flag for preconfig commands
  hmp-commands: use long for begin and length in dump-guest-memory
  monitor: report entirety of hmp command on error

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
pm215 committed Jun 22, 2018
2 parents de44c04 + 13163a9 commit c74b91a
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 23 deletions.
10 changes: 10 additions & 0 deletions hmp-commands-info.hx
Expand Up @@ -19,6 +19,7 @@ ETEXI
.params = "",
.help = "show the version of QEMU",
.cmd = hmp_info_version,
.flags = "p",
},

STEXI
Expand Down Expand Up @@ -47,6 +48,7 @@ ETEXI
.params = "",
.help = "show the character devices",
.cmd = hmp_info_chardev,
.flags = "p",
},

STEXI
Expand Down Expand Up @@ -165,6 +167,7 @@ ETEXI
.params = "",
.help = "show the command line history",
.cmd = hmp_info_history,
.flags = "p",
},

STEXI
Expand Down Expand Up @@ -399,6 +402,7 @@ ETEXI
.params = "",
.help = "show the current VM status (running|paused)",
.cmd = hmp_info_status,
.flags = "p",
},

STEXI
Expand Down Expand Up @@ -457,6 +461,7 @@ ETEXI
.params = "",
.help = "show the current VM name",
.cmd = hmp_info_name,
.flags = "p",
},

STEXI
Expand All @@ -471,6 +476,7 @@ ETEXI
.params = "",
.help = "show the current VM UUID",
.cmd = hmp_info_uuid,
.flags = "p",
},

STEXI
Expand Down Expand Up @@ -613,6 +619,7 @@ ETEXI
.params = "[path]",
.help = "show QOM composition tree",
.cmd = hmp_info_qom_tree,
.flags = "p",
},

STEXI
Expand Down Expand Up @@ -671,6 +678,7 @@ ETEXI
.params = "",
.help = "show memory backends",
.cmd = hmp_info_memdev,
.flags = "p",
},

STEXI
Expand Down Expand Up @@ -699,6 +707,7 @@ ETEXI
.params = "",
.help = "show iothreads",
.cmd = hmp_info_iothreads,
.flags = "p",
},

STEXI
Expand Down Expand Up @@ -829,6 +838,7 @@ ETEXI
.params = "",
.help = "Show information about hotpluggable CPUs",
.cmd = hmp_hotpluggable_cpus,
.flags = "p",
},

STEXI
Expand Down
25 changes: 24 additions & 1 deletion hmp-commands.hx
Expand Up @@ -15,6 +15,7 @@ ETEXI
.params = "[cmd]",
.help = "show the help",
.cmd = do_help_cmd,
.flags = "p",
},

STEXI
Expand Down Expand Up @@ -54,6 +55,25 @@ STEXI
@item q or quit
@findex quit
Quit the emulator.
ETEXI

{
.name = "exit_preconfig",
.args_type = "",
.params = "",
.help = "exit the preconfig state",
.cmd = hmp_exit_preconfig,
.flags = "p",
},

STEXI
@item exit_preconfig
@findex exit_preconfig
This command makes QEMU exit the preconfig state and proceed with
VM initialization using configuration data provided on the command line
and via the QMP monitor during the preconfig state. The command is only
available during the preconfig state (i.e. when the --preconfig command
line option was in use).
ETEXI

{
Expand Down Expand Up @@ -1116,7 +1136,7 @@ ETEXI

{
.name = "dump-guest-memory",
.args_type = "paging:-p,detach:-d,zlib:-z,lzo:-l,snappy:-s,filename:F,begin:i?,length:i?",
.args_type = "paging:-p,detach:-d,zlib:-z,lzo:-l,snappy:-s,filename:F,begin:l?,length:l?",
.params = "[-p] [-d] [-z|-l|-s] filename [begin length]",
.help = "dump guest memory into file 'filename'.\n\t\t\t"
"-p: do paging to get guest's memory mapping.\n\t\t\t"
Expand Down Expand Up @@ -1827,6 +1847,7 @@ ETEXI
.params = "path",
.help = "list QOM properties",
.cmd = hmp_qom_list,
.flags = "p",
},

STEXI
Expand All @@ -1840,6 +1861,7 @@ ETEXI
.params = "path property value",
.help = "set QOM property",
.cmd = hmp_qom_set,
.flags = "p",
},

STEXI
Expand All @@ -1854,6 +1876,7 @@ ETEXI
.help = "show various information about the system state",
.cmd = hmp_info_help,
.sub_table = info_cmds,
.flags = "p",
},

STEXI
Expand Down
8 changes: 8 additions & 0 deletions hmp.c
Expand Up @@ -1068,6 +1068,14 @@ void hmp_system_powerdown(Monitor *mon, const QDict *qdict)
qmp_system_powerdown(NULL);
}

void hmp_exit_preconfig(Monitor *mon, const QDict *qdict)
{
Error *err = NULL;

qmp_exit_preconfig(&err);
hmp_handle_error(mon, &err);
}

void hmp_cpu(Monitor *mon, const QDict *qdict)
{
int64_t cpu_index;
Expand Down
1 change: 1 addition & 0 deletions hmp.h
Expand Up @@ -44,6 +44,7 @@ void hmp_quit(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_powerdown(Monitor *mon, const QDict *qdict);
void hmp_exit_preconfig(Monitor *mon, const QDict *qdict);
void hmp_cpu(Monitor *mon, const QDict *qdict);
void hmp_memsave(Monitor *mon, const QDict *qdict);
void hmp_pmemsave(Monitor *mon, const QDict *qdict);
Expand Down
51 changes: 40 additions & 11 deletions monitor.c
Expand Up @@ -128,6 +128,7 @@ typedef struct mon_cmd_t {
const char *args_type;
const char *params;
const char *help;
const char *flags; /* p=preconfig */
void (*cmd)(Monitor *mon, const QDict *qdict);
/* @sub_table is a list of 2nd level of commands. If it does not exist,
* cmd should be used. If it exists, sub_table[?].cmd should be
Expand Down Expand Up @@ -958,13 +959,30 @@ static int parse_cmdline(const char *cmdline,
return -1;
}

/*
* Returns true if the command can be executed in preconfig mode
* i.e. it has the 'p' flag.
*/
static bool cmd_can_preconfig(const mon_cmd_t *cmd)
{
if (!cmd->flags) {
return false;
}

return strchr(cmd->flags, 'p');
}

static void help_cmd_dump_one(Monitor *mon,
const mon_cmd_t *cmd,
char **prefix_args,
int prefix_args_nb)
{
int i;

if (runstate_check(RUN_STATE_PRECONFIG) && !cmd_can_preconfig(cmd)) {
return;
}

for (i = 0; i < prefix_args_nb; i++) {
monitor_printf(mon, "%s ", prefix_args[i]);
}
Expand All @@ -987,7 +1005,9 @@ static void help_cmd_dump(Monitor *mon, const mon_cmd_t *cmds,

/* Find one entry to dump */
for (cmd = cmds; cmd->name != NULL; cmd++) {
if (compare_cmd(args[arg_index], cmd->name)) {
if (compare_cmd(args[arg_index], cmd->name) &&
((!runstate_check(RUN_STATE_PRECONFIG) ||
cmd_can_preconfig(cmd)))) {
if (cmd->sub_table) {
/* continue with next arg */
help_cmd_dump(mon, cmd->sub_table,
Expand Down Expand Up @@ -3041,6 +3061,12 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
(int)(p - cmdp_start), cmdp_start);
return NULL;
}
if (runstate_check(RUN_STATE_PRECONFIG) && !cmd_can_preconfig(cmd)) {
monitor_printf(mon, "Command '%.*s' not available with -preconfig "
"until after exit_preconfig.\n",
(int)(p - cmdp_start), cmdp_start);
return NULL;
}

/* filter out following useless space */
while (qemu_isspace(*p)) {
Expand Down Expand Up @@ -3431,24 +3457,22 @@ static void handle_hmp_command(Monitor *mon, const char *cmdline)
{
QDict *qdict;
const mon_cmd_t *cmd;
const char *cmd_start = cmdline;

trace_handle_hmp_command(mon, cmdline);

if (runstate_check(RUN_STATE_PRECONFIG)) {
monitor_printf(mon, "HMP not available in preconfig state, "
"use QMP instead\n");
return;
}

cmd = monitor_parse_command(mon, cmdline, &cmdline, mon->cmd_table);
if (!cmd) {
return;
}

qdict = monitor_parse_arguments(mon, &cmdline, cmd);
if (!qdict) {
monitor_printf(mon, "Try \"help %s\" for more information\n",
cmd->name);
while (cmdline > cmd_start && qemu_isspace(cmdline[-1])) {
cmdline--;
}
monitor_printf(mon, "Try \"help %.*s\" for more information\n",
(int)(cmdline - cmd_start), cmd_start);
return;
}

Expand Down Expand Up @@ -3990,12 +4014,17 @@ static void monitor_find_completion_by_table(Monitor *mon,
cmdname = args[0];
readline_set_completion_index(mon->rs, strlen(cmdname));
for (cmd = cmd_table; cmd->name != NULL; cmd++) {
cmd_completion(mon, cmdname, cmd->name);
if (!runstate_check(RUN_STATE_PRECONFIG) ||
cmd_can_preconfig(cmd)) {
cmd_completion(mon, cmdname, cmd->name);
}
}
} else {
/* find the command */
for (cmd = cmd_table; cmd->name != NULL; cmd++) {
if (compare_cmd(args[0], cmd->name)) {
if (compare_cmd(args[0], cmd->name) &&
(!runstate_check(RUN_STATE_PRECONFIG) ||
cmd_can_preconfig(cmd))) {
break;
}
}
Expand Down
3 changes: 2 additions & 1 deletion qapi/char.json
Expand Up @@ -62,7 +62,8 @@
# }
#
##
{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
{ 'command': 'query-chardev', 'returns': ['ChardevInfo'],
'allow-preconfig': true }

##
# @ChardevBackendInfo:
Expand Down
27 changes: 17 additions & 10 deletions qapi/misc.json
Expand Up @@ -117,7 +117,8 @@
# }
#
##
{ 'command': 'query-version', 'returns': 'VersionInfo' }
{ 'command': 'query-version', 'returns': 'VersionInfo',
'allow-preconfig': true }

##
# @CommandInfo:
Expand Down Expand Up @@ -241,7 +242,7 @@
# <- { "return": { "name": "qemu-name" } }
#
##
{ 'command': 'query-name', 'returns': 'NameInfo' }
{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true }

##
# @KvmInfo:
Expand Down Expand Up @@ -301,7 +302,7 @@
# <- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } }
#
##
{ 'command': 'query-uuid', 'returns': 'UuidInfo' }
{ 'command': 'query-uuid', 'returns': 'UuidInfo', 'allow-preconfig': true }

##
# @EventInfo:
Expand Down Expand Up @@ -710,7 +711,8 @@
# }
#
##
{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'] }
{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'],
'allow-preconfig': true }

##
# @BalloonInfo:
Expand Down Expand Up @@ -1408,7 +1410,8 @@
##
{ 'command': 'qom-list',
'data': { 'path': 'str' },
'returns': [ 'ObjectPropertyInfo' ] }
'returns': [ 'ObjectPropertyInfo' ],
'allow-preconfig': true }

##
# @qom-get:
Expand Down Expand Up @@ -1444,7 +1447,8 @@
##
{ 'command': 'qom-get',
'data': { 'path': 'str', 'property': 'str' },
'returns': 'any' }
'returns': 'any',
'allow-preconfig': true }

##
# @qom-set:
Expand All @@ -1461,7 +1465,8 @@
# Since: 1.2
##
{ 'command': 'qom-set',
'data': { 'path': 'str', 'property': 'str', 'value': 'any' } }
'data': { 'path': 'str', 'property': 'str', 'value': 'any' },
'allow-preconfig': true }

##
# @change:
Expand Down Expand Up @@ -1543,7 +1548,8 @@
##
{ 'command': 'qom-list-types',
'data': { '*implements': 'str', '*abstract': 'bool' },
'returns': [ 'ObjectTypeInfo' ] }
'returns': [ 'ObjectTypeInfo' ],
'allow-preconfig': true }

##
# @device-list-properties:
Expand Down Expand Up @@ -1581,7 +1587,8 @@
##
{ 'command': 'qom-list-properties',
'data': { 'typename': 'str'},
'returns': [ 'ObjectPropertyInfo' ] }
'returns': [ 'ObjectPropertyInfo' ],
'allow-preconfig': true }

##
# @xen-set-global-dirty-log:
Expand Down Expand Up @@ -2902,7 +2909,7 @@
# }
#
##
{ 'command': 'query-memdev', 'returns': ['Memdev'] }
{ 'command': 'query-memdev', 'returns': ['Memdev'], 'allow-preconfig': true }

##
# @PCDIMMDeviceInfo:
Expand Down

0 comments on commit c74b91a

Please sign in to comment.