qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct
@ 2014-10-07  6:33 arei.gonglei
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 1/5] qdev: add description field in " arei.gonglei
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: arei.gonglei @ 2014-10-07  6:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, mst, luonengjun, armbru, peter.huangpeng, Gonglei,
	pbonzini, lcapitulino, afaerber

From: Gonglei <arei.gonglei@huawei.com>

v5 -> v4:
 1. add some improvements by Michael's suggtion, Thanks. (Michael)
 2. add 'Reviewed-by' tag (Paolo, Michael, Eric)

v4 -> v3:
 1. rebase on qom-next tree (Andreas)
 2. fix memory leak in PATCH 2, move object_property_set_description calling
    in object_property_add_alias() from PATCH 3 to PATCH 2. (Paolo)
 3. drop "?:" in PATCH 2, call g_strdup() directly
 4. rework PATCH 4, change description as optional field,
    drop "?:" conditional express (Eric)
 
v3 -> v2:
 1. add a new "description" field to DevicePropertyInfo, and format
    it in qdev_device_help() in PATCH 6 (Paolo)

v2 -> v1:
 1. rename "fail" label to "out" in PATCH 1 (Andreas)
 2. improve descriptions in PATCH 3 (Paolo, adding Signed-off-by Paolo in this patch)
 3. rework PATCH 5, set description at qdev_property_add_static(),
    then copy the description of target_obj.property. (Paolo)
 4. free description filed of ObjectProperty avoid memory leak in PATCH 4.

This patch series based on qom-next tree:
 https://github.com/afaerber/qemu-cpu/commits/qom-next

Add a description field in both ObjectProperty and PropertyInfo struct.
The descriptions can serve as documentation in the code,
and they can be used to provide better help. For example:

Before this patch series:

$./qemu-system-x86_64 -device virtio-blk-pci,?

virtio-blk-pci.iothread=link<iothread>
virtio-blk-pci.x-data-plane=bool
virtio-blk-pci.scsi=bool
virtio-blk-pci.config-wce=bool
virtio-blk-pci.serial=str
virtio-blk-pci.secs=uint32
virtio-blk-pci.heads=uint32
virtio-blk-pci.cyls=uint32
virtio-blk-pci.discard_granularity=uint32
virtio-blk-pci.bootindex=int32
virtio-blk-pci.opt_io_size=uint32
virtio-blk-pci.min_io_size=uint16
virtio-blk-pci.physical_block_size=uint16
virtio-blk-pci.logical_block_size=uint16
virtio-blk-pci.drive=str
virtio-blk-pci.virtio-backend=child<virtio-blk-device>
virtio-blk-pci.command_serr_enable=on/off
virtio-blk-pci.multifunction=on/off
virtio-blk-pci.rombar=uint32
virtio-blk-pci.romfile=str
virtio-blk-pci.addr=pci-devfn
virtio-blk-pci.event_idx=on/off
virtio-blk-pci.indirect_desc=on/off
virtio-blk-pci.vectors=uint32
virtio-blk-pci.ioeventfd=on/off
virtio-blk-pci.class=uint32

After:

$./qemu-system-x86_64 -device virtio-blk-pci,?

virtio-blk-pci.iothread=link<iothread>
virtio-blk-pci.x-data-plane=bool (on/off)
virtio-blk-pci.scsi=bool (on/off)
virtio-blk-pci.config-wce=bool (on/off)
virtio-blk-pci.serial=str
virtio-blk-pci.secs=uint32
virtio-blk-pci.heads=uint32
virtio-blk-pci.cyls=uint32
virtio-blk-pci.discard_granularity=uint32
virtio-blk-pci.bootindex=int32
virtio-blk-pci.opt_io_size=uint32
virtio-blk-pci.min_io_size=uint16
virtio-blk-pci.physical_block_size=uint16 (A power of two between 512 and 32768)
virtio-blk-pci.logical_block_size=uint16 (A power of two between 512 and 32768)
virtio-blk-pci.drive=str (ID of a drive to use as a backend)
virtio-blk-pci.virtio-backend=child<virtio-blk-device>
virtio-blk-pci.command_serr_enable=bool (on/off)
virtio-blk-pci.multifunction=bool (on/off)
virtio-blk-pci.rombar=uint32
virtio-blk-pci.romfile=str
virtio-blk-pci.addr=int32 (Slot and optional function number, example: 06.0 or 06)
virtio-blk-pci.event_idx=bool (on/off)
virtio-blk-pci.indirect_desc=bool (on/off)
virtio-blk-pci.vectors=uint32
virtio-blk-pci.ioeventfd=bool (on/off)
virtio-blk-pci.class=uint32


Gonglei (5):
  qdev: add description field in PropertyInfo struct
  qom: add description field in ObjectProperty struct
  qdev: set the object property's description to the qdev property's.
  qmp: print descriptions of object properties
  qdev: drop legacy_name from qdev properties

 hw/core/qdev-properties-system.c |  8 ++++----
 hw/core/qdev-properties.c        | 14 ++++++++------
 hw/core/qdev.c                   |  5 +++++
 include/hw/qdev-core.h           |  2 +-
 include/qom/object.h             | 14 ++++++++++++++
 qapi-schema.json                 |  4 +++-
 qdev-monitor.c                   |  7 ++++++-
 qmp.c                            | 13 ++++++++++---
 qom/object.c                     | 20 ++++++++++++++++++++
 target-ppc/translate_init.c      |  2 +-
 10 files changed, 72 insertions(+), 17 deletions(-)

-- 
1.7.12.4

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

