qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: kwolf@redhat.com, peter.maydell@linaro.org, aliguori@us.ibm.com,
	qemu-devel@nongnu.org, blauwirbel@gmail.com
Subject: Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations
Date: Mon, 15 Oct 2012 15:37:18 +0200	[thread overview]
Message-ID: <507C118E.5010106@redhat.com> (raw)
In-Reply-To: <20121005164730.GM16157@illuin>

Il 05/10/2012 18:47, Michael Roth ha scritto:
> On Fri, Oct 05, 2012 at 05:53:09PM +0200, Paolo Bonzini wrote:
>> Il 05/10/2012 17:41, Michael Roth ha scritto:
>>> On Fri, Oct 05, 2012 at 05:07:46PM +0200, Paolo Bonzini wrote:
>>>> Il 04/10/2012 19:33, Michael Roth ha scritto:
>>>>> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
>>>>> ---
>>>>>  qidl.h |  113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>>>  1 file changed, 113 insertions(+)
>>>>>  create mode 100644 qidl.h
>>>>>
>>>>> diff --git a/qidl.h b/qidl.h
>>>>> new file mode 100644
>>>>> index 0000000..eae0202
>>>>> --- /dev/null
>>>>> +++ b/qidl.h
>>>>> @@ -0,0 +1,113 @@
>>>>> +/*
>>>>> + * QEMU IDL Macros/stubs
>>>>> + *
>>>>> + * See docs/qidl.txt for usage information.
>>>>> + *
>>>>> + * Copyright IBM, Corp. 2012
>>>>> + *
>>>>> + * Authors:
>>>>> + *  Michael Roth    <mdroth@linux.vnet.ibm.com>
>>>>> + *
>>>>> + * This work is licensed under the terms of the GNU GPLv2 or later.
>>>>> + * See the COPYING file in the top-level directory.
>>>>> + *
>>>>> + */
>>>>> +
>>>>> +#ifndef QIDL_H
>>>>> +#define QIDL_H
>>>>> +
>>>>> +#include <glib.h>
>>>>> +#include "qapi/qapi-visit-core.h"
>>>>> +#include "qemu/object.h"
>>>>> +#include "hw/qdev-properties.h"
>>>>> +
>>>>> +#ifdef QIDL_GEN
>>>>> +
>>>>> +/* we pass the code through the preprocessor with QIDL_GEN defined to parse
>>>>> + * structures as they'd appear after preprocessing, and use the following
>>>>> + * definitions mostly to re-insert the initial macros/annotations so they
>>>>> + * stick around for the parser to process
>>>>> + */
>>>>> +#define QIDL(...) QIDL(__VA_ARGS__)
>>>>> +#define QIDL_START(name, ...) QIDL_START(name, ##__VA_ARGS__)
>>>>> +
>>>>> +#define QIDL_VISIT_TYPE(name, v, s, f, e)
>>>>> +#define QIDL_SCHEMA_ADD_LINK(name, obj, path, errp)
>>>>> +#define QIDL_PROPERTIES(name)
>>>>
>>>> Ok, a few questions...
>>>>
>>>> Why do you need these to expand to nothing in the QIDL_GEN case?
>>>>
>>>
>>> They don't need to, I was just trying to be explicit about what
>>> directives were relevant to the parser and which ones were relevant to
>>> the actually compiled code. It was more a development "aid" than
>>> anything else though, so I think we can drop the special handling and
>>> clean these up a bit.
>>
>> Yes, thanks!
>>
>>>>> +#define QIDL_DECLARE(name, ...) \
>>>>
>>>> Can QIDL_DECLARE replace QIDL_ENABLED as the magic detection string for
>>>> qidl compilation?
>>>>
>>>
>>> In some cases the declarations will come via #include'd headers, so the
>>> only way to do that reliable is to run it through the preprocessor
>>> first, which is how things were done in v1. But running everything
>>> through cpp adds substantial overhead, and just because a QIDL-fied
>>> struct is included in a C file, it doesn't mean that the C file intends
>>> to use any qidl-generated code.
>>
>> Ok, I guess I need to see some example.  We can clean it up later if we
>> find a more clever way to do things.
> 
> This was the main example I hit (not yet rebased):
> 
> https://github.com/mdroth/qemu/commit/d8ea7c7a882e2fcbd0a9b7ab9ea47a389f87d31b
> 
> As part of that patch We add annotations to PCIDevice in pci.h, which then gets
> pulled in from quite a few devices. So we end up with *.qidl.c files for devices
> that don't expose a "state" property or even have a QIDL_DECLARE() directive.
> 
> If we were to scan for QIDL_DECLARE() in advance of running it through
> the preprocessor, we'd address a lot of those case. But then we miss
> cases like this:
> 
> https://github.com/mdroth/qemu/commit/2199f721daebd5c3961069bdd51de80a5b4fa827
> 
> where, in pci.c, we use code generated from declarations in pci_internals.h even
> though pci.c doesn't contain a QIDL_DECLARE()

