Patchwork [v2,13/18] dev: add an anonymous peripheral container

login
register
mail settings
Submitter Anthony Liguori
Date Dec. 2, 2011, 8:20 p.m.
Message ID <1322857256-14951-14-git-send-email-aliguori@us.ibm.com>
Download mbox | patch
Permalink /patch/128967/
State New
Headers show

Comments

Anthony Liguori - Dec. 2, 2011, 8:20 p.m.
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
---
 hw/qdev.c |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)
Kevin Wolf - Dec. 8, 2011, 4:27 p.m.
Am 02.12.2011 21:20, schrieb Anthony Liguori:
> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
> ---
>  hw/qdev.c |   21 ++++++++++++++++++++-
>  1 files changed, 20 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/qdev.c b/hw/qdev.c
> index af4c6a2..5348f26 100644
> --- a/hw/qdev.c
> +++ b/hw/qdev.c
> @@ -240,6 +240,19 @@ static DeviceState *qdev_get_peripheral(void)
>      return dev;
>  }
>  
> +static DeviceState *qdev_get_peripheral_anon(void)
> +{
> +    static DeviceState *dev;
> +
> +    if (dev == NULL) {
> +        dev = qdev_create(NULL, "container");
> +        qdev_property_add_child(qdev_get_root(), "peripheral-anon", dev, NULL);
> +        qdev_init_nofail(dev);
> +    }
> +
> +    return dev;
> +}
> +
>  DeviceState *qdev_device_add(QemuOpts *opts)
>  {
>      const char *driver, *path, *id;
> @@ -292,7 +305,13 @@ DeviceState *qdev_device_add(QemuOpts *opts)
>      if (id) {
>          qdev->id = id;
>          qdev_property_add_child(qdev_get_peripheral(), qdev->id, qdev, NULL);
> -    }
> +    } else {
> +        static int anon_count;
> +        gchar *name = g_strdup_printf("device[%d]", anon_count++);

Does any code depend on this name? If not, I would suggest making it a
bit more convenient for users: g_strdump_printf("%s[%d]", info->name,
info->anon_count++)

Kevin
Anthony Liguori - Dec. 8, 2011, 4:44 p.m.
On 12/08/2011 10:27 AM, Kevin Wolf wrote:
> Am 02.12.2011 21:20, schrieb Anthony Liguori:
>> Signed-off-by: Anthony Liguori<aliguori@us.ibm.com>
>> ---
>>   hw/qdev.c |   21 ++++++++++++++++++++-
>>   1 files changed, 20 insertions(+), 1 deletions(-)
>>
>> diff --git a/hw/qdev.c b/hw/qdev.c
>> index af4c6a2..5348f26 100644
>> --- a/hw/qdev.c
>> +++ b/hw/qdev.c
>> @@ -240,6 +240,19 @@ static DeviceState *qdev_get_peripheral(void)
>>       return dev;
>>   }
>>
>> +static DeviceState *qdev_get_peripheral_anon(void)
>> +{
>> +    static DeviceState *dev;
>> +
>> +    if (dev == NULL) {
>> +        dev = qdev_create(NULL, "container");
>> +        qdev_property_add_child(qdev_get_root(), "peripheral-anon", dev, NULL);
>> +        qdev_init_nofail(dev);
>> +    }
>> +
>> +    return dev;
>> +}
>> +
>>   DeviceState *qdev_device_add(QemuOpts *opts)
>>   {
>>       const char *driver, *path, *id;
>> @@ -292,7 +305,13 @@ DeviceState *qdev_device_add(QemuOpts *opts)
>>       if (id) {
>>           qdev->id = id;
>>           qdev_property_add_child(qdev_get_peripheral(), qdev->id, qdev, NULL);
>> -    }
>> +    } else {
>> +        static int anon_count;
>> +        gchar *name = g_strdup_printf("device[%d]", anon_count++);
>
> Does any code depend on this name? If not, I would suggest making it a
> bit more convenient for users: g_strdump_printf("%s[%d]", info->name,
> info->anon_count++)

Nothing does and that's a great suggestion, thanks!

Regards,

Anthony Liguori

>
> Kevin
>

Patch

diff --git a/hw/qdev.c b/hw/qdev.c
index af4c6a2..5348f26 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -240,6 +240,19 @@  static DeviceState *qdev_get_peripheral(void)
     return dev;
 }
 
+static DeviceState *qdev_get_peripheral_anon(void)
+{
+    static DeviceState *dev;
+
+    if (dev == NULL) {
+        dev = qdev_create(NULL, "container");
+        qdev_property_add_child(qdev_get_root(), "peripheral-anon", dev, NULL);
+        qdev_init_nofail(dev);
+    }
+
+    return dev;
+}
+
 DeviceState *qdev_device_add(QemuOpts *opts)
 {
     const char *driver, *path, *id;
@@ -292,7 +305,13 @@  DeviceState *qdev_device_add(QemuOpts *opts)
     if (id) {
         qdev->id = id;
         qdev_property_add_child(qdev_get_peripheral(), qdev->id, qdev, NULL);
-    }
+    } else {
+        static int anon_count;
+        gchar *name = g_strdup_printf("device[%d]", anon_count++);
+        qdev_property_add_child(qdev_get_peripheral_anon(), name,
+                                qdev, NULL);
+        g_free(name);
+    }        
     if (qemu_opt_foreach(opts, set_property, qdev, 1) != 0) {
         qdev_free(qdev);
         return NULL;