From: Markus Armbruster <armbru@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: Luiz Capitulino <lcapitulino@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>,
qemu-devel@nongnu.org, Michael Roth <mdroth@linux.vnet.ibm.com>
Subject: Re: [Qemu-devel] [PATCH v11 10/24] qapi: Unbox base members
Date: Tue, 27 Oct 2015 08:52:59 +0100 [thread overview]
Message-ID: <87si4wiw84.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <1445898903-12082-11-git-send-email-eblake@redhat.com> (Eric Blake's message of "Mon, 26 Oct 2015 16:34:49 -0600")
Eric Blake <eblake@redhat.com> writes:
> Rather than storing a base class as a pointer to a box, just
> store the fields of that base class in the same order, so that
> a child struct can be directly cast to its parent. This gives
> less malloc overhead, less pointer dereferencing, and even less
> generated code. Compare to the earlier commit 1e6c1616a "qapi:
> Generate a nicer struct for flat unions" (although that patch
> had fewer places to change, as less of qemu was directly using
> qapi structs for flat unions). It also allows us to turn on
> automatic type-safe wrappers for upcasting to the base class
> of a struct.
>
> Changes to the generated code look like this in qapi-types.h:
>
> | struct SpiceChannel {
> |- SpiceBasicInfo *base;
> |+ /* Members inherited from SpiceBasicInfo: */
> |+ char *host;
> |+ char *port;
> |+ NetworkAddressFamily family;
> |+ /* Own members: */
> | int64_t connection_id;
>
> as well as added upcast functions like qapi_SpiceChannel_base().
"additional upcast functions" sounds better to my ears.
> Meanwhile, changes to qapi-visit.c look like:
>
> | static void visit_type_SpiceChannel_fields(Visitor *v, SpiceChannel **obj, Error **errp)
> | {
> | Error *err = NULL;
> |
> |- visit_type_implicit_SpiceBasicInfo(v, &(*obj)->base, &err);
> |+ visit_type_SpiceBasicInfo_fields(v, (SpiceBasicInfo **)obj, &err);
> | if (err) {
>
> (the cast is necessary, since our upcast wrappers only deal with a
> single pointer, not pointer-to-pointer); plus the wholesale
> elimination of some now-unused visit_type_implicit_FOO() functions.
>
> Without boxing, the corner case of one empty struct having
> another empty struct as its base type now requires inserting a
> dummy member (previously, the 'Base *base' member sufficed).
>
> And now that we no longer consume a 'base' member in the generated
> C struct, we can delete the former negative struct-base-clash-base
> test.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
>
> ---
> v11: delay gen_upcast for structs until here, rebase to proper use
> of gen_visit_fields_decl() in gen_visit_struct_fields(), improve
> commit message
> v10: split off some of the cleanups into earlier patches, improve
> commit message, don't emit visit_type_FOO_fields out of order,
> save positive tests in qapi-schema-tests for later
> v9: (no v6-8): hoist from v5 34/46, rebase to master
Patch looks good. I can touch up the commit message in my tree.
next prev parent reply other threads:[~2015-10-27 7:53 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-26 22:34 [Qemu-devel] [PATCH v11 00/24] qapi collision reduction (post-introspection subset B') Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 01/24] tests/qapi-schema: Test for reserved names, empty struct Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 02/24] qapi: More idiomatic string operations Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 03/24] qapi: More robust conditions for when labels are needed Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 04/24] qapi: Reserve '*List' type names for list types Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 05/24] qapi: Reserve 'q_*' and 'has_*' member names Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 06/24] vnc: Hoist allocation of VncBasicInfo to callers Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 07/24] qapi-visit: Split off visit_type_FOO_fields forward decl Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 08/24] qapi-types: Refactor base fields output Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 09/24] qapi: Prefer typesafe upcasts to qapi base classes Eric Blake
2015-10-27 7:46 ` Markus Armbruster
2015-10-27 14:17 ` Eric Blake
2015-10-27 15:06 ` Markus Armbruster
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 10/24] qapi: Unbox base members Eric Blake
2015-10-27 7:52 ` Markus Armbruster [this message]
2015-10-27 14:20 ` Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 11/24] qapi-visit: Remove redundant functions for flat union base Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 12/24] qapi: Start converting to new qapi union layout Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 13/24] qapi-visit: Convert " Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 14/24] tests: " Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 15/24] block: " Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 16/24] sockets: " Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 17/24] net: " Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 18/24] char: " Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 19/24] input: " Eric Blake
2015-10-26 22:34 ` [Qemu-devel] [PATCH v11 20/24] memory: " Eric Blake
2015-10-26 22:35 ` [Qemu-devel] [PATCH v11 21/24] tpm: " Eric Blake
2015-10-26 22:35 ` [Qemu-devel] [PATCH v11 22/24] qapi: Finish converting " Eric Blake
2015-10-27 14:33 ` Eric Blake
2015-10-27 16:01 ` Markus Armbruster
2015-10-27 16:47 ` Eric Blake
2015-10-27 16:58 ` Markus Armbruster
2015-10-26 22:35 ` [Qemu-devel] [PATCH v11 23/24] qapi: Reserve 'u' member name Eric Blake
2015-10-27 8:21 ` Markus Armbruster
2015-10-27 14:23 ` Eric Blake
2015-10-27 15:14 ` Markus Armbruster
2015-10-26 22:35 ` [Qemu-devel] [PATCH v11 24/24] qapi: Simplify gen_struct_field() Eric Blake
2015-10-27 8:39 ` [Qemu-devel] [PATCH v11 00/24] qapi collision reduction (post-introspection subset B') Markus Armbruster
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=87si4wiw84.fsf@blackfin.pond.sub.org \
--to=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=kraxel@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mdroth@linux.vnet.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.