qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: aliguori@linux.vnet.ibm.com, Jes.Sorensen@redhat.com,
	agl@linux.vnet.ibm.com, mdroth@linux.vnet.ibm.com,
	lcapitulino@redhat.com
Subject: [Qemu-devel] [QAPI+QGA 2/3] QAPI code generation infrastructure v3
Date: Mon, 13 Jun 2011 21:31:05 -0500	[thread overview]
Message-ID: <1308018686-8235-1-git-send-email-mdroth@linux.vnet.ibm.com> (raw)

This is Set 2/3 of the QAPI+QGA patchsets.

These patches apply on top of master (set1 merged), and can also be obtained
from:
git://repo.or.cz/qemu/mdroth.git qapi-backport-set2-v3

(Set1+2 are a backport of some of the QAPI-related work from Anthony's
glib tree. The main goal is to get the basic code generation infrastructure in
place so that it can be used by the guest agent to implement a QMP-like guest
interface, and so that future work regarding the QMP conversion to QAPI can be
decoupled from the infrastructure bits. Set3 is the Qemu Guest Agent
(virtagent), rebased on the new code QAPI code generation infrastructure. This
is the first user of QAPI, QMP will follow.)
___

This patchset introduces the following:

 - Hard dependency on GLib. This has been floating around the list for a while.
   Currently the only users are the unit tests for this patchset and the guest
   agent. We can make both of these a configure option, but based on previous
   discussions a hard dependency will likely be introduced with subsequent
   QAPI patches.

 - A couple additional qlist utility functions used by QAPI.

 - QAPI schema-based code generation for synchronous QMP/QGA commands
   and types, and Visitor/dispatch infrastructure to handle
   marshaling/unmarshaling/dispatch between QAPI and the QMP/QGA wire protocols.

 - Documentation and unit tests for visitor functions and synchronous
   command/type generation.

CHANGES SINCE V2:
 - Added cleanup functions for input/output visitor types and fixed a leak in
   dispatch path.
 - Corrected spelling from visiter->visitor and updated filenames accordingly.
 - Re-organized patches so that each new C file can be built as part of the
   introducting commit (for instances where there were no users of the
   qapi-obj-y target yet a test build was done by adding the target as a
   superficial dependency on other tools), and moved code generator patches
   after the required dependencies.
 - Made qlist_first/qlist_next accept/return const types.
 - Moved Visitor interface inline wrapper functions to real ones.
 - Fixed error-reporting for invalid parameters when parameter name is null.
 - Removed hard-coded size for QAPI-type allocations done by the input visitor,
   using generated code to pass in a sizeof() now.
 - Replaced assert()'s on visitor stack overruns, replaced with an error
   indication.
 - Fixed build issue when using a separate build directory.
 - Added missing copyright headers for scripts, moved external code in
   ordereddict.py to a seperate patch.
 - Many thanks to Luiz, Anthony, and everyone else for the excellent
   review/testing.

CHANGES SINCE V1:
 - Fixed build issue that was missed due to deprecated files being present in
   source tree. Thanks to Matsuda Daiki for sending fixes.
 - Fixed grammatical errors in documentation pointed out by Luiz.
 - Added generated code to the make clean target.

