qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v5 00/46] post-introspection cleanups, and qapi-ify


From: Eric Blake
Subject: [Qemu-devel] [PATCH v5 00/46] post-introspection cleanups, and qapi-ify netdev_add
Date: Mon, 21 Sep 2015 15:57:16 -0600

No longer RFC, but depends on Markus' pull-qapi-2015-09-21 tag
(https://lists.gnu.org/archive/html/qemu-devel/2015-09/msg05257.html)
which had not been merged as of this email.

Also available at this location (although I may rebase it):
git fetch git://repo.or.cz/qemu/ericb.git qapi
http://repo.or.cz/qemu/ericb.git/shortlog/refs/heads/qapi

v1 was here:
https://lists.gnu.org/archive/html/qemu-devel/2015-07/msg05266.html
https://lists.gnu.org/archive/html/qemu-devel/2015-07/msg05325.html

In v2:
https://lists.gnu.org/archive/html/qemu-devel/2015-08/msg00900.html
rebase to Markus' v3 series
rework how comments are emitted for fields inherited from base
additional patches added for deleting colliding 'void *data'
documentation updates to match code changes

In v3:
https://lists.gnu.org/archive/html/qemu-devel/2015-08/msg02059.html
redo cleanup of dealloc of partial struct
add patches to make all visit_type_*() avoid leaks on failure
add patches to allow boxed command arguments and events

In v4:
https://lists.gnu.org/archive/html/qemu-devel/2015-09/msg02580.html
add some more clean up patches
rebase to Markus' recent work
pull in part of Zoltán's work to make netdev_add a flat union,
further enhancing it to be introspectible

I might be able to rearrange some of these patches, or separate
it into smaller independent series, if requested; but I'm
posting now to get review started.

In v5:
I _did_ rearrange patches to try and group related features:

1-2: Groundwork cleanups
3-5: Add more test cases
6-16: Front-end cleanups
17-18: Introspection output cleanups
19-20: 'alternate' type cleanups
21-29: qapi visitor cleanups
30-45: qapi-ify netdev_add
46: add qapi shorthand for flat unions

Lots of fixes based on additional testing, and rebased to
track other changes that happened in the meantime.  The series
is huge; I can split off smaller portions as requested.

Although v1-v4 didn't get much review, here's a backport-diff
to v4 in case it proves useful.

Key:
[----] : patches are identical
[####] : number of functional differences between upstream/downstream patch
[down] : patch is downstream-only
The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively

001/46:[down] 'qapi: Sort qapi-schema tests'
002/46:[0006] [FC] 'qapi: Clean up qapi.py per pep8'
003/46:[down] 'qapi: Test for C member name collisions'
004/46:[0006] [FC] 'qapi: Add tests for empty unions'
005/46:[0018] [FC] 'qapi: Test use of 'number' within alternates'
006/46:[down] 'qapi: Improve 'include' error message'
007/46:[----] [-C] 'qapi: Don't pass pre-existing error to later call'
008/46:[down] 'qapi: Reuse code for flat union base validation'
009/46:[0126] [FC] 'qapi: Use consistent generated code patterns'
010/46:[down] 'qapi: Merge generation of per-member visits'
011/46:[down] 'qapi: Don't use info as witness of implicit object type'
012/46:[down] 'qapi: Track location that created an implicit type'
013/46:[down] 'qapi: Track owner of each object member'
014/46:[down] 'qapi: Detect collisions in C member names'
015/46:[down] 'qapi: Defer duplicate member checks to schema check()'
016/46:[down] 'qapi: Detect base class loops'
017/46:[----] [--] 'qapi: Provide nicer array names in introspection'
018/46:[down] 'qapi-introspect: Guarantee particular sorting'
019/46:[0053] [FC] 'qapi: Simplify visiting of alternate types'
020/46:[0005] [FC] 'qapi: Fix alternates that accept 'number' but not 'int''
021/46:[down] 'qmp: Fix reference-counting of qnull on empty output visit'
022/46:[down] 'qapi: Don't abuse stack to track qmp-output root'
023/46:[0007] [FC] 'qapi: Remove dead visitor code'
024/46:[0024] [FC] 'qapi: Document visitor interfaces'
025/46:[----] [--] 'qapi: Plug leaks in test-qmp-input-visitor'
026/46:[----] [-C] 'qapi: Test failure in middle of array parse'
027/46:[down] 'qapi: Simplify visits of optional fields'
028/46:[0023] [FC] 'qapi: Rework deallocation of partial struct'
029/46:[0016] [FC] 'qapi: Change visit_type_FOO() to no longer return partial 
objects'
030/46:[----] [--] 'net: use Netdev instead of NetClientOptions in client init'
031/46:[0018] [FC] 'qapi: use 'type' in generated C code to match QMP union 
wire form'
032/46:[0008] [FC] 'qapi: Hide tag_name data member of variants'
033/46:[----] [--] 'vnc: hoist allocation of VncBasicInfo to callers'
034/46:[0022] [FC] 'qapi: Unbox base members'
035/46:[0024] [FC] 'qapi-visit: Remove redundant functions for flat union base'
036/46:[----] [--] 'qapi: Avoid use of 'data' member of qapi unions'
037/46:[0002] [FC] 'qapi: Forbid empty unions and useless alternates'
038/46:[0012] [FC] 'qapi: Drop useless 'data' member of unions'
039/46:[0083] [FC] 'qapi: Plumb in 'box' to qapi generator lower levels'
040/46:[0010] [FC] 'qapi: Implement boxed structs for commands/events'
041/46:[0008] [FC] 'qapi: Support boxed unions'
042/46:[down] 'qapi: support implicit structs in OptsVisitor'
043/46:[----] [-C] 'qapi: Change Netdev into a flat union'
044/46:[----] [--] 'net: Use correct type for bool flag'
045/46:[----] [--] 'net: Complete qapi-fication of netdev_add'
046/46:[down] 'qapi: Allow anonymous base for flat union'

Eric Blake (43):
  qapi: Sort qapi-schema tests
  qapi: Clean up qapi.py per pep8
  qapi: Test for C member name collisions
  qapi: Add tests for empty unions
  qapi: Test use of 'number' within alternates
  qapi: Improve 'include' error message
  qapi: Don't pass pre-existing error to later call
  qapi: Reuse code for flat union base validation
  qapi: Use consistent generated code patterns
  qapi: Merge generation of per-member visits
  qapi: Don't use info as witness of implicit object type
  qapi: Track location that created an implicit type
  qapi: Track owner of each object member
  qapi: Detect collisions in C member names
  qapi: Defer duplicate member checks to schema check()
  qapi: Detect base class loops
  qapi: Provide nicer array names in introspection
  qapi-introspect: Guarantee particular sorting
  qapi: Simplify visiting of alternate types
  qapi: Fix alternates that accept 'number' but not 'int'
  qmp: Fix reference-counting of qnull on empty output visit
  qapi: Don't abuse stack to track qmp-output root
  qapi: Remove dead visitor code
  qapi: Document visitor interfaces
  qapi: Plug leaks in test-qmp-input-visitor
  qapi: Test failure in middle of array parse
  qapi: Simplify visits of optional fields
  qapi: Rework deallocation of partial struct
  qapi: Change visit_type_FOO() to no longer return partial objects
  qapi: use 'type' in generated C code to match QMP union wire form
  qapi: Hide tag_name data member of variants
  vnc: hoist allocation of VncBasicInfo to callers
  qapi: Unbox base members
  qapi-visit: Remove redundant functions for flat union base
  qapi: Avoid use of 'data' member of qapi unions
  qapi: Forbid empty unions and useless alternates
  qapi: Drop useless 'data' member of unions
  qapi: Plumb in 'box' to qapi generator lower levels
  qapi: Implement boxed structs for commands/events
  qapi: Support boxed unions
  net: Use correct type for bool flag
  net: Complete qapi-fication of netdev_add
  qapi: Allow anonymous base for flat union

Kővágó, Zoltán (3):
  net: use Netdev instead of NetClientOptions in client init
  qapi: support implicit structs in OptsVisitor
  qapi: Change Netdev into a flat union

 block/qcow2.c                                      |   2 +-
 block/vmdk.c                                       |   2 +-
 blockdev.c                                         |  34 +-
 docs/qapi-code-gen.txt                             |  98 ++--
 hmp.c                                              |  18 +-
 hw/arm/musicpal.c                                  |   2 +-
 hw/core/qdev-properties-system.c                   |   2 +-
 hw/input/hid.c                                     |   2 +-
 hw/input/ps2.c                                     |   2 +-
 hw/input/virtio-input-hid.c                        |   2 +-
 hw/mem/pc-dimm.c                                   |   2 +-
 hw/net/allwinner_emac.c                            |   2 +-
 hw/net/cadence_gem.c                               |   2 +-
 hw/net/dp8393x.c                                   |   2 +-
 hw/net/e1000.c                                     |   2 +-
 hw/net/eepro100.c                                  |   2 +-
 hw/net/etraxfs_eth.c                               |   2 +-
 hw/net/fsl_etsec/etsec.c                           |   2 +-
 hw/net/imx_fec.c                                   |   2 +-
 hw/net/lan9118.c                                   |   2 +-
 hw/net/lance.c                                     |   2 +-
 hw/net/mcf_fec.c                                   |   2 +-
 hw/net/milkymist-minimac2.c                        |   2 +-
 hw/net/mipsnet.c                                   |   2 +-
 hw/net/ne2000-isa.c                                |   2 +-
 hw/net/ne2000.c                                    |   2 +-
 hw/net/opencores_eth.c                             |   2 +-
 hw/net/pcnet-pci.c                                 |   2 +-
 hw/net/rocker/rocker_fp.c                          |   2 +-
 hw/net/rtl8139.c                                   |   2 +-
 hw/net/smc91c111.c                                 |   2 +-
 hw/net/spapr_llan.c                                |   2 +-
 hw/net/stellaris_enet.c                            |   2 +-
 hw/net/vhost_net.c                                 |  18 +-
 hw/net/virtio-net.c                                |   6 +-
 hw/net/vmxnet3.c                                   |   2 +-
 hw/net/xen_nic.c                                   |   2 +-
 hw/net/xgmac.c                                     |   2 +-
 hw/net/xilinx_axienet.c                            |   2 +-
 hw/net/xilinx_ethlite.c                            |   2 +-
 hw/usb/dev-network.c                               |   4 +-
 include/net/net.h                                  |   7 +-
 include/qapi/visitor-impl.h                        |  60 ++-
 include/qapi/visitor.h                             | 225 ++++++++-
 monitor.c                                          |  14 +-
 net/clients.h                                      |  20 +-
 net/dump.c                                         |   8 +-
 net/hub.c                                          |  24 +-
 net/l2tpv3.c                                       |   8 +-
 net/net.c                                          | 180 +++----
 net/netmap.c                                       |   6 +-
 net/slirp.c                                        |   8 +-
 net/socket.c                                       |  10 +-
 net/tap-win32.c                                    |   8 +-
 net/tap.c                                          |  28 +-
 net/vde.c                                          |   8 +-
 net/vhost-user.c                                   |  14 +-
 numa.c                                             |   4 +-
 qapi-schema.json                                   |  72 ++-
 qapi/introspect.json                               |  22 +-
 qapi/opts-visitor.c                                |  17 +-
 qapi/qapi-dealloc-visitor.c                        |  26 -
 qapi/qapi-visit-core.c                             | 164 +++----
 qapi/qmp-input-visitor.c                           |  11 +-
 qapi/qmp-output-visitor.c                          |  70 +--
 qapi/string-input-visitor.c                        |   3 +-
 qemu-char.c                                        |  24 +-
 qmp-commands.hx                                    |   2 +-
 scripts/qapi-commands.py                           | 123 +++--
 scripts/qapi-event.py                              |  92 ++--
 scripts/qapi-introspect.py                         |  21 +-
 scripts/qapi-types.py                              |  86 +---
 scripts/qapi-visit.py                              | 223 +++++----
 scripts/qapi.py                                    | 528 ++++++++++++++-------
 tests/Makefile                                     | 170 +++++--
 tests/qapi-schema/alternate-empty.err              |   1 +
 ...at-union-bad-base.exit => alternate-empty.exit} |   0
 tests/qapi-schema/alternate-empty.json             |   2 +
 ...flat-union-bad-base.out => alternate-empty.out} |   0
 tests/qapi-schema/alternate-good.out               |   1 -
 tests/qapi-schema/alternate-nested.json            |   2 +-
 tests/qapi-schema/alternate-unknown.json           |   2 +-
 tests/qapi-schema/args-bad-box.err                 |   1 +
 tests/qapi-schema/args-bad-box.exit                |   1 +
 tests/qapi-schema/args-bad-box.json                |   2 +
 tests/qapi-schema/args-bad-box.out                 |   0
 tests/qapi-schema/args-box-anon.err                |   1 +
 tests/qapi-schema/args-box-anon.exit               |   1 +
 tests/qapi-schema/args-box-anon.json               |   2 +
 tests/qapi-schema/args-box-anon.out                |   0
 tests/qapi-schema/args-box-empty.err               |   1 +
 tests/qapi-schema/args-box-empty.exit              |   1 +
 tests/qapi-schema/args-box-empty.json              |   2 +
 tests/qapi-schema/args-box-empty.out               |   0
 tests/qapi-schema/args-member-array.out            |   2 +-
 tests/qapi-schema/args-name-clash.err              |   1 +
 tests/qapi-schema/args-name-clash.exit             |   1 +
 tests/qapi-schema/args-name-clash.json             |   2 +
 tests/qapi-schema/args-name-clash.out              |   0
 tests/qapi-schema/args-union.err                   |   2 +-
 tests/qapi-schema/args-union.json                  |   3 +-
 tests/qapi-schema/base-cycle.err                   |   1 +
 tests/qapi-schema/base-cycle.exit                  |   1 +
 tests/qapi-schema/base-cycle.json                  |   3 +
 tests/qapi-schema/base-cycle.out                   |   0
 tests/qapi-schema/event-case.out                   |   1 +
 tests/qapi-schema/flat-union-bad-base.err          |   1 -
 tests/qapi-schema/flat-union-bad-base.json         |  13 -
 tests/qapi-schema/flat-union-base-any.err          |   2 +-
 tests/qapi-schema/flat-union-base-union.err        |   2 +-
 tests/qapi-schema/flat-union-branch-clash.err      |   2 +-
 tests/qapi-schema/flat-union-branch-clash.json     |   2 +-
 tests/qapi-schema/flat-union-branch-clash2.err     |   1 +
 tests/qapi-schema/flat-union-branch-clash2.exit    |   1 +
 tests/qapi-schema/flat-union-branch-clash2.json    |  14 +
 tests/qapi-schema/flat-union-branch-clash2.out     |   0
 tests/qapi-schema/flat-union-cycle.err             |   1 +
 tests/qapi-schema/flat-union-cycle.exit            |   1 +
 tests/qapi-schema/flat-union-cycle.json            |   6 +
 tests/qapi-schema/flat-union-cycle.out             |   0
 tests/qapi-schema/flat-union-empty.err             |   1 +
 tests/qapi-schema/flat-union-empty.exit            |   1 +
 tests/qapi-schema/flat-union-empty.json            |   4 +
 tests/qapi-schema/flat-union-empty.out             |   0
 tests/qapi-schema/flat-union-inline.err            |   2 +-
 tests/qapi-schema/flat-union-inline.json           |   4 +-
 tests/qapi-schema/flat-union-no-base.err           |   2 +-
 tests/qapi-schema/ident-with-escape.out            |   2 +-
 tests/qapi-schema/include-non-file.err             |   2 +-
 tests/qapi-schema/include-non-file.json            |   2 +-
 tests/qapi-schema/indented-expr.out                |   4 +-
 tests/qapi-schema/qapi-schema-test.json            |  25 +-
 tests/qapi-schema/qapi-schema-test.out             |  59 ++-
 tests/qapi-schema/returns-int.out                  |   2 +-
 tests/qapi-schema/struct-base-clash-deep.err       |   2 +-
 tests/qapi-schema/struct-base-clash.err            |   2 +-
 tests/qapi-schema/test-qapi.py                     |  14 +-
 tests/qapi-schema/union-clash.err                  |   1 +
 tests/qapi-schema/union-clash.exit                 |   1 +
 tests/qapi-schema/union-clash.json                 |   3 +
 tests/qapi-schema/union-clash.out                  |   0
 tests/qapi-schema/union-empty.err                  |   1 +
 tests/qapi-schema/union-empty.exit                 |   1 +
 tests/qapi-schema/union-empty.json                 |   2 +
 tests/qapi-schema/union-empty.out                  |   0
 tests/qapi-schema/union-invalid-base.err           |   2 +-
 tests/test-qmp-commands.c                          |  40 +-
 tests/test-qmp-event.c                             |   8 +-
 tests/test-qmp-input-visitor.c                     | 198 +++++++-
 tests/test-qmp-output-visitor.c                    |  41 +-
 tests/test-visitor-serialization.c                 |  14 +-
 tpm.c                                              |   2 +-
 ui/input-keymap.c                                  |  10 +-
 ui/input-legacy.c                                  |   2 +-
 ui/input.c                                         |  24 +-
 ui/spice-core.c                                    |  23 +-
 ui/vnc.c                                           |  64 +--
 util/qemu-sockets.c                                |  12 +-
 158 files changed, 1945 insertions(+), 1249 deletions(-)
 create mode 100644 tests/qapi-schema/alternate-empty.err
 rename tests/qapi-schema/{flat-union-bad-base.exit => alternate-empty.exit} 
