All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.