On 02/16/2018 06:37 AM, Igor Mammedov wrote:
Command is allowed to run only in preconfig stage and
will allow to configure numa mapping for CPUs depending
on possible CPUs layout (query-hotpluggable-cpus) for
given machine instance.
Signed-off-by: Igor Mammedov <imamm...@redhat.com>
---
numa.c | 5 +++++
qapi-schema.json | 14 ++++++++++++++
tests/qmp-test.c | 6 ++++++
3 files changed, 25 insertions(+)
+++ b/qapi-schema.json
@@ -3201,3 +3201,17 @@
# Since: 2.11
##
{ 'command': 'watchdog-set-action', 'data' : {'action': 'WatchdogAction'} }
+
+##
+# @set-numa-node:
+#
+# Runtime equivalent of '-numa' CLI option, available at
+# preconfigure stage to configure numa mapping before initializing
+# machine.
+#
+# Since 2.12
+##
+{ 'command': 'set-numa-node', 'boxed': true,
+ 'data': 'NumaOptions',
+ 'runstates': [ 'preconfig' ]
+}
Oh, so you ARE trying to do fine-grained control of which commands are
valid in which states. Still, would that be easier through a
three-state enum (or pair of bools) instead of making every client
enumerate an array of 'all states', 'all but preconfig', and 'preconfig
only'?
Also, while preconfig is special (not every command can be made to run
during preconfig, so having the state rejection logic centralized makes
some sense), there are a lot fewer commands that are preconfig-only -
could those commands (just set-numa-node at the moment) be made to
perform state checks themselves rather than relying on centralized
logic, and then you still only need a single bool in the QAPI schema
(safe for preconfig, unsafe for preconfig in central logic; unsafe in
other states in a per-command code).
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org