CHANGES SINCE V0 ("QAPI Infrastructure Round 1"):
 - Fixed known memory leaks in generated code
 - Stricter error-handling in generated code
 - Removed currently unused code (generators for events and async/proxied
   QMP/QGA commands and definition used by the not-yet-introduced QMP server
   replacement)
 - Added documentation for code generation scripts/schemas/usage
 - Addressed review comments from Luiz and Stefan

 Makefile                    |   24 +++-
 Makefile.objs               |    9 +
 Makefile.target             |    1 +
 configure                   |   14 ++
 docs/qapi-code-gen.txt      |  316 ++++++++++++++++++++++++++++++++++++++
 module.h                    |    2 +
 qapi-schema-test.json       |   22 +++
 qapi/qapi-dealloc-visitor.c |  127 +++++++++++++++
 qapi/qapi-dealloc-visitor.h |   26 +++
 qapi/qapi-types-core.h      |   21 +++
 qapi/qapi-visit-core.c      |  101 ++++++++++++
 qapi/qapi-visit-core.h      |   68 ++++++++
 qapi/qmp-core.h             |   41 +++++
 qapi/qmp-dispatch.c         |   76 +++++++++
 qapi/qmp-input-visitor.c    |  251 ++++++++++++++++++++++++++++++
 qapi/qmp-input-visitor.h    |   27 ++++
 qapi/qmp-output-visitor.c   |  199 ++++++++++++++++++++++++
 qapi/qmp-output-visitor.h   |   28 ++++
 qapi/qmp-registry.c         |   26 +++
 qerror.h                    |    3 +
 qlist.h                     |   11 ++
 scripts/ordereddict.py      |  128 ++++++++++++++++
 scripts/qapi-commands.py    |  355 +++++++++++++++++++++++++++++++++++++++++++
 scripts/qapi-types.py       |  230 ++++++++++++++++++++++++++++
 scripts/qapi-visit.py       |  235 ++++++++++++++++++++++++++++
 scripts/qapi.py             |  203 ++++++++++++++++++++++++
 test-qmp-commands.c         |  113 ++++++++++++++
 test-visitor.c              |  305 +++++++++++++++++++++++++++++++++++++
 28 files changed, 2961 insertions(+), 1 deletions(-)

             reply	other threads:[~2011-06-14  2:32 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-14  2:31 Michael Roth [this message]
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 01/21] Add hard build dependency on glib Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 02/21] qlist: add qlist_first()/qlist_next() Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 03/21] qapi: add module init types for qapi Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 04/21] qapi: add QAPI visitor core Michael Roth
2011-06-15 14:33   ` Luiz Capitulino
2011-06-15 14:54     ` Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 05/21] qapi: add QMP input visitor Michael Roth
2011-06-15 16:11   ` Luiz Capitulino
2011-06-15 16:56     ` Michael Roth
2011-06-15 17:02       ` Luiz Capitulino
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 06/21] qapi: add QMP output visitor Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 07/21] qapi: add QAPI dealloc visitor Michael Roth
2011-06-15 18:25   ` Luiz Capitulino
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 08/21] qapi: add QMP command registration/lookup functions Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 09/21] qapi: add QMP dispatch functions Michael Roth
2011-06-15 19:33   ` Luiz Capitulino
2011-06-15 19:45     ` Anthony Liguori
2011-06-15 20:12       ` Luiz Capitulino
2011-06-15 20:45         ` Michael Roth
2011-06-15 20:48           ` Luiz Capitulino
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 10/21] qapi: add ordereddict.py helper library Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 11/21] qapi: add qapi.py helper libraries Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 12/21] qapi: add qapi-types.py code generator Michael Roth
2011-06-15 19:11   ` Luiz Capitulino
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 13/21] qapi: add qapi-visit.py " Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 14/21] qapi: add qapi-commands.py " Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 15/21] qapi: test schema used for unit tests Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 16/21] qapi: add test-visitor, tests for gen. visitor code Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 17/21] qapi: configure, Fix build issue when using seperate build dir Michael Roth
2011-06-15 19:34   ` Luiz Capitulino
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 18/21] qapi: Makefile changes to build test-visitor Michael Roth
2011-06-15 19:35   ` Luiz Capitulino
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 19/21] qapi: add test-qmp-commands, tests for gen. marshalling/dispatch code Michael Roth
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 20/21] qapi: Makefile changes to build test-qmp-commands Michael Roth
2011-06-15 19:35   ` Luiz Capitulino
2011-06-14  2:31 ` [Qemu-devel] [PATCH v3 21/21] qapi: add QAPI code generation documentation Michael Roth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1308018686-8235-1-git-send-email-mdroth@linux.vnet.ibm.com \
    --to=mdroth@linux.vnet.ibm.com \
    --cc=Jes.Sorensen@redhat.com \
    --cc=agl@linux.vnet.ibm.com \
    --cc=aliguori@linux.vnet.ibm.com \
    --cc=lcapitulino@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).