From: Igor Mammedov <imammedo@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: qemu-devel@nongnu.org, ehabkost@redhat.com, armbru@redhat.com,
dgilbert@redhat.com, afaerber@suse.de
Subject: Re: [Qemu-devel] [PATCH 3/3] fix qmp/hmp query-memdev not repporting IDs of memory backends
Date: Tue, 3 Jan 2017 18:19:49 +0100 [thread overview]
Message-ID: <20170103181949.37434fb8@Igors-MacBook-Pro.local> (raw)
In-Reply-To: <bd7470b8-42e1-c681-f5c5-0d3808e0a9b6@redhat.com>
On Tue, 3 Jan 2017 09:34:40 -0600
Eric Blake <eblake@redhat.com> wrote:
> On 01/02/2017 09:44 AM, Igor Mammedov wrote:
>
> s/repporting/reporting/ in the subject
>
> > Do it by adding 'id' property to hostmem backends and fetch it
> > in query-memdev from object directly.
> >
> > Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> > ---
>
> > +++ b/qom/object_interfaces.c
> > @@ -4,6 +4,7 @@
> > #include "qemu/module.h"
> > #include "qapi-visit.h"
> > #include "qapi/opts-visitor.h"
> > +#include "qapi/qmp/qstring.h"
> >
> > void user_creatable_complete(Object *obj, Error **errp)
> > {
> > @@ -35,7 +36,7 @@ bool user_creatable_can_be_deleted(UserCreatable *uc, Error **errp)
> > }
> >
> > Object *user_creatable_add_type(const char *type, const char *id,
> > - const QDict *qdict,
> > + QDict *qdict,
> > Visitor *v, Error **errp)
> > {
> > Object *obj;
> > @@ -62,6 +63,9 @@ Object *user_creatable_add_type(const char *type, const char *id,
> >
> > assert(qdict);
> > obj = object_new(type);
> > + if (object_property_find(obj, "id", NULL)) {
> > + qdict_put(qdict, "id", qstring_from_str(id));
> > + }
>
> Wait. Isn't this going to inject an 'id' dict member to every use of
> user_creatable_add_type()? But not all QAPI structs contain an id
> member.
it would 'inject' 'id' only for objects that have 'id' property.
or more exactly it would restore 'id' that is deleted earlier from
the same qdict. Look for qdict_del() usage in this file.
This way it'd be able to process both kinds of objects that implement
'id' property and ones that don't.
> Which means that you are now explicitly relying on the visitor
> to silently ignore garbage in the dictionary, rather than our desired
> goal of only validating if the dictionary exactly matches what the QAPI
> says it will match.
currently 'id' is mandatory, but not enforced by QAPI structs,
for all objects created with -object/object_add as it's used for
naming object in qom tree:
object_property_add_child(object_get_objects_root(), id, obj, &local_err);
>
> I'm not sure if I like this hack, or if there is a better way to do
> things when using a strict (rather than relaxed) input visitor.
I'm not sure about a better way to do this.
Currently we use 2 visitors: opts (for cli/hmp) and qobject_input for qmp path,
which accept anything as target object could take different options.
The only things we currently enforce in code is presence of implicit 'qom-type' property
and 'id' property. The rest of properties are validated by object's property setters.
>
> > visit_start_struct(v, NULL, NULL, 0, &local_err);
> > if (local_err) {
> > goto out;
> >
>
next prev parent reply other threads:[~2017-01-03 17:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-02 15:44 [Qemu-devel] [PATCH 0/3] fix query-memdev not repporting IDs of memory backends Igor Mammedov
2017-01-02 15:44 ` [Qemu-devel] [PATCH 1/3] cleanup: remove not used header Igor Mammedov
2017-01-03 15:25 ` Eric Blake
2017-01-03 15:26 ` Andreas Färber
2017-01-03 16:54 ` Igor Mammedov
2017-01-02 15:44 ` [Qemu-devel] [PATCH 2/3] reuse user_creatable_add_opts() instead of user_creatable_add() in monitor Igor Mammedov
2017-01-03 15:29 ` Eric Blake
2017-01-03 15:30 ` Eric Blake
2017-01-02 15:44 ` [Qemu-devel] [PATCH 3/3] fix qmp/hmp query-memdev not repporting IDs of memory backends Igor Mammedov
2017-01-03 15:34 ` Eric Blake
2017-01-03 17:19 ` Igor Mammedov [this message]
2017-01-09 14:17 ` Igor Mammedov
2017-01-09 20:26 ` Eric Blake
2017-01-10 9:07 ` Igor Mammedov
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=20170103181949.37434fb8@Igors-MacBook-Pro.local \
--to=imammedo@redhat.com \
--cc=afaerber@suse.de \
--cc=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=ehabkost@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).