* [Qemu-devel] [PATCH v5 1/5] qdev: add description field in PropertyInfo struct
  2014-10-07  6:33 [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
@ 2014-10-07  6:33 ` arei.gonglei
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 2/5] qom: add description field in ObjectProperty struct arei.gonglei
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: arei.gonglei @ 2014-10-07  6:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, mst, luonengjun, armbru, peter.huangpeng, Gonglei,
	pbonzini, lcapitulino, afaerber

From: Gonglei <arei.gonglei@huawei.com>

The descriptions can serve as documentation in the code,
and they can be used to provide better help.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/core/qdev-properties-system.c | 4 ++++
 hw/core/qdev-properties.c        | 8 ++++++++
 include/hw/qdev-core.h           | 1 +
 target-ppc/translate_init.c      | 1 +
 4 files changed, 14 insertions(+)

diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 84caa1d..55b6636 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -113,6 +113,7 @@ static void set_drive(Object *obj, Visitor *v, void *opaque,
 PropertyInfo qdev_prop_drive = {
     .name  = "str",
     .legacy_name  = "drive",
+    .description = "ID of a drive to use as a backend",
     .get   = get_drive,
     .set   = set_drive,
     .release = release_drive,
@@ -170,6 +171,7 @@ static void set_chr(Object *obj, Visitor *v, void *opaque,
 PropertyInfo qdev_prop_chr = {
     .name  = "str",
     .legacy_name  = "chr",
+    .description = "ID of a chardev to use as a backend",
     .get   = get_chr,
     .set   = set_chr,
     .release = release_chr,
@@ -249,6 +251,7 @@ static void set_netdev(Object *obj, Visitor *v, void *opaque,
 PropertyInfo qdev_prop_netdev = {
     .name  = "str",
     .legacy_name  = "netdev",
+    .description = "ID of a netdev to use as a backend",
     .get   = get_netdev,
     .set   = set_netdev,
 };
@@ -329,6 +332,7 @@ static void set_vlan(Object *obj, Visitor *v, void *opaque,
 PropertyInfo qdev_prop_vlan = {
     .name  = "int32",
     .legacy_name  = "vlan",
+    .description = "Integer VLAN id to connect to",
     .print = print_vlan,
     .get   = get_vlan,
     .set   = set_vlan,
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 66556d3..5fc711e 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -121,6 +121,7 @@ static void prop_set_bit(Object *obj, Visitor *v, void *opaque,
 PropertyInfo qdev_prop_bit = {
     .name  = "bool",
     .legacy_name  = "on/off",
+    .description = "on/off",
     .get   = prop_get_bit,
     .set   = prop_set_bit,
 };
@@ -456,6 +457,7 @@ inval:
 PropertyInfo qdev_prop_macaddr = {
     .name  = "str",
     .legacy_name  = "macaddr",
+    .description = "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
     .get   = get_mac,
     .set   = set_mac,
 };
@@ -478,6 +480,8 @@ QEMU_BUILD_BUG_ON(sizeof(BiosAtaTranslation) != sizeof(int));
 PropertyInfo qdev_prop_bios_chs_trans = {
     .name = "BiosAtaTranslation",
     .legacy_name = "bios-chs-trans",
+    .description = "Logical CHS translation algorithm, "
+                   "auto/none/lba/large/rechs",
     .enum_table = BiosAtaTranslation_lookup,
     .get = get_enum,
     .set = set_enum,
@@ -552,6 +556,7 @@ static int print_pci_devfn(DeviceState *dev, Property *prop, char *dest,
 PropertyInfo qdev_prop_pci_devfn = {
     .name  = "int32",
     .legacy_name  = "pci-devfn",
+    .description = "Slot and optional function number, example: 06.0 or 06",
     .print = print_pci_devfn,
     .get   = get_int32,
     .set   = set_pci_devfn,
@@ -599,6 +604,7 @@ static void set_blocksize(Object *obj, Visitor *v, void *opaque,
 PropertyInfo qdev_prop_blocksize = {
     .name  = "uint16",
     .legacy_name  = "blocksize",
+    .description = "A power of two between 512 and 32768",
     .get   = get_uint16,
     .set   = set_blocksize,
 };
@@ -707,6 +713,8 @@ inval:
 PropertyInfo qdev_prop_pci_host_devaddr = {
     .name = "str",
     .legacy_name = "pci-host-devaddr",
+    .description = "Address (bus/device/function) of "
+                   "the host device, example: 04:10.0",
     .get = get_pci_host_devaddr,
     .set = set_pci_host_devaddr,
 };
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 178fee2..31acbe6 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -233,6 +233,7 @@ struct Property {
 struct PropertyInfo {
     const char *name;
     const char *legacy_name;
+    const char *description;
     const char **enum_table;
     int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
     ObjectPropertyAccessor *get;
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 65b840d..0312e04 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -8045,6 +8045,7 @@ static void powerpc_set_compat(Object *obj, Visitor *v,
 static PropertyInfo powerpc_compat_propinfo = {
     .name = "str",
     .legacy_name = "powerpc-server-compat",
+    .description = "compatibility mode, power6/power7/power8",
     .get = powerpc_get_compat,
     .set = powerpc_set_compat,
 };
-- 
1.7.12.4

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

* [Qemu-devel] [PATCH v5 2/5] qom: add description field in ObjectProperty struct
  2014-10-07  6:33 [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 1/5] qdev: add description field in " arei.gonglei
@ 2014-10-07  6:33 ` arei.gonglei
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 3/5] qdev: set the object property's description to the qdev property's arei.gonglei
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: arei.gonglei @ 2014-10-07  6:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, mst, luonengjun, armbru, peter.huangpeng, Gonglei,
	pbonzini, lcapitulino, afaerber

From: Gonglei <arei.gonglei@huawei.com>

The descriptions can serve as documentation in the code,
and they can be used to provide better help.

Copy property descriptions when copying alias properties.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/qom/object.h | 14 ++++++++++++++
 qom/object.c         | 20 ++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/include/qom/object.h b/include/qom/object.h
