From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Cc: "Marcelo Tosatti" <mtosatti@redhat.com>,
"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH 4/5] qom: allow creating an alias of an object
Date: Tue, 17 Jun 2014 16:06:49 +0200 [thread overview]
Message-ID: <53A04B79.808@redhat.com> (raw)
In-Reply-To: <CAEgOgz6QSYSyqcd=pOqsC+bu5eSeOZVfHfSKg7v1HvfF4NnYEw@mail.gmail.com>
Il 17/06/2014 15:55, Peter Crosthwaite ha scritto:
> On Thu, Jun 12, 2014 at 2:49 AM, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> Add a shorthand for creating an alias of a child<> property. If you
>> pass a NULL target_name to object_property_add_alias, the function
>> will look up the child property that leads to target_obj, and create
>> an alias for that property.
>>
>> This can be useful when an object wants to add a link to itself
>> at a well-known location. For example, a real-time clock device might
>> add a link to itself at "/machine/rtc". Such well-known locations can
>> then expose a standard set of properties that can be accessed via the
>> "qom-get" and "qom-set" commands.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>> include/qom/object.h | 10 +++++++---
>> qom/object.c | 16 +++++++++++++---
>> 2 files changed, 20 insertions(+), 6 deletions(-)
>>
>> diff --git a/include/qom/object.h b/include/qom/object.h
>> index 9c4a5a4..9cd0ffa 100644
>> --- a/include/qom/object.h
>> +++ b/include/qom/object.h
>> @@ -1256,11 +1256,15 @@ void object_property_add_uint64_ptr(Object *obj, const char *name,
>> * @obj: the object to add a property to
>> * @name: the name of the property
>> * @target_obj: the object to forward property access to
>> - * @target_name: the name of the property on the forwarded object
>> + * @target_name: the name of the property on the forwarded object, or
>> + * #NULL to make an object alias.
>> * @errp: if an error occurs, a pointer to an area to store the error
>> *
>> - * Add an alias for a property on an object. This function will add a property
>> - * of the same type as the forwarded property.
>> + * Add an alias property on an object. This function will add a property
>> + * of the same type as the forwarded property or, if @target_name is #NULL,
>> + * a link property that always resolves to @target_obj. In fact, the case
>> + * of a #NULL @target_obj actually creates an alias property that targets
>> + * @target_obj's own child property.
>> *
>> * The caller must ensure that <code>@target_obj</code> stays alive as long as
>> * this property exists. In the case of a child object or an alias on the same
>> diff --git a/qom/object.c b/qom/object.c
>> index ddf781e..1e8e6af 100644
>> --- a/qom/object.c
>> +++ b/qom/object.c
>> @@ -1535,7 +1535,7 @@ void object_property_add_uint64_ptr(Object *obj, const char *name,
>> typedef struct
>> {
>> Object *target_obj;
>> - const char *target_name;
>> + char *target_name;
>> } AliasProperty;
>>
>> static void property_get_alias(Object *obj, struct Visitor *v, void *opaque,
>> @@ -1566,6 +1566,7 @@ static void property_release_alias(Object *obj, const char *name, void *opaque)
>> {
>> AliasProperty *prop = opaque;
>>
>> + g_free(prop->target_name);
>> g_free(prop);
>> }
>>
>> @@ -1576,9 +1577,18 @@ void object_property_add_alias(Object *obj, const char *name,
>> AliasProperty *prop;
>> ObjectProperty *target_prop;
>> gchar *prop_type;
>> + gchar *the_target_name;
>>
>> - target_prop = object_property_find(target_obj, target_name, errp);
>> + if (!target_name) {
>> + the_target_name = object_get_canonical_path_component(target_obj);
>> + target_obj = target_obj->parent;
>
> This semantic seems a little tricky. It also get the target's
> canon-parent entangled in the process whereas your original
> object_property_add_alias is more self contained:
>
> http://lists.gnu.org/archive/html/qemu-devel/2014-06/msg01203.html
>
> For instance - could you unparent then reparent an object and have
> it's aliases survive? I think the best implementation is to simply
> place your original alias logic here under if (!target_name) and
> return.
Ok, so that would mean special casing target_prop == NULL.
Paolo
next prev parent reply other threads:[~2014-06-17 14:07 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-11 16:49 [Qemu-devel] [PATCH 0/5] qom: path resolution, property aliases and more Paolo Bonzini
2014-06-11 16:49 ` [Qemu-devel] [PATCH 1/5] qom: add a generic mechanism to resolve paths Paolo Bonzini
2014-06-17 13:08 ` Peter Crosthwaite
2014-06-17 14:18 ` Andreas Färber
2014-06-17 15:07 ` Paolo Bonzini
2014-06-17 15:19 ` Andreas Färber
2014-06-17 15:25 ` Paolo Bonzini
2014-06-17 15:15 ` Andreas Färber
2014-06-11 16:49 ` [Qemu-devel] [PATCH 2/5] qom: add object_property_add_alias() Paolo Bonzini
2014-06-17 15:42 ` Andreas Färber
2014-06-11 16:49 ` [Qemu-devel] [PATCH 3/5] qom: allow creating an alias of a child<> property Paolo Bonzini
2014-06-17 13:28 ` Peter Crosthwaite
2014-06-17 13:31 ` Paolo Bonzini
2014-06-17 13:33 ` Andreas Färber
2014-06-17 16:37 ` Andreas Färber
2014-06-17 16:46 ` Paolo Bonzini
2014-06-17 16:47 ` Andreas Färber
2014-06-11 16:49 ` [Qemu-devel] [PATCH 4/5] qom: allow creating an alias of an object Paolo Bonzini
2014-06-17 13:55 ` Peter Crosthwaite
2014-06-17 14:06 ` Paolo Bonzini [this message]
2014-06-17 14:15 ` Paolo Bonzini
2014-06-17 14:16 ` Peter Crosthwaite
2014-06-17 16:48 ` Paolo Bonzini
2014-06-11 16:49 ` [Qemu-devel] [PATCH 5/5] mc146818rtc: add "rtc" link to "/machine" Paolo Bonzini
2014-06-17 14:09 ` Peter Crosthwaite
2014-06-17 14:12 ` Paolo Bonzini
2014-06-17 14:25 ` Peter Crosthwaite
2014-06-17 15:01 ` Paolo Bonzini
2014-06-17 16:55 ` Andreas Färber
2014-06-17 17:16 ` Paolo Bonzini
2014-06-17 17:09 ` Andreas Färber
2014-06-17 17:30 ` Paolo Bonzini
2014-06-17 17:38 ` Andreas Färber
2014-06-18 7:11 ` Paolo Bonzini
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=53A04B79.808@redhat.com \
--to=pbonzini@redhat.com \
--cc=afaerber@suse.de \
--cc=mtosatti@redhat.com \
--cc=peter.crosthwaite@xilinx.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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.