* [Qemu-devel] [PATCH v4 1/7] hmp: Add flag for preconfig commands
2018-06-12 9:19 [Qemu-devel] [PATCH v4 0/7] Reenable hmp for preconfig mode Dr. David Alan Gilbert (git)
@ 2018-06-12 9:19 ` Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 2/7] hmp: Allow help on " Dr. David Alan Gilbert (git)
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2018-06-12 9:19 UTC (permalink / raw)
To: qemu-devel, armbru, imammedo
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Add a flag to command definitions to allow them to be used in preconfig
and check it.
If users try to use commands that aren't available, tell them to use
the exit_preconfig comand we're adding in a few patches.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
---
monitor.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/monitor.c b/monitor.c
index 6d0cec552e..2d7bfb8a2c 100644
--- a/monitor.c
+++ b/monitor.c
@@ -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
@@ -936,6 +937,19 @@ 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,
@@ -2976,6 +2990,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)) {
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH v4 2/7] hmp: Allow help on preconfig commands
2018-06-12 9:19 [Qemu-devel] [PATCH v4 0/7] Reenable hmp for preconfig mode Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 1/7] hmp: Add flag for preconfig commands Dr. David Alan Gilbert (git)
@ 2018-06-12 9:19 ` Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 3/7] hmp: Restrict auto-complete in preconfig Dr. David Alan Gilbert (git)
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2018-06-12 9:19 UTC (permalink / raw)
To: qemu-devel, armbru, imammedo
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Allow the 'help' command in preconfig state but
make it only list the preconfig commands.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
hmp-commands.hx | 1 +
monitor.c | 8 +++++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 0734fea931..8bf590ae4b 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -15,6 +15,7 @@ ETEXI
.params = "[cmd]",
.help = "show the help",
.cmd = do_help_cmd,
+ .flags = "p",
},
STEXI
diff --git a/monitor.c b/monitor.c
index 2d7bfb8a2c..8ff0e2fcc7 100644
--- a/monitor.c
+++ b/monitor.c
@@ -957,6 +957,10 @@ static void help_cmd_dump_one(Monitor *mon,
{
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]);
}
@@ -979,7 +983,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,
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH v4 3/7] hmp: Restrict auto-complete in preconfig
2018-06-12 9:19 [Qemu-devel] [PATCH v4 0/7] Reenable hmp for preconfig mode Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 1/7] hmp: Add flag for preconfig commands Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 2/7] hmp: Allow help on " Dr. David Alan Gilbert (git)
@ 2018-06-12 9:19 ` Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 4/7] qmp: Enable a few commands in preconfig state Dr. David Alan Gilbert (git)
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2018-06-12 9:19 UTC (permalink / raw)
To: qemu-devel, armbru, imammedo
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Don't show the commands that aren't available.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
monitor.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/monitor.c b/monitor.c
index 8ff0e2fcc7..9ea23828ef 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3951,12 +3951,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;
}
}
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH v4 4/7] qmp: Enable a few commands in preconfig state
2018-06-12 9:19 [Qemu-devel] [PATCH v4 0/7] Reenable hmp for preconfig mode Dr. David Alan Gilbert (git)
` (2 preceding siblings ...)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 3/7] hmp: Restrict auto-complete in preconfig Dr. David Alan Gilbert (git)
@ 2018-06-12 9:19 ` Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 5/7] hmp: Add commands for preconfig Dr. David Alan Gilbert (git)
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2018-06-12 9:19 UTC (permalink / raw)
To: qemu-devel, armbru, imammedo
From: Igor Mammedov <imammedo@redhat.com>
Commands query-chardev, query-version, query-name, query-uuid,
query-iothreads, query-memdev are informational and do not depend on
the machine being initialized. Make them available in preconfig
runstate to make the latter a little bit more useful.
The generic qom commands don't depend on the machine being initialized
either; so enabled qom-list, qom-get, qom-set, qom-list-types,
qom-list-properties.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
qapi/char.json | 3 ++-
qapi/misc.json | 27 +++++++++++++++++----------
2 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/qapi/char.json b/qapi/char.json
index ae19dcd1ed..60f31d83fc 100644
--- a/qapi/char.json
+++ b/qapi/char.json
@@ -62,7 +62,8 @@
# }
#
##
-{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
+{ 'command': 'query-chardev', 'returns': ['ChardevInfo'],
+ 'allow-preconfig': true }
##
# @ChardevBackendInfo:
diff --git a/qapi/misc.json b/qapi/misc.json
index f83a63a0ab..fa86831ec3 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -117,7 +117,8 @@
# }
#
##
-{ 'command': 'query-version', 'returns': 'VersionInfo' }
+{ 'command': 'query-version', 'returns': 'VersionInfo',
+ 'allow-preconfig': true }
##
# @CommandInfo:
@@ -241,7 +242,7 @@
# <- { "return": { "name": "qemu-name" } }
#
##
-{ 'command': 'query-name', 'returns': 'NameInfo' }
+{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true }
##
# @KvmInfo:
@@ -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:
@@ -710,7 +711,8 @@
# }
#
##
-{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'] }
+{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'],
+ 'allow-preconfig': true }
##
# @BalloonInfo:
@@ -1408,7 +1410,8 @@
##
{ 'command': 'qom-list',
'data': { 'path': 'str' },
- 'returns': [ 'ObjectPropertyInfo' ] }
+ 'returns': [ 'ObjectPropertyInfo' ],
+ 'allow-preconfig': true }
##
# @qom-get:
@@ -1444,7 +1447,8 @@
##
{ 'command': 'qom-get',
'data': { 'path': 'str', 'property': 'str' },
- 'returns': 'any' }
+ 'returns': 'any',
+ 'allow-preconfig': true }
##
# @qom-set:
@@ -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:
@@ -1543,7 +1548,8 @@
##
{ 'command': 'qom-list-types',
'data': { '*implements': 'str', '*abstract': 'bool' },
- 'returns': [ 'ObjectTypeInfo' ] }
+ 'returns': [ 'ObjectTypeInfo' ],
+ 'allow-preconfig': true }
##
# @device-list-properties:
@@ -1581,7 +1587,8 @@
##
{ 'command': 'qom-list-properties',
'data': { 'typename': 'str'},
- 'returns': [ 'ObjectPropertyInfo' ] }
+ 'returns': [ 'ObjectPropertyInfo' ],
+ 'allow-preconfig': true }
##
# @xen-set-global-dirty-log:
@@ -2902,7 +2909,7 @@
# }
#
##
-{ 'command': 'query-memdev', 'returns': ['Memdev'] }
+{ 'command': 'query-memdev', 'returns': ['Memdev'], 'allow-preconfig': true }
##
# @PCDIMMDeviceInfo:
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH v4 5/7] hmp: Add commands for preconfig
2018-06-12 9:19 [Qemu-devel] [PATCH v4 0/7] Reenable hmp for preconfig mode Dr. David Alan Gilbert (git)
` (3 preceding siblings ...)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 4/7] qmp: Enable a few commands in preconfig state Dr. David Alan Gilbert (git)
@ 2018-06-12 9:19 ` Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 6/7] hmp: add exit_preconfig Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 7/7] hmp: Allow HMP in preconfig state again Dr. David Alan Gilbert (git)
6 siblings, 0 replies; 8+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2018-06-12 9:19 UTC (permalink / raw)
To: qemu-devel, armbru, imammedo
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Allow a bunch of the info commands to be used in preconfig.
version, chardev, name, uuid,memdev, iothreads
Were enabled in QMP in the previous patch from Igor
status, hotpluggable_cpus
Was enabled in the original allow-preconfig series
history
is HMP specific
usbhost, qom-tree, numa
Don't have a QMP equivalent
Also enable the qom commands qom-list and qom-set.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
hmp-commands-info.hx | 12 ++++++++++++
hmp-commands.hx | 3 +++
2 files changed, 15 insertions(+)
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index ddfcd5adcc..f4d0d7d2d0 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -19,6 +19,7 @@ ETEXI
.params = "",
.help = "show the version of QEMU",
.cmd = hmp_info_version,
+ .flags = "p",
},
STEXI
@@ -47,6 +48,7 @@ ETEXI
.params = "",
.help = "show the character devices",
.cmd = hmp_info_chardev,
+ .flags = "p",
},
STEXI
@@ -165,6 +167,7 @@ ETEXI
.params = "",
.help = "show the command line history",
.cmd = hmp_info_history,
+ .flags = "p",
},
STEXI
@@ -315,6 +318,7 @@ ETEXI
.params = "",
.help = "show NUMA information",
.cmd = hmp_info_numa,
+ .flags = "p",
},
STEXI
@@ -343,6 +347,7 @@ ETEXI
.params = "",
.help = "show host USB devices",
.cmd = hmp_info_usbhost,
+ .flags = "p",
},
STEXI
@@ -399,6 +404,7 @@ ETEXI
.params = "",
.help = "show the current VM status (running|paused)",
.cmd = hmp_info_status,
+ .flags = "p",
},
STEXI
@@ -457,6 +463,7 @@ ETEXI
.params = "",
.help = "show the current VM name",
.cmd = hmp_info_name,
+ .flags = "p",
},
STEXI
@@ -471,6 +478,7 @@ ETEXI
.params = "",
.help = "show the current VM UUID",
.cmd = hmp_info_uuid,
+ .flags = "p",
},
STEXI
@@ -613,6 +621,7 @@ ETEXI
.params = "[path]",
.help = "show QOM composition tree",
.cmd = hmp_info_qom_tree,
+ .flags = "p",
},
STEXI
@@ -671,6 +680,7 @@ ETEXI
.params = "",
.help = "show memory backends",
.cmd = hmp_info_memdev,
+ .flags = "p",
},
STEXI
@@ -699,6 +709,7 @@ ETEXI
.params = "",
.help = "show iothreads",
.cmd = hmp_info_iothreads,
+ .flags = "p",
},
STEXI
@@ -829,6 +840,7 @@ ETEXI
.params = "",
.help = "Show information about hotpluggable CPUs",
.cmd = hmp_hotpluggable_cpus,
+ .flags = "p",
},
STEXI
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 8bf590ae4b..bd87569229 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -1829,6 +1829,7 @@ ETEXI
.params = "path",
.help = "list QOM properties",
.cmd = hmp_qom_list,
+ .flags = "p",
},
STEXI
@@ -1842,6 +1843,7 @@ ETEXI
.params = "path property value",
.help = "set QOM property",
.cmd = hmp_qom_set,
+ .flags = "p",
},
STEXI
@@ -1856,6 +1858,7 @@ ETEXI
.help = "show various information about the system state",
.cmd = hmp_info_help,
.sub_table = info_cmds,
+ .flags = "p",
},
STEXI
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH v4 6/7] hmp: add exit_preconfig
2018-06-12 9:19 [Qemu-devel] [PATCH v4 0/7] Reenable hmp for preconfig mode Dr. David Alan Gilbert (git)
` (4 preceding siblings ...)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 5/7] hmp: Add commands for preconfig Dr. David Alan Gilbert (git)
@ 2018-06-12 9:19 ` Dr. David Alan Gilbert (git)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 7/7] hmp: Allow HMP in preconfig state again Dr. David Alan Gilbert (git)
6 siblings, 0 replies; 8+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2018-06-12 9:19 UTC (permalink / raw)
To: qemu-devel, armbru, imammedo
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Add the exit_preconfig command to return to normality.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
hmp-commands.hx | 19 +++++++++++++++++++
hmp.c | 8 ++++++++
hmp.h | 1 +
3 files changed, 28 insertions(+)
diff --git a/hmp-commands.hx b/hmp-commands.hx
index bd87569229..a06d0bc5f1 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -55,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
{
diff --git a/hmp.c b/hmp.c
index ef93f4878b..983e3be1a1 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1065,6 +1065,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;
diff --git a/hmp.h b/hmp.h
index 20f27439d3..33354f1bdd 100644
--- a/hmp.h
+++ b/hmp.h
@@ -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);
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH v4 7/7] hmp: Allow HMP in preconfig state again
2018-06-12 9:19 [Qemu-devel] [PATCH v4 0/7] Reenable hmp for preconfig mode Dr. David Alan Gilbert (git)
` (5 preceding siblings ...)
2018-06-12 9:19 ` [Qemu-devel] [PATCH v4 6/7] hmp: add exit_preconfig Dr. David Alan Gilbert (git)
@ 2018-06-12 9:19 ` Dr. David Alan Gilbert (git)
6 siblings, 0 replies; 8+ messages in thread
From: Dr. David Alan Gilbert (git) @ 2018-06-12 9:19 UTC (permalink / raw)
To: qemu-devel, armbru, imammedo
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Now we can cope with preconfig in HMP, reenable by reverting
commit 71dc578e116599ea73c8a2a4e693134702ec0e83.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
monitor.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/monitor.c b/monitor.c
index 9ea23828ef..66fc5fe3b3 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3395,12 +3395,6 @@ static void handle_hmp_command(Monitor *mon, const char *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;
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread