qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2] qdev: Don't assume existence of parent bus on unparenting
@ 2013-01-04 17:34 Andreas Färber
  2013-01-07 13:47 ` Igor Mammedov
  0 siblings, 1 reply; 3+ messages in thread
From: Andreas Färber @ 2013-01-04 17:34 UTC (permalink / raw)
  To: qemu-devel
  Cc: imammedo, Paolo Bonzini, ehabkost, anthony, Andreas Färber

Commit 667d22d1ae59da46b4c1fbd094ca61145f19b8c3 (qdev: move bus removal
to object_unparent) made the assumption that at unparenting time
parent_bus is not NULL. This assumption is unjustified since
object_unparent() may well be called directly after object_initialize(),
without any qdev_set_parent_bus().

This did not cause any issues yet because qdev_[try_]create() does call
qdev_set_parent_bus(), falling back to SysBus if unsupplied.

While at it, ensure that this new function uses the device_ prefix and
make the name more neutral in light of this semantic change.

Reported-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
---
 Planning to insert this before the final CPU-as-a-device patch on qom-cpu,
 to avoid a regression for, e.g., -cpu Haswell,enforce if unsupported by host.

 This supersedes my cosmetic patch in the "QOM realize, device-only" series:

 v1 -> v2:
 * Make bus removal conditional on parent bus
 * Rename function further

 hw/qdev.c |    8 +++++---
 1 Datei geändert, 5 Zeilen hinzugefügt(+), 3 Zeilen entfernt(-)

diff --git a/hw/qdev.c b/hw/qdev.c
index f2c2484..e2a5c57 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -698,16 +698,18 @@ static void device_class_base_init(ObjectClass *class, void *data)
     klass->props = NULL;
 }
 
-static void qdev_remove_from_bus(Object *obj)
+static void device_unparent(Object *obj)
 {
     DeviceState *dev = DEVICE(obj);
 
-    bus_remove_child(dev->parent_bus, dev);
+    if (dev->parent_bus != NULL) {
+        bus_remove_child(dev->parent_bus, dev);
+    }
 }
 
 static void device_class_init(ObjectClass *class, void *data)
 {
-    class->unparent = qdev_remove_from_bus;
+    class->unparent = device_unparent;
 }
 
 void device_reset(DeviceState *dev)
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH v2] qdev: Don't assume existence of parent bus on unparenting
  2013-01-04 17:34 [Qemu-devel] [PATCH v2] qdev: Don't assume existence of parent bus on unparenting Andreas Färber
@ 2013-01-07 13:47 ` Igor Mammedov
  2013-01-07 14:02   ` Andreas Färber
  0 siblings, 1 reply; 3+ messages in thread
From: Igor Mammedov @ 2013-01-07 13:47 UTC (permalink / raw)
  To: Andreas Färber; +Cc: Paolo Bonzini, qemu-devel, anthony, ehabkost

On Fri,  4 Jan 2013 18:34:40 +0100
Andreas Färber <afaerber@suse.de> wrote:

> Commit 667d22d1ae59da46b4c1fbd094ca61145f19b8c3 (qdev: move bus removal
> to object_unparent) made the assumption that at unparenting time
> parent_bus is not NULL. This assumption is unjustified since
> object_unparent() may well be called directly after object_initialize(),
> without any qdev_set_parent_bus().
> 
> This did not cause any issues yet because qdev_[try_]create() does call
> qdev_set_parent_bus(), falling back to SysBus if unsupplied.
> 
> While at it, ensure that this new function uses the device_ prefix and
> make the name more neutral in light of this semantic change.
> 
> Reported-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Andreas Färber <afaerber@suse.de>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  Planning to insert this before the final CPU-as-a-device patch on qom-cpu,
>  to avoid a regression for, e.g., -cpu Haswell,enforce if unsupported by host.
> 
>  This supersedes my cosmetic patch in the "QOM realize, device-only" series:
> 
>  v1 -> v2:
>  * Make bus removal conditional on parent bus
>  * Rename function further
> 
>  hw/qdev.c |    8 +++++---
>  1 Datei geändert, 5 Zeilen hinzugefügt(+), 3 Zeilen entfernt(-)
> 
> diff --git a/hw/qdev.c b/hw/qdev.c
> index f2c2484..e2a5c57 100644
> --- a/hw/qdev.c
> +++ b/hw/qdev.c
> @@ -698,16 +698,18 @@ static void device_class_base_init(ObjectClass *class, void *data)
>      klass->props = NULL;
>  }
>  
> -static void qdev_remove_from_bus(Object *obj)
> +static void device_unparent(Object *obj)
>  {
>      DeviceState *dev = DEVICE(obj);
>  
> -    bus_remove_child(dev->parent_bus, dev);
> +    if (dev->parent_bus != NULL) {
> +        bus_remove_child(dev->parent_bus, dev);
> +    }
>  }
>  
>  static void device_class_init(ObjectClass *class, void *data)
>  {
> -    class->unparent = qdev_remove_from_bus;
> +    class->unparent = device_unparent;
>  }
>  
>  void device_reset(DeviceState *dev)
> -- 
> 1.7.10.4
> 
>
Works for me,

Tested-By: Igor Mammedov <imammedo@redhat.com>

-- 
Regards,
  Igor

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH v2] qdev: Don't assume existence of parent bus on unparenting
  2013-01-07 13:47 ` Igor Mammedov