index 8a05a81..89c3092 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -338,6 +338,7 @@ typedef struct ObjectProperty
 {
     gchar *name;
     gchar *type;
+    gchar *description;
     ObjectPropertyAccessor *get;
     ObjectPropertyAccessor *set;
     ObjectPropertyResolve *resolve;
@@ -1275,6 +1276,19 @@ void object_property_add_alias(Object *obj, const char *name,
                                Error **errp);
 
 /**
+ * object_property_set_description:
+ * @obj: the object owning the property
+ * @name: the name of the property
+ * @description: the description of the property on the object
+ * @errp: if an error occurs, a pointer to an area to store the error
+ *
+ * Set an object property's description.
+ *
+ */
+void object_property_set_description(Object *obj, const char *name,
+                                     const char *description, Error **errp);
+
+/**
  * object_child_foreach:
  * @obj: the object whose children will be navigated
  * @fn: the iterator function to be called
diff --git a/qom/object.c b/qom/object.c
index 575291f..a751367 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -369,6 +369,7 @@ static void object_property_del_all(Object *obj)
 
         g_free(prop->name);
         g_free(prop->type);
+        g_free(prop->description);
         g_free(prop);
     }
 }
@@ -803,6 +804,7 @@ void object_property_del(Object *obj, const char *name, Error **errp)
 
     g_free(prop->name);
     g_free(prop->type);
+    g_free(prop->description);
     g_free(prop);
 }
 
@@ -1672,10 +1674,28 @@ void object_property_add_alias(Object *obj, const char *name,
     }
     op->resolve = property_resolve_alias;
 
+    object_property_set_description(obj, name,
+                                    target_prop->description,
+                                    &error_abort);
+
 out:
     g_free(prop_type);
 }
 
+void object_property_set_description(Object *obj, const char *name,
+                                     const char *description, Error **errp)
+{
+    ObjectProperty *op;
+
+    op = object_property_find(obj, name, errp);
+    if (!op) {
+        return;
+    }
+
+    g_free(op->description);
+    op->description = g_strdup(description);
+}
+
 static void object_instance_init(Object *obj)
 {
     object_property_add_str(obj, "type", qdev_get_type, NULL, NULL);
-- 
1.7.12.4

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

* [Qemu-devel] [PATCH v5 3/5] qdev: set the object property's description to the qdev property's.
  2014-10-07  6:33 [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 1/5] qdev: add description field in " arei.gonglei
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 2/5] qom: add description field in ObjectProperty struct arei.gonglei
@ 2014-10-07  6:33 ` arei.gonglei
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 4/5] qmp: print descriptions of object properties arei.gonglei
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: arei.gonglei @ 2014-10-07  6:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, mst, luonengjun, armbru, peter.huangpeng, Gonglei,
	pbonzini, lcapitulino, afaerber

From: Gonglei <arei.gonglei@huawei.com>

Set all static qdev properties' descriptions to object property's
description.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/core/qdev.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index fcb1638..a270a91 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -766,6 +766,11 @@ void qdev_property_add_static(DeviceState *dev, Property *prop,
         error_propagate(errp, local_err);
         return;
     }
+
+    object_property_set_description(obj, prop->name,
+                                    prop->info->description,
+                                    &error_abort);
+
     if (prop->qtype == QTYPE_NONE) {
         return;
     }
-- 
1.7.12.4

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

* [Qemu-devel] [PATCH v5 4/5] qmp: print descriptions of object properties
  2014-10-07  6:33 [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
                   ` (2 preceding siblings ...)
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 3/5] qdev: set the object property's description to the qdev property's arei.gonglei
@ 2014-10-07  6:33 ` arei.gonglei
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 5/5] qdev: drop legacy_name from qdev properties arei.gonglei
  2014-10-07 22:22 ` [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct Paolo Bonzini
  5 siblings, 0 replies; 12+ messages in thread
From: arei.gonglei @ 2014-10-07  6:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, mst, luonengjun, armbru, peter.huangpeng, Gonglei,
	pbonzini, lcapitulino, afaerber

From: Gonglei <arei.gonglei@huawei.com>

Add a new "description" field to DevicePropertyInfo.
The descriptions can serve as documentation in the code,
and they can be used to provide better help. For example:

$./qemu-system-x86_64 -device virtio-blk-pci,?

Before this patch:

virtio-blk-pci.iothread=link<iothread>
virtio-blk-pci.x-data-plane=bool
virtio-blk-pci.scsi=bool
virtio-blk-pci.config-wce=bool
virtio-blk-pci.serial=str
virtio-blk-pci.secs=uint32
virtio-blk-pci.heads=uint32
virtio-blk-pci.cyls=uint32
virtio-blk-pci.discard_granularity=uint32
virtio-blk-pci.bootindex=int32
virtio-blk-pci.opt_io_size=uint32
virtio-blk-pci.min_io_size=uint16
virtio-blk-pci.physical_block_size=uint16
virtio-blk-pci.logical_block_size=uint16
virtio-blk-pci.drive=str
virtio-blk-pci.virtio-backend=child<virtio-blk-device>
virtio-blk-pci.command_serr_enable=on/off
virtio-blk-pci.multifunction=on/off
virtio-blk-pci.rombar=uint32
virtio-blk-pci.romfile=str
virtio-blk-pci.addr=pci-devfn
virtio-blk-pci.event_idx=on/off
virtio-blk-pci.indirect_desc=on/off
virtio-blk-pci.vectors=uint32
virtio-blk-pci.ioeventfd=on/off
virtio-blk-pci.class=uint32

After:

virtio-blk-pci.iothread=link<iothread>
virtio-blk-pci.x-data-plane=bool (on/off)
virtio-blk-pci.scsi=bool (on/off)
virtio-blk-pci.config-wce=bool (on/off)
virtio-blk-pci.serial=str
virtio-blk-pci.secs=uint32
virtio-blk-pci.heads=uint32
virtio-blk-pci.cyls=uint32
virtio-blk-pci.discard_granularity=uint32
virtio-blk-pci.bootindex=int32
virtio-blk-pci.opt_io_size=uint32
virtio-blk-pci.min_io_size=uint16
virtio-blk-pci.physical_block_size=uint16 (A power of two between 512 and 32768)
virtio-blk-pci.logical_block_size=uint16 (A power of two between 512 and 32768)
virtio-blk-pci.drive=str (ID of a drive to use as a backend)
virtio-blk-pci.virtio-backend=child<virtio-blk-device>
virtio-blk-pci.command_serr_enable=bool (on/off)
virtio-blk-pci.multifunction=bool (on/off)
virtio-blk-pci.rombar=uint32
virtio-blk-pci.romfile=str
virtio-blk-pci.addr=int32 (Slot and optional function number, example: 06.0 or 06)
virtio-blk-pci.event_idx=bool (on/off)
virtio-blk-pci.indirect_desc=bool (on/off)
virtio-blk-pci.vectors=uint32
virtio-blk-pci.ioeventfd=bool (on/off)
virtio-blk-pci.class=uint32

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
---
 qapi-schema.json |  4 +++-
 qdev-monitor.c   |  7 ++++++-
 qmp.c            | 13 ++++++++++---
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/qapi-schema.json b/qapi-schema.json
index 4bfaf20..d95a820 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -1615,11 +1615,13 @@
 #
 # @name: the name of the property
 # @type: the typename of the property
+# @description: #optional if specified, the description of the property.
+#               (since 2.2)
 #
 # Since: 1.2
 ##
 { 'type': 'DevicePropertyInfo',
-  'data': { 'name': 'str', 'type': 'str' } }
+  'data': { 'name': 'str', 'type': 'str', '*description': 'str' } }
 
 ##
 # @device-list-properties:
diff --git a/qdev-monitor.c b/qdev-monitor.c
index 5ec6606..6a0c7c8 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -213,9 +213,14 @@ int qdev_device_help(QemuOpts *opts)
     }
 
     for (prop = prop_list; prop; prop = prop->next) {
-        error_printf("%s.%s=%s\n", driver,
+        error_printf("%s.%s=%s", driver,
                      prop->value->name,
                      prop->value->type);
+        if (prop->value->has_description) {
+            error_printf(" (%s)\n", prop->value->description);
+        } else {
+            error_printf("\n");
+        }
     }
 
     qapi_free_DevicePropertyInfoList(prop_list);
diff --git a/qmp.c b/qmp.c
index c6767c4..0b4f131 100644
--- a/qmp.c
+++ b/qmp.c
@@ -442,7 +442,8 @@ ObjectTypeInfoList *qmp_qom_list_types(bool has_implements,
  */
 static DevicePropertyInfo *make_device_property_info(ObjectClass *klass,
                                                      const char *name,
-                                                     const char *default_type)
+                                                     const char *default_type,
+                                                     const char *description)
 {
     DevicePropertyInfo *info;
     Property *prop;
@@ -465,7 +466,9 @@ static DevicePropertyInfo *make_device_property_info(ObjectClass *klass,
 
             info = g_malloc0(sizeof(*info));
             info->name = g_strdup(prop->name);
-            info->type = g_strdup(prop->info->legacy_name ?: prop->info->name);
+            info->type = g_strdup(prop->info->name);
+            info->has_description = !!prop->info->description;
+            info->description = g_strdup(prop->info->description);
             return info;
         }
         klass = object_class_get_parent(klass);
@@ -475,6 +478,9 @@ static DevicePropertyInfo *make_device_property_info(ObjectClass *klass,
     info = g_malloc0(sizeof(*info));
     info->name = g_strdup(name);
     info->type = g_strdup(default_type);
+    info->has_description = !!description;
+    info->description = g_strdup(description);
+
     return info;
 }
 
@@ -521,7 +527,8 @@ DevicePropertyInfoList *qmp_device_list_properties(const char *typename,
             continue;
         }
 
-        info = make_device_property_info(klass, prop->name, prop->type);
+        info = make_device_property_info(klass, prop->name, prop->type,
+                                         prop->description);
         if (!info) {
             continue;
         }
-- 
1.7.12.4

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

* [Qemu-devel] [PATCH v5 5/5] qdev: drop legacy_name from qdev properties
  2014-10-07  6:33 [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
                   ` (3 preceding siblings ...)
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 4/5] qmp: print descriptions of object properties arei.gonglei
@ 2014-10-07  6:33 ` arei.gonglei
  2014-10-07 22:22 ` [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct Paolo Bonzini
  5 siblings, 0 replies; 12+ messages in thread
From: arei.gonglei @ 2014-10-07  6:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, mst, luonengjun, armbru, peter.huangpeng, Gonglei,
	pbonzini, lcapitulino, afaerber

From: Gonglei <arei.gonglei@huawei.com>

The legacy_name is useless now, the better help
information provided by description field of property.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/core/qdev-properties-system.c | 4 ----
 hw/core/qdev-properties.c        | 6 ------
 include/hw/qdev-core.h           | 1 -
 target-ppc/translate_init.c      | 1 -
 4 files changed, 12 deletions(-)

diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 55b6636..f2bd954 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -112,7 +112,6 @@ static void set_drive(Object *obj, Visitor *v, void *opaque,
 
 PropertyInfo qdev_prop_drive = {
     .name  = "str",
-    .legacy_name  = "drive",
     .description = "ID of a drive to use as a backend",
     .get   = get_drive,
     .set   = set_drive,
@@ -170,7 +169,6 @@ static void set_chr(Object *obj, Visitor *v, void *opaque,
 
 PropertyInfo qdev_prop_chr = {
     .name  = "str",
-    .legacy_name  = "chr",
     .description = "ID of a chardev to use as a backend",
     .get   = get_chr,
     .set   = set_chr,
@@ -250,7 +248,6 @@ static void set_netdev(Object *obj, Visitor *v, void *opaque,
 
 PropertyInfo qdev_prop_netdev = {
     .name  = "str",
-    .legacy_name  = "netdev",
     .description = "ID of a netdev to use as a backend",
     .get   = get_netdev,
     .set   = set_netdev,
@@ -331,7 +328,6 @@ static void set_vlan(Object *obj, Visitor *v, void *opaque,
 
 PropertyInfo qdev_prop_vlan = {
     .name  = "int32",
-    .legacy_name  = "vlan",
     .description = "Integer VLAN id to connect to",
     .print = print_vlan,
     .get   = get_vlan,
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 5fc711e..2ed995f 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -120,7 +120,6 @@ static void prop_set_bit(Object *obj, Visitor *v, void *opaque,
 
 PropertyInfo qdev_prop_bit = {
     .name  = "bool",
-    .legacy_name  = "on/off",
     .description = "on/off",
     .get   = prop_get_bit,
     .set   = prop_set_bit,
@@ -456,7 +455,6 @@ inval:
 
 PropertyInfo qdev_prop_macaddr = {
     .name  = "str",
-    .legacy_name  = "macaddr",
     .description = "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
     .get   = get_mac,
     .set   = set_mac,
@@ -479,7 +477,6 @@ QEMU_BUILD_BUG_ON(sizeof(BiosAtaTranslation) != sizeof(int));
 
 PropertyInfo qdev_prop_bios_chs_trans = {
     .name = "BiosAtaTranslation",
-    .legacy_name = "bios-chs-trans",
     .description = "Logical CHS translation algorithm, "
                    "auto/none/lba/large/rechs",
     .enum_table = BiosAtaTranslation_lookup,
@@ -555,7 +552,6 @@ static int print_pci_devfn(DeviceState *dev, Property *prop, char *dest,
 
 PropertyInfo qdev_prop_pci_devfn = {
     .name  = "int32",
-    .legacy_name  = "pci-devfn",
     .description = "Slot and optional function number, example: 06.0 or 06",
     .print = print_pci_devfn,
     .get   = get_int32,
@@ -603,7 +599,6 @@ static void set_blocksize(Object *obj, Visitor *v, void *opaque,
 
 PropertyInfo qdev_prop_blocksize = {
     .name  = "uint16",
-    .legacy_name  = "blocksize",
     .description = "A power of two between 512 and 32768",
     .get   = get_uint16,
     .set   = set_blocksize,
@@ -712,7 +707,6 @@ inval:
 
 PropertyInfo qdev_prop_pci_host_devaddr = {
     .name = "str",
-    .legacy_name = "pci-host-devaddr",
     .description = "Address (bus/device/function) of "
                    "the host device, example: 04:10.0",
     .get = get_pci_host_devaddr,
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 31acbe6..7fcd415 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -232,7 +232,6 @@ struct Property {
 
 struct PropertyInfo {
     const char *name;
-    const char *legacy_name;
     const char *description;
     const char **enum_table;
     int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c
index 0312e04..33fb4cc 100644
--- a/target-ppc/translate_init.c
+++ b/target-ppc/translate_init.c
@@ -8044,7 +8044,6 @@ static void powerpc_set_compat(Object *obj, Visitor *v,
 
 static PropertyInfo powerpc_compat_propinfo = {
     .name = "str",
-    .legacy_name = "powerpc-server-compat",
     .description = "compatibility mode, power6/power7/power8",
     .get = powerpc_get_compat,
     .set = powerpc_set_compat,
-- 
1.7.12.4

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

* Re: [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct
  2014-10-07  6:33 [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
                   ` (4 preceding siblings ...)
  2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 5/5] qdev: drop legacy_name from qdev properties arei.gonglei
@ 2014-10-07 22:22 ` Paolo Bonzini
  2014-10-08 10:45   ` Gonglei
  5 siblings, 1 reply; 12+ messages in thread
From: Paolo Bonzini @ 2014-10-07 22:22 UTC (permalink / raw)
  To: afaerber
  Cc: weidong.huang, mst, luonengjun, qemu-devel, armbru, arei.gonglei,
	peter.huangpeng, lcapitulino

Il 07/10/2014 08:33, arei.gonglei@huawei.com ha scritto:
> From: Gonglei <arei.gonglei@huawei.com>
> 
> v5 -> v4:
>  1. add some improvements by Michael's suggtion, Thanks. (Michael)
>  2. add 'Reviewed-by' tag (Paolo, Michael, Eric)

Andreas, this series depends on patches in qom-next so you'll have to
take it.

Thanks,

Paolo

> v4 -> v3:
>  1. rebase on qom-next tree (Andreas)
>  2. fix memory leak in PATCH 2, move object_property_set_description calling
>     in object_property_add_alias() from PATCH 3 to PATCH 2. (Paolo)
>  3. drop "?:" in PATCH 2, call g_strdup() directly
>  4. rework PATCH 4, change description as optional field,
>     drop "?:" conditional express (Eric)
>  
> v3 -> v2:
>  1. add a new "description" field to DevicePropertyInfo, and format
>     it in qdev_device_help() in PATCH 6 (Paolo)
> 
> v2 -> v1:
>  1. rename "fail" label to "out" in PATCH 1 (Andreas)
>  2. improve descriptions in PATCH 3 (Paolo, adding Signed-off-by Paolo in this patch)
>  3. rework PATCH 5, set description at qdev_property_add_static(),
>     then copy the description of target_obj.property. (Paolo)
>  4. free description filed of ObjectProperty avoid memory leak in PATCH 4.
> 
> This patch series based on qom-next tree:
>  https://github.com/afaerber/qemu-cpu/commits/qom-next
> 
> Add a description field in both ObjectProperty and PropertyInfo struct.
> The descriptions can serve as documentation in the code,
> and they can be used to provide better help. For example:
> 
> Before this patch series:
> 
> $./qemu-system-x86_64 -device virtio-blk-pci,?
> 
> virtio-blk-pci.iothread=link<iothread>
> virtio-blk-pci.x-data-plane=bool
> virtio-blk-pci.scsi=bool
> virtio-blk-pci.config-wce=bool
> virtio-blk-pci.serial=str
> virtio-blk-pci.secs=uint32
> virtio-blk-pci.heads=uint32
> virtio-blk-pci.cyls=uint32
> virtio-blk-pci.discard_granularity=uint32
> virtio-blk-pci.bootindex=int32
> virtio-blk-pci.opt_io_size=uint32
> virtio-blk-pci.min_io_size=uint16
> virtio-blk-pci.physical_block_size=uint16
> virtio-blk-pci.logical_block_size=uint16
> virtio-blk-pci.drive=str
> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
> virtio-blk-pci.command_serr_enable=on/off
> virtio-blk-pci.multifunction=on/off
> virtio-blk-pci.rombar=uint32
> virtio-blk-pci.romfile=str
> virtio-blk-pci.addr=pci-devfn
> virtio-blk-pci.event_idx=on/off
> virtio-blk-pci.indirect_desc=on/off
> virtio-blk-pci.vectors=uint32
> virtio-blk-pci.ioeventfd=on/off
> virtio-blk-pci.class=uint32
> 
> After:
> 
> $./qemu-system-x86_64 -device virtio-blk-pci,?
> 
> virtio-blk-pci.iothread=link<iothread>
> virtio-blk-pci.x-data-plane=bool (on/off)
> virtio-blk-pci.scsi=bool (on/off)
> virtio-blk-pci.config-wce=bool (on/off)
> virtio-blk-pci.serial=str
> virtio-blk-pci.secs=uint32
> virtio-blk-pci.heads=uint32
> virtio-blk-pci.cyls=uint32
> virtio-blk-pci.discard_granularity=uint32
> virtio-blk-pci.bootindex=int32
> virtio-blk-pci.opt_io_size=uint32
> virtio-blk-pci.min_io_size=uint16
> virtio-blk-pci.physical_block_size=uint16 (A power of two between 512 and 32768)
> virtio-blk-pci.logical_block_size=uint16 (A power of two between 512 and 32768)
> virtio-blk-pci.drive=str (ID of a drive to use as a backend)
> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
> virtio-blk-pci.command_serr_enable=bool (on/off)
> virtio-blk-pci.multifunction=bool (on/off)
> virtio-blk-pci.rombar=uint32
> virtio-blk-pci.romfile=str
> virtio-blk-pci.addr=int32 (Slot and optional function number, example: 06.0 or 06)
> virtio-blk-pci.event_idx=bool (on/off)
> virtio-blk-pci.indirect_desc=bool (on/off)
> virtio-blk-pci.vectors=uint32
> virtio-blk-pci.ioeventfd=bool (on/off)
> virtio-blk-pci.class=uint32
> 
> 
> Gonglei (5):
>   qdev: add description field in PropertyInfo struct
>   qom: add description field in ObjectProperty struct
>   qdev: set the object property's description to the qdev property's.
>   qmp: print descriptions of object properties
>   qdev: drop legacy_name from qdev properties
> 
>  hw/core/qdev-properties-system.c |  8 ++++----
>  hw/core/qdev-properties.c        | 14 ++++++++------
>  hw/core/qdev.c                   |  5 +++++
>  include/hw/qdev-core.h           |  2 +-
>  include/qom/object.h             | 14 ++++++++++++++
>  qapi-schema.json                 |  4 +++-
>  qdev-monitor.c                   |  7 ++++++-
>  qmp.c                            | 13 ++++++++++---
>  qom/object.c                     | 20 ++++++++++++++++++++
>  target-ppc/translate_init.c      |  2 +-
>  10 files changed, 72 insertions(+), 17 deletions(-)
> 

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

* Re: [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct
  2014-10-07 22:22 ` [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct Paolo Bonzini
@ 2014-10-08 10:45   ` Gonglei
  2014-10-09 11:51     ` Gonglei
  0 siblings, 1 reply; 12+ messages in thread
From: Gonglei @ 2014-10-08 10:45 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Huangweidong (C), mst@redhat.com, Luonengjun, armbru@redhat.com,
	qemu-devel@nongnu.org, Huangpeng (Peter), lcapitulino@redhat.com,
	afaerber@suse.de

On 2014/10/8 6:22, Paolo Bonzini wrote:

> Il 07/10/2014 08:33, arei.gonglei@huawei.com ha scritto:
>> From: Gonglei <arei.gonglei@huawei.com>
>>
>> v5 -> v4:
>>  1. add some improvements by Michael's suggtion, Thanks. (Michael)
>>  2. add 'Reviewed-by' tag (Paolo, Michael, Eric)
> 
> Andreas, this series depends on patches in qom-next so you'll have to
> take it.
> 

Yes, please. Thanks!

Best regards,
-Gonglei

> Thanks,
> 
> Paolo
> 
>> v4 -> v3:
>>  1. rebase on qom-next tree (Andreas)
>>  2. fix memory leak in PATCH 2, move object_property_set_description calling
>>     in object_property_add_alias() from PATCH 3 to PATCH 2. (Paolo)
>>  3. drop "?:" in PATCH 2, call g_strdup() directly
>>  4. rework PATCH 4, change description as optional field,
>>     drop "?:" conditional express (Eric)
>>  
>> v3 -> v2:
>>  1. add a new "description" field to DevicePropertyInfo, and format
>>     it in qdev_device_help() in PATCH 6 (Paolo)
>>
>> v2 -> v1:
>>  1. rename "fail" label to "out" in PATCH 1 (Andreas)
>>  2. improve descriptions in PATCH 3 (Paolo, adding Signed-off-by Paolo in this patch)
>>  3. rework PATCH 5, set description at qdev_property_add_static(),
>>     then copy the description of target_obj.property. (Paolo)
>>  4. free description filed of ObjectProperty avoid memory leak in PATCH 4.
>>
>> This patch series based on qom-next tree:
>>  https://github.com/afaerber/qemu-cpu/commits/qom-next
>>
>> Add a description field in both ObjectProperty and PropertyInfo struct.
>> The descriptions can serve as documentation in the code,
>> and they can be used to provide better help. For example:
>>
>> Before this patch series:
>>
>> $./qemu-system-x86_64 -device virtio-blk-pci,?
>>
>> virtio-blk-pci.iothread=link<iothread>
>> virtio-blk-pci.x-data-plane=bool
>> virtio-blk-pci.scsi=bool
>> virtio-blk-pci.config-wce=bool
>> virtio-blk-pci.serial=str
>> virtio-blk-pci.secs=uint32
>> virtio-blk-pci.heads=uint32
>> virtio-blk-pci.cyls=uint32
>> virtio-blk-pci.discard_granularity=uint32
>> virtio-blk-pci.bootindex=int32
>> virtio-blk-pci.opt_io_size=uint32
>> virtio-blk-pci.min_io_size=uint16
>> virtio-blk-pci.physical_block_size=uint16
>> virtio-blk-pci.logical_block_size=uint16
>> virtio-blk-pci.drive=str
>> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
>> virtio-blk-pci.command_serr_enable=on/off
>> virtio-blk-pci.multifunction=on/off
>> virtio-blk-pci.rombar=uint32
>> virtio-blk-pci.romfile=str
>> virtio-blk-pci.addr=pci-devfn
>> virtio-blk-pci.event_idx=on/off
>> virtio-blk-pci.indirect_desc=on/off
>> virtio-blk-pci.vectors=uint32
>> virtio-blk-pci.ioeventfd=on/off
>> virtio-blk-pci.class=uint32
>>
>> After:
>>
>> $./qemu-system-x86_64 -device virtio-blk-pci,?
>>
>> virtio-blk-pci.iothread=link<iothread>
>> virtio-blk-pci.x-data-plane=bool (on/off)
>> virtio-blk-pci.scsi=bool (on/off)
>> virtio-blk-pci.config-wce=bool (on/off)
>> virtio-blk-pci.serial=str
>> virtio-blk-pci.secs=uint32
>> virtio-blk-pci.heads=uint32
>> virtio-blk-pci.cyls=uint32
>> virtio-blk-pci.discard_granularity=uint32
>> virtio-blk-pci.bootindex=int32
>> virtio-blk-pci.opt_io_size=uint32
>> virtio-blk-pci.min_io_size=uint16
>> virtio-blk-pci.physical_block_size=uint16 (A power of two between 512 and 32768)
>> virtio-blk-pci.logical_block_size=uint16 (A power of two between 512 and 32768)
>> virtio-blk-pci.drive=str (ID of a drive to use as a backend)
>> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
>> virtio-blk-pci.command_serr_enable=bool (on/off)
>> virtio-blk-pci.multifunction=bool (on/off)
>> virtio-blk-pci.rombar=uint32
>> virtio-blk-pci.romfile=str
>> virtio-blk-pci.addr=int32 (Slot and optional function number, example: 06.0 or 06)
>> virtio-blk-pci.event_idx=bool (on/off)
>> virtio-blk-pci.indirect_desc=bool (on/off)
>> virtio-blk-pci.vectors=uint32
>> virtio-blk-pci.ioeventfd=bool (on/off)
>> virtio-blk-pci.class=uint32
>>
>>
>> Gonglei (5):
>>   qdev: add description field in PropertyInfo struct
>>   qom: add description field in ObjectProperty struct
>>   qdev: set the object property's description to the qdev property's.
>>   qmp: print descriptions of object properties
>>   qdev: drop legacy_name from qdev properties
>>
>>  hw/core/qdev-properties-system.c |  8 ++++----
>>  hw/core/qdev-properties.c        | 14 ++++++++------
>>  hw/core/qdev.c                   |  5 +++++
>>  include/hw/qdev-core.h           |  2 +-
>>  include/qom/object.h             | 14 ++++++++++++++
>>  qapi-schema.json                 |  4 +++-
>>  qdev-monitor.c                   |  7 ++++++-
>>  qmp.c                            | 13 ++++++++++---
>>  qom/object.c                     | 20 ++++++++++++++++++++
>>  target-ppc/translate_init.c      |  2 +-
>>  10 files changed, 72 insertions(+), 17 deletions(-)
>>
> 

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

* Re: [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct
  2014-10-08 10:45   ` Gonglei
@ 2014-10-09 11:51     ` Gonglei
  2014-10-13 10:55       ` Gonglei
  0 siblings, 1 reply; 12+ messages in thread
From: Gonglei @ 2014-10-09 11:51 UTC (permalink / raw)
  To: 'Gonglei', 'Paolo Bonzini', afaerber
  Cc: 'Huangweidong (C)', mst, armbru, 'Luonengjun',
	qemu-devel, 'Huangpeng (Peter)', lcapitulino

Andreas, ping?

Best regards,
-Gonglei

> -----Original Message-----
> From: qemu-devel-bounces+arei.gonglei=hotmail.com@nongnu.org
> [mailto:qemu-devel-bounces+arei.gonglei=hotmail.com@nongnu.org] On
> Behalf Of Gonglei
> Sent: Wednesday, October 08, 2014 6:46 PM
> To: Paolo Bonzini
> Cc: Huangweidong (C); mst@redhat.com; Luonengjun; armbru@redhat.com;
> qemu-devel@nongnu.org; Huangpeng (Peter); lcapitulino@redhat.com;
> afaerber@suse.de
> Subject: Re: [Qemu-devel] [PATCH v5 0/5] add description field in
> ObjectProperty and PropertyInfo struct
> 
> On 2014/10/8 6:22, Paolo Bonzini wrote:
> 
> > Il 07/10/2014 08:33, arei.gonglei@huawei.com ha scritto:
> >> From: Gonglei <arei.gonglei@huawei.com>
> >>
> >> v5 -> v4:
> >>  1. add some improvements by Michael's suggtion, Thanks. (Michael)
> >>  2. add 'Reviewed-by' tag (Paolo, Michael, Eric)
> >
> > Andreas, this series depends on patches in qom-next so you'll have to
> > take it.
> >
> 
> Yes, please. Thanks!
> 
> Best regards,
> -Gonglei
> 
> > Thanks,
> >
> > Paolo
> >
> >> v4 -> v3:
> >>  1. rebase on qom-next tree (Andreas)
> >>  2. fix memory leak in PATCH 2, move object_property_set_description
> calling
> >>     in object_property_add_alias() from PATCH 3 to PATCH 2. (Paolo)
> >>  3. drop "?:" in PATCH 2, call g_strdup() directly
> >>  4. rework PATCH 4, change description as optional field,
> >>     drop "?:" conditional express (Eric)
> >>
> >> v3 -> v2:
> >>  1. add a new "description" field to DevicePropertyInfo, and format
> >>     it in qdev_device_help() in PATCH 6 (Paolo)
> >>
> >> v2 -> v1:
> >>  1. rename "fail" label to "out" in PATCH 1 (Andreas)
> >>  2. improve descriptions in PATCH 3 (Paolo, adding Signed-off-by Paolo in
> this patch)
> >>  3. rework PATCH 5, set description at qdev_property_add_static(),
> >>     then copy the description of target_obj.property. (Paolo)
> >>  4. free description filed of ObjectProperty avoid memory leak in PATCH 4.
> >>
> >> This patch series based on qom-next tree:
> >>  https://github.com/afaerber/qemu-cpu/commits/qom-next
> >>
> >> Add a description field in both ObjectProperty and PropertyInfo struct.
> >> The descriptions can serve as documentation in the code,
> >> and they can be used to provide better help. For example:
> >>
> >> Before this patch series:
> >>
> >> $./qemu-system-x86_64 -device virtio-blk-pci,?
> >>
> >> virtio-blk-pci.iothread=link<iothread>
> >> virtio-blk-pci.x-data-plane=bool
> >> virtio-blk-pci.scsi=bool
> >> virtio-blk-pci.config-wce=bool
> >> virtio-blk-pci.serial=str
> >> virtio-blk-pci.secs=uint32
> >> virtio-blk-pci.heads=uint32
> >> virtio-blk-pci.cyls=uint32
> >> virtio-blk-pci.discard_granularity=uint32
> >> virtio-blk-pci.bootindex=int32
> >> virtio-blk-pci.opt_io_size=uint32
> >> virtio-blk-pci.min_io_size=uint16
> >> virtio-blk-pci.physical_block_size=uint16
> >> virtio-blk-pci.logical_block_size=uint16
> >> virtio-blk-pci.drive=str
> >> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
> >> virtio-blk-pci.command_serr_enable=on/off
> >> virtio-blk-pci.multifunction=on/off
> >> virtio-blk-pci.rombar=uint32
> >> virtio-blk-pci.romfile=str
> >> virtio-blk-pci.addr=pci-devfn
> >> virtio-blk-pci.event_idx=on/off
> >> virtio-blk-pci.indirect_desc=on/off
> >> virtio-blk-pci.vectors=uint32
> >> virtio-blk-pci.ioeventfd=on/off
> >> virtio-blk-pci.class=uint32
> >>
> >> After:
> >>
> >> $./qemu-system-x86_64 -device virtio-blk-pci,?
> >>
> >> virtio-blk-pci.iothread=link<iothread>
> >> virtio-blk-pci.x-data-plane=bool (on/off)
> >> virtio-blk-pci.scsi=bool (on/off)
> >> virtio-blk-pci.config-wce=bool (on/off)
> >> virtio-blk-pci.serial=str
> >> virtio-blk-pci.secs=uint32
> >> virtio-blk-pci.heads=uint32
> >> virtio-blk-pci.cyls=uint32
> >> virtio-blk-pci.discard_granularity=uint32
> >> virtio-blk-pci.bootindex=int32
> >> virtio-blk-pci.opt_io_size=uint32
> >> virtio-blk-pci.min_io_size=uint16
> >> virtio-blk-pci.physical_block_size=uint16 (A power of two between 512 and
> 32768)
> >> virtio-blk-pci.logical_block_size=uint16 (A power of two between 512 and
> 32768)
> >> virtio-blk-pci.drive=str (ID of a drive to use as a backend)
> >> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
> >> virtio-blk-pci.command_serr_enable=bool (on/off)
> >> virtio-blk-pci.multifunction=bool (on/off)
> >> virtio-blk-pci.rombar=uint32
> >> virtio-blk-pci.romfile=str
> >> virtio-blk-pci.addr=int32 (Slot and optional function number, example: 06.0
> or 06)
> >> virtio-blk-pci.event_idx=bool (on/off)
> >> virtio-blk-pci.indirect_desc=bool (on/off)
> >> virtio-blk-pci.vectors=uint32
> >> virtio-blk-pci.ioeventfd=bool (on/off)
> >> virtio-blk-pci.class=uint32
> >>
> >>
> >> Gonglei (5):
> >>   qdev: add description field in PropertyInfo struct
> >>   qom: add description field in ObjectProperty struct
> >>   qdev: set the object property's description to the qdev property's.
> >>   qmp: print descriptions of object properties
> >>   qdev: drop legacy_name from qdev properties
> >>
> >>  hw/core/qdev-properties-system.c |  8 ++++----
> >>  hw/core/qdev-properties.c        | 14 ++++++++------
> >>  hw/core/qdev.c                   |  5 +++++
> >>  include/hw/qdev-core.h           |  2 +-
> >>  include/qom/object.h             | 14 ++++++++++++++
> >>  qapi-schema.json                 |  4 +++-
> >>  qdev-monitor.c                   |  7 ++++++-
> >>  qmp.c                            | 13 ++++++++++---
> >>  qom/object.c                     | 20 ++++++++++++++++++++
> >>  target-ppc/translate_init.c      |  2 +-
> >>  10 files changed, 72 insertions(+), 17 deletions(-)
> >>
> >
> 
> 
> 

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

* Re: [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct
  2014-10-09 11:51     ` Gonglei
@ 2014-10-13 10:55       ` Gonglei
  2014-10-13 13:40         ` Andreas Färber
  0 siblings, 1 reply; 12+ messages in thread
From: Gonglei @ 2014-10-13 10:55 UTC (permalink / raw)
  To: Gonglei
  Cc: Huangweidong (C), mst@redhat.com, Luonengjun, armbru@redhat.com,
	qemu-devel@nongnu.org, 'Paolo Bonzini', Huangpeng (Peter),
	lcapitulino@redhat.com, afaerber@suse.de

On 2014/10/9 19:51, Gonglei wrote:

> Andreas, ping?
> 


Ping..., again.

> Best regards,
> -Gonglei
> 
>> -----Original Message-----
>> From: qemu-devel-bounces+arei.gonglei=hotmail.com@nongnu.org
>> [mailto:qemu-devel-bounces+arei.gonglei=hotmail.com@nongnu.org] On
>> Behalf Of Gonglei
>> Sent: Wednesday, October 08, 2014 6:46 PM
>> To: Paolo Bonzini
>> Cc: Huangweidong (C); mst@redhat.com; Luonengjun; armbru@redhat.com;
>> qemu-devel@nongnu.org; Huangpeng (Peter); lcapitulino@redhat.com;
>> afaerber@suse.de
>> Subject: Re: [Qemu-devel] [PATCH v5 0/5] add description field in
>> ObjectProperty and PropertyInfo struct
>>
>> On 2014/10/8 6:22, Paolo Bonzini wrote:
>>
>>> Il 07/10/2014 08:33, arei.gonglei@huawei.com ha scritto:
>>>> From: Gonglei <arei.gonglei@huawei.com>
>>>>
>>>> v5 -> v4:
>>>>  1. add some improvements by Michael's suggtion, Thanks. (Michael)
>>>>  2. add 'Reviewed-by' tag (Paolo, Michael, Eric)
>>>
>>> Andreas, this series depends on patches in qom-next so you'll have to
>>> take it.
>>>
>>
>> Yes, please. Thanks!
>>
>> Best regards,
>> -Gonglei
>>
>>> Thanks,
>>>
>>> Paolo
>>>
>>>> v4 -> v3:
>>>>  1. rebase on qom-next tree (Andreas)
>>>>  2. fix memory leak in PATCH 2, move object_property_set_description
>> calling
>>>>     in object_property_add_alias() from PATCH 3 to PATCH 2. (Paolo)
>>>>  3. drop "?:" in PATCH 2, call g_strdup() directly
>>>>  4. rework PATCH 4, change description as optional field,
>>>>     drop "?:" conditional express (Eric)
>>>>
>>>> v3 -> v2:
>>>>  1. add a new "description" field to DevicePropertyInfo, and format
>>>>     it in qdev_device_help() in PATCH 6 (Paolo)
>>>>
>>>> v2 -> v1:
>>>>  1. rename "fail" label to "out" in PATCH 1 (Andreas)
>>>>  2. improve descriptions in PATCH 3 (Paolo, adding Signed-off-by Paolo in
>> this patch)
>>>>  3. rework PATCH 5, set description at qdev_property_add_static(),
>>>>     then copy the description of target_obj.property. (Paolo)
>>>>  4. free description filed of ObjectProperty avoid memory leak in PATCH 4.
>>>>
>>>> This patch series based on qom-next tree:
>>>>  https://github.com/afaerber/qemu-cpu/commits/qom-next
>>>>
>>>> Add a description field in both ObjectProperty and PropertyInfo struct.
>>>> The descriptions can serve as documentation in the code,
>>>> and they can be used to provide better help. For example:
>>>>
>>>> Before this patch series:
>>>>
>>>> $./qemu-system-x86_64 -device virtio-blk-pci,?
>>>>
>>>> virtio-blk-pci.iothread=link<iothread>
>>>> virtio-blk-pci.x-data-plane=bool
>>>> virtio-blk-pci.scsi=bool
>>>> virtio-blk-pci.config-wce=bool
>>>> virtio-blk-pci.serial=str
>>>> virtio-blk-pci.secs=uint32
>>>> virtio-blk-pci.heads=uint32
>>>> virtio-blk-pci.cyls=uint32
>>>> virtio-blk-pci.discard_granularity=uint32
>>>> virtio-blk-pci.bootindex=int32
>>>> virtio-blk-pci.opt_io_size=uint32
>>>> virtio-blk-pci.min_io_size=uint16
>>>> virtio-blk-pci.physical_block_size=uint16
>>>> virtio-blk-pci.logical_block_size=uint16
>>>> virtio-blk-pci.drive=str
>>>> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
>>>> virtio-blk-pci.command_serr_enable=on/off
>>>> virtio-blk-pci.multifunction=on/off
>>>> virtio-blk-pci.rombar=uint32
>>>> virtio-blk-pci.romfile=str
>>>> virtio-blk-pci.addr=pci-devfn
>>>> virtio-blk-pci.event_idx=on/off
>>>> virtio-blk-pci.indirect_desc=on/off
>>>> virtio-blk-pci.vectors=uint32
>>>> virtio-blk-pci.ioeventfd=on/off
>>>> virtio-blk-pci.class=uint32
>>>>
>>>> After:
>>>>
>>>> $./qemu-system-x86_64 -device virtio-blk-pci,?
>>>>
>>>> virtio-blk-pci.iothread=link<iothread>
>>>> virtio-blk-pci.x-data-plane=bool (on/off)
>>>> virtio-blk-pci.scsi=bool (on/off)
>>>> virtio-blk-pci.config-wce=bool (on/off)
>>>> virtio-blk-pci.serial=str
>>>> virtio-blk-pci.secs=uint32
>>>> virtio-blk-pci.heads=uint32
>>>> virtio-blk-pci.cyls=uint32
>>>> virtio-blk-pci.discard_granularity=uint32
>>>> virtio-blk-pci.bootindex=int32
>>>> virtio-blk-pci.opt_io_size=uint32
>>>> virtio-blk-pci.min_io_size=uint16
>>>> virtio-blk-pci.physical_block_size=uint16 (A power of two between 512 and
>> 32768)
>>>> virtio-blk-pci.logical_block_size=uint16 (A power of two between 512 and
>> 32768)
>>>> virtio-blk-pci.drive=str (ID of a drive to use as a backend)
>>>> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
>>>> virtio-blk-pci.command_serr_enable=bool (on/off)
>>>> virtio-blk-pci.multifunction=bool (on/off)
>>>> virtio-blk-pci.rombar=uint32
>>>> virtio-blk-pci.romfile=str
>>>> virtio-blk-pci.addr=int32 (Slot and optional function number, example: 06.0
>> or 06)
>>>> virtio-blk-pci.event_idx=bool (on/off)
>>>> virtio-blk-pci.indirect_desc=bool (on/off)
>>>> virtio-blk-pci.vectors=uint32
>>>> virtio-blk-pci.ioeventfd=bool (on/off)
>>>> virtio-blk-pci.class=uint32
>>>>
>>>>
>>>> Gonglei (5):
>>>>   qdev: add description field in PropertyInfo struct
>>>>   qom: add description field in ObjectProperty struct
>>>>   qdev: set the object property's description to the qdev property's.
>>>>   qmp: print descriptions of object properties
>>>>   qdev: drop legacy_name from qdev properties
>>>>
>>>>  hw/core/qdev-properties-system.c |  8 ++++----
>>>>  hw/core/qdev-properties.c        | 14 ++++++++------
>>>>  hw/core/qdev.c                   |  5 +++++
>>>>  include/hw/qdev-core.h           |  2 +-
>>>>  include/qom/object.h             | 14 ++++++++++++++
>>>>  qapi-schema.json                 |  4 +++-
>>>>  qdev-monitor.c                   |  7 ++++++-
>>>>  qmp.c                            | 13 ++++++++++---
>>>>  qom/object.c                     | 20 ++++++++++++++++++++
>>>>  target-ppc/translate_init.c      |  2 +-
>>>>  10 files changed, 72 insertions(+), 17 deletions(-)
>>>>
>>>
>>
>>
>>
> 
> 

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

* Re: [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct
  2014-10-13 10:55       ` Gonglei
@ 2014-10-13 13:40         ` Andreas Färber
  2014-10-13 17:30           ` Andreas Färber
  0 siblings, 1 reply; 12+ messages in thread
From: Andreas Färber @ 2014-10-13 13:40 UTC (permalink / raw)
  To: Gonglei, Gonglei
  Cc: Huangweidong (C), mst@redhat.com, Luonengjun,
	qemu-devel@nongnu.org, armbru@redhat.com, 'Paolo Bonzini',
	Huangpeng (Peter), lcapitulino@redhat.com

Am 13.10.2014 um 12:55 schrieb Gonglei:
> On 2014/10/9 19:51, Gonglei wrote:
> 
>> Andreas, ping?
>>
> 
> 
> Ping..., again.

Already queued, not yet pushed. On my way to KVM Forum...

Regards,
Andreas

> 
>> Best regards,
>> -Gonglei
>>
>>> -----Original Message-----
>>> From: qemu-devel-bounces+arei.gonglei=hotmail.com@nongnu.org
>>> [mailto:qemu-devel-bounces+arei.gonglei=hotmail.com@nongnu.org] On
>>> Behalf Of Gonglei
>>> Sent: Wednesday, October 08, 2014 6:46 PM
>>> To: Paolo Bonzini
>>> Cc: Huangweidong (C); mst@redhat.com; Luonengjun; armbru@redhat.com;
>>> qemu-devel@nongnu.org; Huangpeng (Peter); lcapitulino@redhat.com;
>>> afaerber@suse.de
>>> Subject: Re: [Qemu-devel] [PATCH v5 0/5] add description field in
>>> ObjectProperty and PropertyInfo struct
>>>
>>> On 2014/10/8 6:22, Paolo Bonzini wrote:
>>>
>>>> Il 07/10/2014 08:33, arei.gonglei@huawei.com ha scritto:
>>>>> From: Gonglei <arei.gonglei@huawei.com>
>>>>>
>>>>> v5 -> v4:
>>>>>  1. add some improvements by Michael's suggtion, Thanks. (Michael)
>>>>>  2. add 'Reviewed-by' tag (Paolo, Michael, Eric)
>>>>
>>>> Andreas, this series depends on patches in qom-next so you'll have to
>>>> take it.
>>>>
>>>
>>> Yes, please. Thanks!
>>>
>>> Best regards,
>>> -Gonglei
>>>
>>>> Thanks,
>>>>
>>>> Paolo
>>>>
>>>>> v4 -> v3:
>>>>>  1. rebase on qom-next tree (Andreas)
>>>>>  2. fix memory leak in PATCH 2, move object_property_set_description
>>> calling
>>>>>     in object_property_add_alias() from PATCH 3 to PATCH 2. (Paolo)
>>>>>  3. drop "?:" in PATCH 2, call g_strdup() directly
>>>>>  4. rework PATCH 4, change description as optional field,
>>>>>     drop "?:" conditional express (Eric)
>>>>>
>>>>> v3 -> v2:
>>>>>  1. add a new "description" field to DevicePropertyInfo, and format
>>>>>     it in qdev_device_help() in PATCH 6 (Paolo)
>>>>>
>>>>> v2 -> v1:
>>>>>  1. rename "fail" label to "out" in PATCH 1 (Andreas)
>>>>>  2. improve descriptions in PATCH 3 (Paolo, adding Signed-off-by Paolo in
>>> this patch)
>>>>>  3. rework PATCH 5, set description at qdev_property_add_static(),
>>>>>     then copy the description of target_obj.property. (Paolo)
>>>>>  4. free description filed of ObjectProperty avoid memory leak in PATCH 4.
>>>>>
>>>>> This patch series based on qom-next tree:
>>>>>  https://github.com/afaerber/qemu-cpu/commits/qom-next
>>>>>
>>>>> Add a description field in both ObjectProperty and PropertyInfo struct.
>>>>> The descriptions can serve as documentation in the code,
>>>>> and they can be used to provide better help. For example:
>>>>>
>>>>> Before this patch series:
>>>>>
>>>>> $./qemu-system-x86_64 -device virtio-blk-pci,?
>>>>>
>>>>> virtio-blk-pci.iothread=link<iothread>
>>>>> virtio-blk-pci.x-data-plane=bool
>>>>> virtio-blk-pci.scsi=bool
>>>>> virtio-blk-pci.config-wce=bool
>>>>> virtio-blk-pci.serial=str
>>>>> virtio-blk-pci.secs=uint32
>>>>> virtio-blk-pci.heads=uint32
>>>>> virtio-blk-pci.cyls=uint32
>>>>> virtio-blk-pci.discard_granularity=uint32
>>>>> virtio-blk-pci.bootindex=int32
>>>>> virtio-blk-pci.opt_io_size=uint32
>>>>> virtio-blk-pci.min_io_size=uint16
>>>>> virtio-blk-pci.physical_block_size=uint16
>>>>> virtio-blk-pci.logical_block_size=uint16
>>>>> virtio-blk-pci.drive=str
>>>>> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
>>>>> virtio-blk-pci.command_serr_enable=on/off
>>>>> virtio-blk-pci.multifunction=on/off
>>>>> virtio-blk-pci.rombar=uint32
>>>>> virtio-blk-pci.romfile=str
>>>>> virtio-blk-pci.addr=pci-devfn
>>>>> virtio-blk-pci.event_idx=on/off
>>>>> virtio-blk-pci.indirect_desc=on/off
>>>>> virtio-blk-pci.vectors=uint32
>>>>> virtio-blk-pci.ioeventfd=on/off
>>>>> virtio-blk-pci.class=uint32
>>>>>
>>>>> After:
>>>>>
>>>>> $./qemu-system-x86_64 -device virtio-blk-pci,?
>>>>>
>>>>> virtio-blk-pci.iothread=link<iothread>
>>>>> virtio-blk-pci.x-data-plane=bool (on/off)
>>>>> virtio-blk-pci.scsi=bool (on/off)
>>>>> virtio-blk-pci.config-wce=bool (on/off)
>>>>> virtio-blk-pci.serial=str
>>>>> virtio-blk-pci.secs=uint32
>>>>> virtio-blk-pci.heads=uint32
>>>>> virtio-blk-pci.cyls=uint32
>>>>> virtio-blk-pci.discard_granularity=uint32
>>>>> virtio-blk-pci.bootindex=int32
>>>>> virtio-blk-pci.opt_io_size=uint32
>>>>> virtio-blk-pci.min_io_size=uint16
>>>>> virtio-blk-pci.physical_block_size=uint16 (A power of two between 512 and
>>> 32768)
>>>>> virtio-blk-pci.logical_block_size=uint16 (A power of two between 512 and
>>> 32768)
>>>>> virtio-blk-pci.drive=str (ID of a drive to use as a backend)
>>>>> virtio-blk-pci.virtio-backend=child<virtio-blk-device>
>>>>> virtio-blk-pci.command_serr_enable=bool (on/off)
>>>>> virtio-blk-pci.multifunction=bool (on/off)
>>>>> virtio-blk-pci.rombar=uint32
>>>>> virtio-blk-pci.romfile=str
>>>>> virtio-blk-pci.addr=int32 (Slot and optional function number, example: 06.0
>>> or 06)
>>>>> virtio-blk-pci.event_idx=bool (on/off)
>>>>> virtio-blk-pci.indirect_desc=bool (on/off)
>>>>> virtio-blk-pci.vectors=uint32
>>>>> virtio-blk-pci.ioeventfd=bool (on/off)
>>>>> virtio-blk-pci.class=uint32
>>>>>
>>>>>
>>>>> Gonglei (5):
>>>>>   qdev: add description field in PropertyInfo struct
>>>>>   qom: add description field in ObjectProperty struct
>>>>>   qdev: set the object property's description to the qdev property's.
>>>>>   qmp: print descriptions of object properties
>>>>>   qdev: drop legacy_name from qdev properties
>>>>>
>>>>>  hw/core/qdev-properties-system.c |  8 ++++----
>>>>>  hw/core/qdev-properties.c        | 14 ++++++++------
>>>>>  hw/core/qdev.c                   |  5 +++++
>>>>>  include/hw/qdev-core.h           |  2 +-
>>>>>  include/qom/object.h             | 14 ++++++++++++++
>>>>>  qapi-schema.json                 |  4 +++-
>>>>>  qdev-monitor.c                   |  7 ++++++-
>>>>>  qmp.c                            | 13 ++++++++++---
>>>>>  qom/object.c                     | 20 ++++++++++++++++++++
>>>>>  target-ppc/translate_init.c      |  2 +-
>>>>>  10 files changed, 72 insertions(+), 17 deletions(-)
>>>>>
>>>>
>>>
>>>
>>>
>>
>>
> 
> 
> 


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

* Re: [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct
  2014-10-13 13:40         ` Andreas Färber
@ 2014-10-13 17:30           ` Andreas Färber
  0 siblings, 0 replies; 12+ messages in thread
From: Andreas Färber @ 2014-10-13 17:30 UTC (permalink / raw)
  To: Gonglei, Gonglei
  Cc: Huangweidong (C), mst@redhat.com, Luonengjun,
	qemu-devel@nongnu.org, armbru@redhat.com, 'Paolo Bonzini',
	Huangpeng (Peter), lcapitulino@redhat.com

Am 13.10.2014 um 15:40 schrieb Andreas Färber:
> Already queued, not yet pushed. On my way to KVM Forum...

Fixed up the preceding series and pushed this one now:
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] 12+ messages in thread

end of thread, other threads:[~2014-10-13 17:30 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-07  6:33 [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 1/5] qdev: add description field in " arei.gonglei
2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 2/5] qom: add description field in ObjectProperty struct arei.gonglei
2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 3/5] qdev: set the object property's description to the qdev property's arei.gonglei
2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 4/5] qmp: print descriptions of object properties arei.gonglei
2014-10-07  6:33 ` [Qemu-devel] [PATCH v5 5/5] qdev: drop legacy_name from qdev properties arei.gonglei
2014-10-07 22:22 ` [Qemu-devel] [PATCH v5 0/5] add description field in ObjectProperty and PropertyInfo struct Paolo Bonzini
2014-10-08 10:45   ` Gonglei
2014-10-09 11:51     ` Gonglei
2014-10-13 10:55       ` Gonglei
2014-10-13 13:40         ` Andreas Färber
2014-10-13 17:30           ` 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).