On Fri, 16 Feb 2018 13:37:12 +0100 Igor Mammedov <imamm...@redhat.com> wrote:
Eric, Adding you to CC list (git send-mail somehow haven't noticed you in cover letter). Could you please look at QAPI/QMP parts of this series. > v1->v3: > * introduce PRECONFIG runstate with -preconfig option. > it's cleaner to manage transitions and do checks > than reusing existing PRELAUNCH state. > * extend QAPI schema commands with 'runstates' keyword, > so that it would be possible to specify in command definition > when it is valid to execute. > (python changes a bit hackery, since I have little to > no idea how it should work) > * add preconfig QMP and set-numa-node tests > * make mutually exclusive -preconfig and -incoming options, > for simplicity sake. Shouldn't be problem as target can > be starter with pure CLI, since mapping on source is > already known. > * Drop HMP part and leave only QMP in preconfig state. > > > Series allows to configure NUMA mapping at runtime using QMP > interface. For that to happen it introduces a new '-preconfig' CLI option > which allows to pause QEMU before machine_init() is run and > adds new set-numa-node QMP command which in conjunction with > query-hotpluggable-cpus allows to configure NUMA mapping for cpus. > > Later we can modify other commands to run early, for example device_add. > I recall SPAPR had problem when libvirt started QEMU with -S and, while it's > paused, added CPUs with device_add. Intent was to coldplug CPUs (but at that > stage it's considered hotplug already), so SPAPR had to work around the issue. > > Example of configuration session: > $QEMU -smp 2 -preconfig ... > > QMP: > # get CPUs layout for current target/machine/CLI > -> {'execute': 'query-hotpluggable-cpus' } > <- {'return': [ > {'props': {'core-id': 0, 'thread-id': 0, 'socket-id': 1}, ... }, > {'props': {'core-id': 0, 'thread-id': 0, 'socket-id': 0}, ... } > ]} > > # configure 1st node > -> {'execute': 'set-numa-node', 'arguments': { 'type': 'node', 'nodeid': 0 } > } > <- {'return': {}} > -> {'execute': 'set-numa-node', 'arguments': { 'type': 'cpu', > 'node-id': 0, 'core-id': 0, 'thread-id': 0, 'socket-id': 1, } > } > <- {'return': {}} > > # configure 2nd node > -> {'execute': 'set-numa-node', 'arguments': { 'type': 'node', 'nodeid': 1 } } > -> {'execute': 'set-numa-node', 'arguments': { 'type': 'cpu', > 'node-id': 1, 'core-id': 0, 'thread-id': 0, 'socket-id': 0 } > } > <- {'return': {}} > > # [optional] verify configuration > -> {'execute': 'query-hotpluggable-cpus' } > <- {'return': [ > {'props': {'core-id': 0, 'thread-id': 0, 'node-id': 0, 'socket-id': > 1}, ... }, > {'props': {'core-id': 0, 'thread-id': 0, 'node-id': 1, 'socket-id': > 0}, ... } > ]} > > > Git tree: > https://github.com/imammedo/qemu.git qmp_preconfig_v3 > > Ref to v1: > https://lists.gnu.org/archive/html/qemu-devel/2017-10/msg03583.html > Message-Id: <1508170976-96869-1-git-send-email-imamm...@redhat.com> > > CC: ebl...@redhat.com > CC: arm...@redhat.com > CC: ehabk...@redhat.com > CC: pkre...@redhat.com > CC: da...@gibson.dropbear.id.au > CC: peter.mayd...@linaro.org > CC: pbonz...@redhat.com > CC: coh...@redhat.com > > > Igor Mammedov (9): > numa: postpone options post-processing till machine_run_board_init() > numa: split out NumaOptions parsing into parse_NumaOptions() > CLI: add -preconfig option > HMP: disable monitor in preconfig state > QAPI: allow to specify valid runstates per command > tests: extend qmp test with pereconfig checks > QMP: permit query-hotpluggable-cpus in preconfig state > QMP: add set-numa-node command > tests: functional tests for QMP command set-numa-node > > include/qapi/qmp/dispatch.h | 5 ++- > include/sysemu/numa.h | 2 + > include/sysemu/sysemu.h | 1 + > hw/core/machine.c | 5 ++- > monitor.c | 32 +++++++++++++-- > numa.c | 66 +++++++++++++++++++----------- > qapi-schema.json | 32 +++++++++++++-- > qapi/qmp-dispatch.c | 39 ++++++++++++++++++ > qapi/qmp-registry.c | 4 +- > qapi/run-state.json | 9 ++++- > qemu-options.hx | 11 +++++ > qmp.c | 5 +++ > scripts/qapi-commands.py | 46 ++++++++++++++++----- > scripts/qapi-introspect.py | 2 +- > scripts/qapi.py | 15 ++++--- > scripts/qapi2texi.py | 2 +- > tests/numa-test.c | 71 > +++++++++++++++++++++++++++++++++ > tests/qapi-schema/doc-good.out | 4 +- > tests/qapi-schema/ident-with-escape.out | 2 +- > tests/qapi-schema/indented-expr.out | 4 +- > tests/qapi-schema/qapi-schema-test.out | 18 ++++----- > tests/qapi-schema/test-qapi.py | 6 +-- > tests/qmp-test.c | 56 ++++++++++++++++++++++++++ > vl.c | 35 +++++++++++++++- > 24 files changed, 401 insertions(+), 71 deletions(-) >