Hmm, this opens another can of worms.  There is a substantial amount of
duplicated code between generated files.  For example,
visit_type_PCIDevice is found in all *.qidl.c files for PCI devices.
Worse, the same is true for the properties array.

Right now, QIDL_DECLARE is a no-op at code-generation time.  Could it be
a marker to generate code for that particular struct?  Then you would
put a normal

struct PCIDevice {
};

declaration in hw/pci.h, and a

QIDL_DECLARE(PCIDevice);

in hw/pci.c that would trigger creation of the visitor etc.  The code
generator can also prepare extern declarations for types that are used
but not defined, for example visit_type_PCIDevice in piix_pci.qidl.c.

Paolo

  reply	other threads:[~2012-10-15 13:37 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-04 17:33 [Qemu-devel] [PATCH v3] Add infrastructure for QIDL-based device serialization Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 01/22] qapi: qapi-visit.py -> qapi_visit.py so we can import Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 02/22] qapi: qapi-types.py -> qapi_types.py Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 03/22] qapi: qapi-commands.py -> qapi_commands.py Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 04/22] qapi: qapi_visit.py, make code useable as module Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 05/22] qapi: qapi_visit.py, support arrays and complex qapi definitions Michael Roth
2012-10-05  8:11   ` Paolo Bonzini
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 06/22] qapi: qapi_visit.py, support generating static functions Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 07/22] qapi: qapi_visit.py, support for visiting non-pointer/embedded structs Michael Roth
2012-10-05  8:09   ` Paolo Bonzini
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 08/22] qapi: add visitor interfaces for C arrays Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 09/22] qapi: QmpOutputVisitor, implement array handling Michael Roth
2012-10-05  8:05   ` Paolo Bonzini
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 10/22] qapi: QmpInputVisitor, " Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 11/22] qapi: qapi.py, make json parser more robust Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 12/22] qapi: add open-coded visitor for struct tm types Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 13/22] qom-fuse: force single-threaded mode to avoid QMP races Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 14/22] qom-fuse: workaround for truncated properties > 4096 Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 15/22] module additions for schema registration Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 16/22] qdev: move Property-related declarations to qdev-properties.h Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 17/22] qidl: add documentation Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 18/22] qidl: add lexer library (based on QC parser) Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 19/22] qidl: add C parser " Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 20/22] qidl: add QAPI-based code generator Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations Michael Roth
2012-10-05  8:14   ` Paolo Bonzini
2012-10-05 14:50     ` Michael Roth
2012-10-05 15:07   ` Paolo Bonzini
2012-10-05 15:41     ` Michael Roth
2012-10-05 15:53       ` Paolo Bonzini
2012-10-05 16:47         ` Michael Roth
2012-10-15 13:37           ` Paolo Bonzini [this message]
2012-10-15 15:50             ` Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 22/22] qidl: unit tests and build infrastructure Michael Roth
2012-10-05  8:24   ` Paolo Bonzini
2012-10-12 21:39     ` Michael Roth
2012-10-13  7:12       ` Paolo Bonzini
2012-10-15  8:52       ` Kevin Wolf
2012-10-15 14:48         ` Michael Roth
2012-10-05  8:26 ` [Qemu-devel] [PATCH v3] Add infrastructure for QIDL-based device serialization Paolo Bonzini
2012-10-05 14:52   ` 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=507C118E.5010106@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=blauwirbel@gmail.com \
    --cc=kwolf@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=peter.maydell@linaro.org \
    --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).