* [Qemu-devel] [PATCH v3] qdev: move the code adding the device out of realize
@ 2014-03-03 7:57 Amos Kong
2014-03-03 13:34 ` Igor Mammedov
0 siblings, 1 reply; 4+ messages in thread
From: Amos Kong @ 2014-03-03 7:57 UTC (permalink / raw)
To: qemu-devel; +Cc: hutao, armbru, afaerber, aliguori, pbonzini
Test steps:
(qemu) device_add e1000,addr=adsf
Property 'e1000.addr' doesn't take value 'adsf'
(qemu) info qtree
Then qemu crashed.
Currently we set a link to the new device for qdev parent bus, but the
device hasn't been added to QOM tree. When it fails to set properties,
object_unparent() can't cleanup the device.
This patch moves the code adding the device output realize, when it fails
to set properties, the device can be cleaned successfully.
Signed-off-by: Amos Kong <akong@redhat.com>
---
V2: fix bz by adjust the initialization order (Paolo)
V3: fix bug without making it differs with legacy devices
creation (Andreas)
---
qdev-monitor.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/qdev-monitor.c b/qdev-monitor.c
index 6673e3c..9268c87 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -522,7 +522,7 @@ DeviceState *qdev_device_add(QemuOpts *opts)
return NULL;
}
- /* create device, set properties */
+ /* create device */
dev = DEVICE(object_new(driver));
if (bus) {
@@ -533,11 +533,7 @@ DeviceState *qdev_device_add(QemuOpts *opts)
if (id) {
dev->id = id;
}
- if (qemu_opt_foreach(opts, set_property, dev, 1) != 0) {
- object_unparent(OBJECT(dev));
- object_unref(OBJECT(dev));
- return NULL;
- }
+
if (dev->id) {
object_property_add_child(qdev_get_peripheral(), dev->id,
OBJECT(dev), NULL);
@@ -549,6 +545,13 @@ DeviceState *qdev_device_add(QemuOpts *opts)
g_free(name);
}
+ /* set properties */
+ if (qemu_opt_foreach(opts, set_property, dev, 1) != 0) {
+ object_unparent(OBJECT(dev));
+ object_unref(OBJECT(dev));
+ return NULL;
+ }
+
dev->opts = opts;
object_property_set_bool(OBJECT(dev), true, "realized", &err);
if (err != NULL) {
--
1.8.5.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH v3] qdev: move the code adding the device out of realize
2014-03-03 7:57 [Qemu-devel] [PATCH v3] qdev: move the code adding the device out of realize Amos Kong
@ 2014-03-03 13:34 ` Igor Mammedov
2014-03-03 15:56 ` Andreas Färber
0 siblings, 1 reply; 4+ messages in thread
From: Igor Mammedov @ 2014-03-03 13:34 UTC (permalink / raw)
To: Amos Kong; +Cc: hutao, qemu-devel, armbru, aliguori, pbonzini, afaerber
On Mon, 3 Mar 2014 15:57:55 +0800
Amos Kong <akong@redhat.com> wrote:
s/subj/qdev: set properties after device's parent is assigned/
> Test steps:
> (qemu) device_add e1000,addr=adsf
> Property 'e1000.addr' doesn't take value 'adsf'
> (qemu) info qtree
> Then qemu crashed.
>
> Currently we set a link to the new device for qdev parent bus, but the
> device hasn't been added to QOM tree. When it fails to set properties,
> object_unparent() can't cleanup the device.
>
> This patch moves the code adding the device output realize, when it fails
> to set properties, the device can be cleaned successfully.
Suggest rephrase as:
Delay device property setting until device's parent is assigned. This way
when property setting fails, object_unparent() can cleanup failed device
properly.
with above correction:
Reviewed-By: Igor Mammedov <imammedo@redhat.com>
>
> Signed-off-by: Amos Kong <akong@redhat.com>
> ---
> V2: fix bz by adjust the initialization order (Paolo)
> V3: fix bug without making it differs with legacy devices
> creation (Andreas)
> ---
> qdev-monitor.c | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/qdev-monitor.c b/qdev-monitor.c
> index 6673e3c..9268c87 100644
> --- a/qdev-monitor.c
> +++ b/qdev-monitor.c
> @@ -522,7 +522,7 @@ DeviceState *qdev_device_add(QemuOpts *opts)
> return NULL;
> }
>
> - /* create device, set properties */
> + /* create device */
> dev = DEVICE(object_new(driver));
>
> if (bus) {
> @@ -533,11 +533,7 @@ DeviceState *qdev_device_add(QemuOpts *opts)
> if (id) {
> dev->id = id;
> }
> - if (qemu_opt_foreach(opts, set_property, dev, 1) != 0) {
> - object_unparent(OBJECT(dev));
> - object_unref(OBJECT(dev));
> - return NULL;
> - }
> +
> if (dev->id) {
> object_property_add_child(qdev_get_peripheral(), dev->id,
> OBJECT(dev), NULL);
> @@ -549,6 +545,13 @@ DeviceState *qdev_device_add(QemuOpts *opts)
> g_free(name);
> }
>
> + /* set properties */
> + if (qemu_opt_foreach(opts, set_property, dev, 1) != 0) {
> + object_unparent(OBJECT(dev));
> + object_unref(OBJECT(dev));
> + return NULL;
> + }
> +
> dev->opts = opts;
> object_property_set_bool(OBJECT(dev), true, "realized", &err);
> if (err != NULL) {
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH v3] qdev: move the code adding the device out of realize
2014-03-03 13:34 ` Igor Mammedov
@ 2014-03-03 15:56 ` Andreas Färber
2014-03-03 17:25 ` Igor Mammedov
0 siblings, 1 reply; 4+ messages in thread
From: Andreas Färber @ 2014-03-03 15:56 UTC (permalink / raw)
To: Igor Mammedov, Amos Kong; +Cc: hutao, pbonzini, qemu-devel, aliguori, armbru
Am 03.03.2014 14:34, schrieb Igor Mammedov:
> On Mon, 3 Mar 2014 15:57:55 +0800
> Amos Kong <akong@redhat.com> wrote:
>
> s/subj/qdev: set properties after device's parent is assigned/
>
>> Test steps:
>> (qemu) device_add e1000,addr=adsf
>> Property 'e1000.addr' doesn't take value 'adsf'
>> (qemu) info qtree
>> Then qemu crashed.
>>
>> Currently we set a link to the new device for qdev parent bus, but the
>> device hasn't been added to QOM tree. When it fails to set properties,
>> object_unparent() can't cleanup the device.
>>
>> This patch moves the code adding the device output realize, when it fails
>> to set properties, the device can be cleaned successfully.
> Suggest rephrase as:
> Delay device property setting until device's parent is assigned. This way
> when property setting fails, object_unparent() can cleanup failed device
> properly.
>
> with above correction:
> Reviewed-By: Igor Mammedov <imammedo@redhat.com>
>
>>
>> Signed-off-by: Amos Kong <akong@redhat.com>
>> ---
>> V2: fix bz by adjust the initialization order (Paolo)
>> V3: fix bug without making it differs with legacy devices
>> creation (Andreas)
Perfect, I've tweaked the commit message along the lines of Igor's
suggestion - please take a look if you want it changed differently:
https://github.com/afaerber/qemu-cpu/commits/qom-next
Thanks,
Andreas
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH v3] qdev: move the code adding the device out of realize
2014-03-03 15:56 ` Andreas Färber
@ 2014-03-03 17:25 ` Igor Mammedov
0 siblings, 0 replies; 4+ messages in thread
From: Igor Mammedov @ 2014-03-03 17:25 UTC (permalink / raw)
To: Andreas Färber
Cc: hutao, qemu-devel, armbru, aliguori, pbonzini, Amos Kong
On Mon, 03 Mar 2014 16:56:19 +0100
Andreas Färber <afaerber@suse.de> wrote:
> Am 03.03.2014 14:34, schrieb Igor Mammedov:
> > On Mon, 3 Mar 2014 15:57:55 +0800
> > Amos Kong <akong@redhat.com> wrote:
> >
> > s/subj/qdev: set properties after device's parent is assigned/
> >
> >> Test steps:
> >> (qemu) device_add e1000,addr=adsf
> >> Property 'e1000.addr' doesn't take value 'adsf'
> >> (qemu) info qtree
> >> Then qemu crashed.
> >>
> >> Currently we set a link to the new device for qdev parent bus, but the
> >> device hasn't been added to QOM tree. When it fails to set properties,
> >> object_unparent() can't cleanup the device.
> >>
> >> This patch moves the code adding the device output realize, when it fails
> >> to set properties, the device can be cleaned successfully.
> > Suggest rephrase as:
> > Delay device property setting until device's parent is assigned. This way
> > when property setting fails, object_unparent() can cleanup failed device
> > properly.
> >
> > with above correction:
> > Reviewed-By: Igor Mammedov <imammedo@redhat.com>
> >
> >>
> >> Signed-off-by: Amos Kong <akong@redhat.com>
> >> ---
> >> V2: fix bz by adjust the initialization order (Paolo)
> >> V3: fix bug without making it differs with legacy devices
> >> creation (Andreas)
>
> Perfect, I've tweaked the commit message along the lines of Igor's
> suggestion - please take a look if you want it changed differently:
> https://github.com/afaerber/qemu-cpu/commits/qom-next
I'm ok with it.
Thanks!
>
> Thanks,
> Andreas
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-03-03 17:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-03 7:57 [Qemu-devel] [PATCH v3] qdev: move the code adding the device out of realize Amos Kong
2014-03-03 13:34 ` Igor Mammedov
2014-03-03 15:56 ` Andreas Färber
2014-03-03 17:25 ` Igor Mammedov
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).