(100%)
 create mode 100644 tests/qapi-schema/alternate-empty.json
 rename tests/qapi-schema/{flat-union-bad-base.out => alternate-empty.out} 
(100%)
 create mode 100644 tests/qapi-schema/args-bad-box.err
 create mode 100644 tests/qapi-schema/args-bad-box.exit
 create mode 100644 tests/qapi-schema/args-bad-box.json
 create mode 100644 tests/qapi-schema/args-bad-box.out
 create mode 100644 tests/qapi-schema/args-box-anon.err
 create mode 100644 tests/qapi-schema/args-box-anon.exit
 create mode 100644 tests/qapi-schema/args-box-anon.json
 create mode 100644 tests/qapi-schema/args-box-anon.out
 create mode 100644 tests/qapi-schema/args-box-empty.err
 create mode 100644 tests/qapi-schema/args-box-empty.exit
 create mode 100644 tests/qapi-schema/args-box-empty.json
 create mode 100644 tests/qapi-schema/args-box-empty.out
 create mode 100644 tests/qapi-schema/args-name-clash.err
 create mode 100644 tests/qapi-schema/args-name-clash.exit
 create mode 100644 tests/qapi-schema/args-name-clash.json
 create mode 100644 tests/qapi-schema/args-name-clash.out
 create mode 100644 tests/qapi-schema/base-cycle.err
 create mode 100644 tests/qapi-schema/base-cycle.exit
 create mode 100644 tests/qapi-schema/base-cycle.json
 create mode 100644 tests/qapi-schema/base-cycle.out
 delete mode 100644 tests/qapi-schema/flat-union-bad-base.err
 delete mode 100644 tests/qapi-schema/flat-union-bad-base.json
 create mode 100644 tests/qapi-schema/flat-union-branch-clash2.err
 create mode 100644 tests/qapi-schema/flat-union-branch-clash2.exit
 create mode 100644 tests/qapi-schema/flat-union-branch-clash2.json
 create mode 100644 tests/qapi-schema/flat-union-branch-clash2.out
 create mode 100644 tests/qapi-schema/flat-union-cycle.err
 create mode 100644 tests/qapi-schema/flat-union-cycle.exit
 create mode 100644 tests/qapi-schema/flat-union-cycle.json
 create mode 100644 tests/qapi-schema/flat-union-cycle.out
 create mode 100644 tests/qapi-schema/flat-union-empty.err
 create mode 100644 tests/qapi-schema/flat-union-empty.exit
 create mode 100644 tests/qapi-schema/flat-union-empty.json
 create mode 100644 tests/qapi-schema/flat-union-empty.out
 create mode 100644 tests/qapi-schema/union-clash.err
 create mode 100644 tests/qapi-schema/union-clash.exit
 create mode 100644 tests/qapi-schema/union-clash.json
 create mode 100644 tests/qapi-schema/union-clash.out
 create mode 100644 tests/qapi-schema/union-empty.err
 create mode 100644 tests/qapi-schema/union-empty.exit
 create mode 100644 tests/qapi-schema/union-empty.json
 create mode 100644 tests/qapi-schema/union-empty.out

-- 
2.4.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]