From: Paolo Bonzini <pbonzini@redhat.com>
To: Eric Auger <eric.auger@linaro.org>,
eric.auger@st.com, qemu-devel@nongnu.org,
peter.crosthwaite@xilinx.com
Cc: alex.williamson@redhat.com, kvmarm@lists.cs.columbia.edu,
patches@linaro.org
Subject: Re: [PATCH 2/3] qdev: check callback takes Object **target as third argument
Date: Tue, 28 Apr 2015 13:47:33 +0200 [thread overview]
Message-ID: <553F7355.2080300@redhat.com> (raw)
In-Reply-To: <1430212683-10984-3-git-send-email-eric.auger@linaro.org>
On 28/04/2015 11:18, Eric Auger wrote:
> Check callback now takes as third argument an Object **. In
> object_set_link_property, we pass the property child as argument.
> We also assign the *child before the check call so that enhanced
> check can be performed in the callback. In case the check fails,
> the old value is restored and ref count is left unchanged.
>
> This typically makes possible to do checks both on the *child
> content (for instance a qemu_irq) and also perform some actions/
> checks on its container, which was not possible before.
>
> This is typically useful for starting irqfd setup in vfio platform
> use case.
s/typically/for example/
I can't say that "starting irqfd setup in vfio platform" is typical. :)
> diff --git a/include/qom/object.h b/include/qom/object.h
> index 4687fa1..0a7daff 100644
> --- a/include/qom/object.h
> +++ b/include/qom/object.h
> @@ -34,7 +34,7 @@ typedef struct InterfaceClass InterfaceClass;
> typedef struct InterfaceInfo InterfaceInfo;
>
> typedef void (*object_property_set_link_t)(Object *, const char *,
> - Object *, Error **);
> + Object **, Error **);
Let's make the new argument "Object * const*", and rename the typedef to
LinkPropertySetter.
Ok with that change.
Paolo
>
> #define TYPE_OBJECT "object"
>
> @@ -1136,7 +1136,7 @@ typedef enum {
> * an error.
> */
> void object_property_allow_set_link(Object *, const char *,
> - Object *, Error **);
> + Object **, Error **);
>
> /**
> * object_property_add_link:
> @@ -1168,8 +1168,7 @@ void object_property_allow_set_link(Object *, const char *,
> */
> void object_property_add_link(Object *obj, const char *name,
> const char *type, Object **child,
> - void (*check)(Object *obj, const char *name,
> - Object *val, Error **errp),
> + object_property_set_link_t check,
> ObjectPropertyLinkFlags flags,
> Error **errp);
>
> diff --git a/qom/object.c b/qom/object.c
> index b8dff43..cc9ed87 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -1112,14 +1112,14 @@ out:
> }
>
> void object_property_allow_set_link(Object *obj, const char *name,
> - Object *val, Error **errp)
> + Object **target, Error **errp)
> {
> /* Allow the link to be set, always */
> }
>
> typedef struct {
> Object **child;
> - void (*check)(Object *, const char *, Object *, Error **);
> + void (*check)(Object *, const char *, Object **, Error **);
> ObjectPropertyLinkFlags flags;
> } LinkProperty;
>
> @@ -1201,14 +1201,17 @@ static void object_set_link_property(Object *obj, Visitor *v, void *opaque,
> return;
> }
>
> - prop->check(obj, name, new_target, &local_err);
> + object_ref(new_target);
> + *child = new_target;
> +
> + prop->check(obj, name, child, &local_err);
> if (local_err) {
> error_propagate(errp, local_err);
> + *child = old_target;
> + object_ref(new_target);
> return;
> }
>
> - object_ref(new_target);
> - *child = new_target;
> object_unref(old_target);
> }
>
> @@ -1233,7 +1236,7 @@ static void object_release_link_property(Object *obj, const char *name,
> void object_property_add_link(Object *obj, const char *name,
> const char *type, Object **child,
> void (*check)(Object *, const char *,
> - Object *, Error **),
> + Object **, Error **),
> ObjectPropertyLinkFlags flags,
> Error **errp)
> {
>
next prev parent reply other threads:[~2015-04-28 11:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-28 9:18 [PATCH 0/3] Extend check callback usability for irq connect notifier Eric Auger
2015-04-28 9:18 ` [PATCH 1/3] qdev: pass the check callback to qdev_init_gpio_out_named Eric Auger
2015-04-28 9:18 ` [PATCH 2/3] qdev: check callback takes Object **target as third argument Eric Auger
2015-04-28 11:47 ` Paolo Bonzini [this message]
2015-04-28 9:18 ` [PATCH 3/3] sysbus: add irq_set_hook Eric Auger
2015-04-28 18:21 ` [PATCH 0/3] Extend check callback usability for irq connect notifier Peter Crosthwaite
2015-04-29 7:43 ` [Qemu-devel] " Eric Auger
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=553F7355.2080300@redhat.com \
--to=pbonzini@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=eric.auger@linaro.org \
--cc=eric.auger@st.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=patches@linaro.org \
--cc=peter.crosthwaite@xilinx.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