From: "Marc-André Lureau" <mlureau@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: marcandre lureau <marcandre.lureau@redhat.com>,
qemu-devel@nongnu.org, mst@redhat.com, rth@twiddle.net,
ehabkost@redhat.com
Subject: Re: [Qemu-devel] [PATCH] RFC: pci-bus: add property ownership on bsel
Date: Tue, 2 Aug 2016 10:28:18 -0400 (EDT) [thread overview]
Message-ID: <2014655900.496159.1470148098168.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <20160802143649.52506ce6@nial.brq.redhat.com>
Hi
----- Original Message -----
> On Thu, 28 Jul 2016 15:13:57 +0400
> marcandre.lureau@redhat.com wrote:
>
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > The property should own the allocated and unreferenced pointer. In case
> > of error, it should also be freed.
>
> acpi_setup() -> acpi_set_pci_info() -> acpi_set_bsel()
> is called only once at machine done time
> so if error happens it would be better to handle it instead of
> just freeing bus_bsel pointer.
> Since it's error path at machine startup time, typical reaction
> to an unexpected error would be abort(), so following change
> should be sufficient:
>
> object_property_add_uint32_ptr(OBJECT(bus), ACPI_PCIHP_PROP_BSEL,
> - bus_bsel, NULL);
> + bus_bsel, &error_abort);
>
That's fine with me, but it will abort with /x86_64/qom/pc-i440fx-1.7 test. Any idea why?
> >
> > RFC, because this patch triggers:
> > /x86_64/qom/pc-i440fx-1.7:
> > qemu-system-x86_64: attempt to add duplicate property 'acpi-pcihp-bsel' to
> > object (type 'PCI')
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > hw/i386/acpi-build.c | 15 +++++++++++++--
> > include/qom/object.h | 4 ++++
> > qom/object.c | 9 +++++++++
> > 3 files changed, 26 insertions(+), 2 deletions(-)
> >
> > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> > index 017bb51..2012007 100644
> > --- a/hw/i386/acpi-build.c
> > +++ b/hw/i386/acpi-build.c
> > @@ -425,6 +425,11 @@ build_madt(GArray *table_data, BIOSLinker *linker,
> > PCMachineState *pcms)
> > table_data->len - madt_start, 1, NULL, NULL);
> > }
> >
> > +static void bsel_release(Object *obj, const char *name, void *opaque)
> > +{
> > + g_free(opaque);
> > +}
> > +
> > /* Assign BSEL property to all buses. In the future, this can be changed
> > * to only assign to buses that support hotplug.
> > */
> > @@ -432,13 +437,19 @@ static void *acpi_set_bsel(PCIBus *bus, void *opaque)
> > {
> > unsigned *bsel_alloc = opaque;
> > unsigned *bus_bsel;
> > + Error *err = NULL;
> >
> > if (qbus_is_hotpluggable(BUS(bus))) {
> > bus_bsel = g_malloc(sizeof *bus_bsel);
> >
> > *bus_bsel = (*bsel_alloc)++;
> > - object_property_add_uint32_ptr(OBJECT(bus), ACPI_PCIHP_PROP_BSEL,
> > - bus_bsel, NULL);
> > + object_property_add_uint32_ptr_release(OBJECT(bus),
> > + ACPI_PCIHP_PROP_BSEL,
> > + bus_bsel, bsel_release,
> > &err);
> > + if (err) {
> > + g_free(bus_bsel);
> > + error_report_err(err);
> > + }
> > }
> >
> > return bsel_alloc;
> > diff --git a/include/qom/object.h b/include/qom/object.h
> > index 5ecc2d1..41c1051 100644
> > --- a/include/qom/object.h
> > +++ b/include/qom/object.h
> > @@ -1488,6 +1488,10 @@ void
> > object_class_property_add_uint16_ptr(ObjectClass *klass, const char *name,
> > */
> > void object_property_add_uint32_ptr(Object *obj, const char *name,
> > const uint32_t *v, Error **errp);
> > +void object_property_add_uint32_ptr_release(Object *obj, const char *name,
> > + uint32_t *v,
> > + ObjectPropertyRelease
> > *release,
> > + Error **errp);
> > void object_class_property_add_uint32_ptr(ObjectClass *klass, const char
> > *name,
> > const uint32_t *v, Error
> > **errp);
> >
> > diff --git a/qom/object.c b/qom/object.c
> > index 8166b7d..1635f57 100644
> > --- a/qom/object.c
> > +++ b/qom/object.c
> > @@ -2157,6 +2157,15 @@ void object_property_add_uint32_ptr(Object *obj,
> > const char *name,
> > NULL, NULL, (void *)v, errp);
> > }
> >
> > +void object_property_add_uint32_ptr_release(Object *obj, const char *name,
> > + uint32_t *v,
> > + ObjectPropertyRelease
> > *release,
> > + Error **errp)
> > +{
> > + object_property_add(obj, name, "uint32", property_get_uint32_ptr,
> > + NULL, release, (void *)v, errp);
> > +}
> > +
> > void object_class_property_add_uint32_ptr(ObjectClass *klass, const char
> > *name,
> > const uint32_t *v, Error **errp)
> > {
>
>
prev parent reply other threads:[~2016-08-02 14:28 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-28 11:13 [Qemu-devel] [PATCH] RFC: pci-bus: add property ownership on bsel marcandre.lureau
2016-07-28 11:29 ` Igor Mammedov
2016-07-28 13:43 ` Marc-André Lureau
2016-07-29 6:31 ` Igor Mammedov
2016-07-29 7:30 ` Marc-André Lureau
2016-08-02 12:36 ` Igor Mammedov
2016-08-02 14:28 ` Marc-André Lureau [this message]
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=2014655900.496159.1470148098168.JavaMail.zimbra@redhat.com \
--to=mlureau@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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.