@ 2013-01-07 14:02   ` Andreas Färber
  0 siblings, 0 replies; 3+ messages in thread
From: Andreas Färber @ 2013-01-07 14:02 UTC (permalink / raw)
  To: Igor Mammedov; +Cc: Paolo Bonzini, qemu-devel, anthony, ehabkost

Am 07.01.2013 14:47, schrieb Igor Mammedov:
> On Fri,  4 Jan 2013 18:34:40 +0100
> Andreas Färber <afaerber@suse.de> wrote:
> 
>> Commit 667d22d1ae59da46b4c1fbd094ca61145f19b8c3 (qdev: move bus removal
>> to object_unparent) made the assumption that at unparenting time
>> parent_bus is not NULL. This assumption is unjustified since
>> object_unparent() may well be called directly after object_initialize(),
>> without any qdev_set_parent_bus().
>>
>> This did not cause any issues yet because qdev_[try_]create() does call
>> qdev_set_parent_bus(), falling back to SysBus if unsupplied.
>>
>> While at it, ensure that this new function uses the device_ prefix and
>> make the name more neutral in light of this semantic change.
>>
>> Reported-by: Eduardo Habkost <ehabkost@redhat.com>
>> Signed-off-by: Andreas Färber <afaerber@suse.de>
>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>  Planning to insert this before the final CPU-as-a-device patch on qom-cpu,
>>  to avoid a regression for, e.g., -cpu Haswell,enforce if unsupported by host.
>>
>>  This supersedes my cosmetic patch in the "QOM realize, device-only" series:
>>
>>  v1 -> v2:
>>  * Make bus removal conditional on parent bus
>>  * Rename function further
>>
>>  hw/qdev.c |    8 +++++---
>>  1 Datei geändert, 5 Zeilen hinzugefügt(+), 3 Zeilen entfernt(-)
>>
>> diff --git a/hw/qdev.c b/hw/qdev.c
>> index f2c2484..e2a5c57 100644
>> --- a/hw/qdev.c
>> +++ b/hw/qdev.c
>> @@ -698,16 +698,18 @@ static void device_class_base_init(ObjectClass *class, void *data)
>>      klass->props = NULL;
>>  }
>>  
>> -static void qdev_remove_from_bus(Object *obj)
>> +static void device_unparent(Object *obj)
>>  {
>>      DeviceState *dev = DEVICE(obj);
>>  
>> -    bus_remove_child(dev->parent_bus, dev);
>> +    if (dev->parent_bus != NULL) {
>> +        bus_remove_child(dev->parent_bus, dev);
>> +    }
>>  }
>>  
>>  static void device_class_init(ObjectClass *class, void *data)
>>  {
>> -    class->unparent = qdev_remove_from_bus;
>> +    class->unparent = device_unparent;
>>  }
>>  
>>  void device_reset(DeviceState *dev)
>> -- 
>> 1.7.10.4
>>
>>
> Works for me,
> 
> Tested-By: Igor Mammedov <imammedo@redhat.com>

Thanks, inserted into qom-cpu queue:
https://github.com/afaerber/qemu-cpu/commits/qom-cpu

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] 3+ messages in thread

end of thread, other threads:[~2013-01-07 14:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-04 17:34 [Qemu-devel] [PATCH v2] qdev: Don't assume existence of parent bus on unparenting Andreas Färber
2013-01-07 13:47 ` Igor Mammedov
2013-01-07 14:02   ` Andreas Färber

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).