All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 0/7] add description field in ObjectProperty and PropertyInfo struct
@ 2014-09-25  2:04 arei.gonglei
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 1/7] qom: add error handler for object_property_print() arei.gonglei
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: arei.gonglei @ 2014-09-25  2:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, aliguori, mst, armbru, luonengjun, peter.huangpeng,
	lcapitulino, Gonglei, stefanha, pbonzini, afaerber

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

PATCH 1 and PATCH 2 are bugfixes. PATCH 3~7 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 function number, example: 06.0)
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

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. 

Thanks for review!


Gonglei (7):
  qom: add error handler for object_property_print()
  qom: add error handler for object alias property
  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             | 15 +++++++++++++++
 qmp.c                            | 19 +++++++++++++++----
 qom/object.c                     | 39 ++++++++++++++++++++++++++++++++++++---
 target-ppc/translate_init.c      |  2 +-
 8 files changed, 85 insertions(+), 19 deletions(-)

-- 
1.7.12.4

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

* [Qemu-devel] [PATCH v2 1/7] qom: add error handler for object_property_print()
  2014-09-25  2:04 [Qemu-devel] [PATCH v2 0/7] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
@ 2014-09-25  2:04 ` arei.gonglei
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 2/7] qom: add error handler for object alias property arei.gonglei
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: arei.gonglei @ 2014-09-25  2:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, aliguori, mst, armbru, luonengjun, peter.huangpeng,
	lcapitulino, Gonglei, stefanha, pbonzini, afaerber

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

Avoid the caller of object_property_print() leaking string
argument's memory, such as qdev_print_props() when
encounter errors.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
---
 qom/object.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/qom/object.c b/qom/object.c
index da0919a..21135e1 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1010,11 +1010,19 @@ char *object_property_print(Object *obj, const char *name, bool human,
                             Error **errp)
 {
     StringOutputVisitor *mo;
-    char *string;
+    char *string = NULL;
+    Error *local_err = NULL;
 
     mo = string_output_visitor_new(human);
-    object_property_get(obj, string_output_get_visitor(mo), name, errp);
+    object_property_get(obj, string_output_get_visitor(mo), name, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        goto out;
+    }
+
     string = string_output_get_string(mo);
+
+out:
     string_output_visitor_cleanup(mo);
     return string;
 }
-- 
1.7.12.4

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

* [Qemu-devel] [PATCH v2 2/7] qom: add error handler for object alias property
  2014-09-25  2:04 [Qemu-devel] [PATCH v2 0/7] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 1/7] qom: add error handler for object_property_print() arei.gonglei
@ 2014-09-25  2:04 ` arei.gonglei
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 3/7] qdev: add description field in PropertyInfo struct arei.gonglei
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: arei.gonglei @ 2014-09-25  2:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, aliguori, mst, armbru, luonengjun, peter.huangpeng,
	lcapitulino, Gonglei, stefanha, pbonzini, afaerber

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

object_property_add_alias() is called at some
places at present. And its parameter errp may not NULL,
such as
 object_property_add_alias(obj, "iothread", OBJECT(&dev->vdev),"iothread",
                              &error_abort);
This patch add error handler for security.

Cc: Stefan Hajnoczi <stefanha@redhat.com>
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>
---
 qom/object.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/qom/object.c b/qom/object.c
index 21135e1..575291f 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1642,6 +1642,7 @@ void object_property_add_alias(Object *obj, const char *name,
     ObjectProperty *op;
     ObjectProperty *target_prop;
     gchar *prop_type;
+    Error *local_err = NULL;
 
     target_prop = object_property_find(target_obj, target_name, errp);
     if (!target_prop) {
@@ -1663,9 +1664,15 @@ void object_property_add_alias(Object *obj, const char *name,
                              property_get_alias,
                              property_set_alias,
                              property_release_alias,
-                             prop, errp);
+                             prop, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        g_free(prop);
+        goto out;
+    }
     op->resolve = property_resolve_alias;
 
+out:
     g_free(prop_type);
 }
 
-- 
1.7.12.4

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

* [Qemu-devel] [PATCH v2 3/7] qdev: add description field in PropertyInfo struct
  2014-09-25  2:04 [Qemu-devel] [PATCH v2 0/7] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 1/7] qom: add error handler for object_property_print() arei.gonglei
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 2/7] qom: add error handler for object alias property arei.gonglei
@ 2014-09-25  2:04 ` arei.gonglei
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 4/7] qom: add description field in ObjectProperty struct arei.gonglei
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: arei.gonglei @ 2014-09-25  2:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, aliguori, mst, armbru, luonengjun, peter.huangpeng,
	lcapitulino, Gonglei, stefanha, pbonzini, 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>
---
 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..a853ac9 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 function number, example: 06.0",
     .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 48177ed..21b7a1e 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] 10+ messages in thread

* [Qemu-devel] [PATCH v2 4/7] qom: add description field in ObjectProperty struct
  2014-09-25  2:04 [Qemu-devel] [PATCH v2 0/7] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
                   ` (2 preceding siblings ...)
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 3/7] qdev: add description field in PropertyInfo struct arei.gonglei
@ 2014-09-25  2:04 ` arei.gonglei
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 5/7] qdev: set the object property's description to the qdev property's arei.gonglei
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: arei.gonglei @ 2014-09-25  2:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, aliguori, mst, armbru, luonengjun, peter.huangpeng,
	lcapitulino, Gonglei, stefanha, pbonzini, 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>
---
 include/qom/object.h | 15 +++++++++++++++
 qom/object.c         | 14 ++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/include/qom/object.h b/include/qom/object.h
index 8a05a81..ddc600d 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;
@@ -1274,6 +1275,20 @@ void object_property_add_alias(Object *obj, const char *name,
                                Object *target_obj, const char *target_name,
                                Error **errp);
 
+
+/**
+ * object_property_set_description:
+ * @obj: the object to set a property's description to
+ * @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
diff --git a/qom/object.c b/qom/object.c
index 575291f..c9b67cf 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);
 }
 
@@ -1676,6 +1678,18 @@ 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;
+    }
+    op->description = description ? g_strdup(description) : NULL;
+}
+
 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] 10+ messages in thread

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

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

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

When we call object_property_add_alias() adding alias properties to
the source object on the target Object, set the object property's
description to the source qdev property's.

c: 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>
---
 hw/core/qdev.c | 5 +++++
 qom/object.c   | 4 ++++
 2 files changed, 9 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;
     }
diff --git a/qom/object.c b/qom/object.c
index c9b67cf..56ace2f 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1674,6 +1674,10 @@ 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);
 }
-- 
1.7.12.4

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

* [Qemu-devel] [PATCH v2 6/7] qmp: print descriptions of object properties
  2014-09-25  2:04 [Qemu-devel] [PATCH v2 0/7] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
                   ` (4 preceding siblings ...)
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 5/7] qdev: set the object property's description to the qdev property's arei.gonglei
@ 2014-09-25  2:04 ` arei.gonglei
  2014-09-26 11:38   ` Paolo Bonzini
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 7/7] qdev: drop legacy_name from qdev properties arei.gonglei
  6 siblings, 1 reply; 10+ messages in thread
From: arei.gonglei @ 2014-09-25  2:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, aliguori, mst, armbru, luonengjun, peter.huangpeng,
	lcapitulino, Gonglei, stefanha, pbonzini, 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. 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 function number, example: 06.0)
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>
---
 qmp.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/qmp.c b/qmp.c
index c6767c4..20f501b 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,12 @@ 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);
+            if (prop->info->description) {
+                info->type = g_strdup_printf("%s (%s)", prop->info->name,
+                                             prop->info->description);
+            } else {
+                info->type = g_strdup(prop->info->name);
+            }
             return info;
         }
         klass = object_class_get_parent(klass);
@@ -474,7 +480,11 @@ static DevicePropertyInfo *make_device_property_info(ObjectClass *klass,
     /* Not a qdev property, use the default type */
     info = g_malloc0(sizeof(*info));
     info->name = g_strdup(name);
-    info->type = g_strdup(default_type);
+    if (description) {
+        info->type = g_strdup_printf("%s (%s)", default_type, description);
+    } else {
+        info->type = g_strdup(default_type);
+    }
     return info;
 }
 
@@ -521,7 +531,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] 10+ messages in thread

* [Qemu-devel] [PATCH v2 7/7] qdev: drop legacy_name from qdev properties
  2014-09-25  2:04 [Qemu-devel] [PATCH v2 0/7] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
                   ` (5 preceding siblings ...)
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 6/7] qmp: print descriptions of object properties arei.gonglei
@ 2014-09-25  2:04 ` arei.gonglei
  6 siblings, 0 replies; 10+ messages in thread
From: arei.gonglei @ 2014-09-25  2:04 UTC (permalink / raw)
  To: qemu-devel
  Cc: weidong.huang, aliguori, mst, armbru, luonengjun, peter.huangpeng,
	lcapitulino, Gonglei, stefanha, pbonzini, afaerber

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

The legacy_name is useless now, the better help
information provied 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>
---
 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 a853ac9..5c85db1 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 function number, example: 06.0",
     .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 21b7a1e..061fbb1 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] 10+ messages in thread

* Re: [Qemu-devel] [PATCH v2 6/7] qmp: print descriptions of object properties
  2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 6/7] qmp: print descriptions of object properties arei.gonglei
@ 2014-09-26 11:38   ` Paolo Bonzini
  2014-09-26 12:11     ` Gonglei
  0 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2014-09-26 11:38 UTC (permalink / raw)
  To: arei.gonglei, qemu-devel
  Cc: weidong.huang, stefanha, mst, luonengjun, peter.huangpeng, armbru,
	aliguori, lcapitulino, afaerber

Il 25/09/2014 04:04, arei.gonglei@huawei.com ha scritto:
> From: Gonglei <arei.gonglei@huawei.com>
> 
> 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 function number, example: 06.0)
> 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>
> ---
>  qmp.c | 19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/qmp.c b/qmp.c
> index c6767c4..20f501b 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,12 @@ 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);
> +            if (prop->info->description) {
> +                info->type = g_strdup_printf("%s (%s)", prop->info->name,
> +                                             prop->info->description);
> +            } else {
> +                info->type = g_strdup(prop->info->name);
> +            }
>              return info;
>          }
>          klass = object_class_get_parent(klass);
> @@ -474,7 +480,11 @@ static DevicePropertyInfo *make_device_property_info(ObjectClass *klass,
>      /* Not a qdev property, use the default type */
>      info = g_malloc0(sizeof(*info));
>      info->name = g_strdup(name);
> -    info->type = g_strdup(default_type);
> +    if (description) {
> +        info->type = g_strdup_printf("%s (%s)", default_type, description);

Please add a new "description" field to DevicePropertyInfo, and format
it in qdev_device_help.

You can send v3 of just this patch.

Thanks,

Paolo

> +    } else {
> +        info->type = g_strdup(default_type);
> +    }
>      return info;
>  }
>  
> @@ -521,7 +531,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;
>          }
> 

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

* Re: [Qemu-devel] [PATCH v2 6/7] qmp: print descriptions of object properties
  2014-09-26 11:38   ` Paolo Bonzini
@ 2014-09-26 12:11     ` Gonglei
  0 siblings, 0 replies; 10+ messages in thread
From: Gonglei @ 2014-09-26 12:11 UTC (permalink / raw)
  To: 'Paolo Bonzini', arei.gonglei, qemu-devel
  Cc: weidong.huang, aliguori, mst, luonengjun, armbru, peter.huangpeng,
	stefanha, lcapitulino, afaerber

Hi, Paolo

> >  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,12 @@ 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);
> > +            if (prop->info->description) {
> > +                info->type = g_strdup_printf("%s (%s)",
> prop->info->name,
> > +
> prop->info->description);
> > +            } else {
> > +                info->type = g_strdup(prop->info->name);
> > +            }
> >              return info;
> >          }
> >          klass = object_class_get_parent(klass);
> > @@ -474,7 +480,11 @@ static DevicePropertyInfo
> *make_device_property_info(ObjectClass *klass,
> >      /* Not a qdev property, use the default type */
> >      info = g_malloc0(sizeof(*info));
> >      info->name = g_strdup(name);
> > -    info->type = g_strdup(default_type);
> > +    if (description) {
> > +        info->type = g_strdup_printf("%s (%s)", default_type, description);
> 
> Please add a new "description" field to DevicePropertyInfo, and format
> it in qdev_device_help.
> 
> You can send v3 of just this patch.
> 
OK, will do it. Thanks! :)

Best regards,
-Gonglei

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

end of thread, other threads:[~2014-09-26 12:12 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-25  2:04 [Qemu-devel] [PATCH v2 0/7] add description field in ObjectProperty and PropertyInfo struct arei.gonglei
2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 1/7] qom: add error handler for object_property_print() arei.gonglei
2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 2/7] qom: add error handler for object alias property arei.gonglei
2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 3/7] qdev: add description field in PropertyInfo struct arei.gonglei
2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 4/7] qom: add description field in ObjectProperty struct arei.gonglei
2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 5/7] qdev: set the object property's description to the qdev property's arei.gonglei
2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 6/7] qmp: print descriptions of object properties arei.gonglei
2014-09-26 11:38   ` Paolo Bonzini
2014-09-26 12:11     ` Gonglei
2014-09-25  2:04 ` [Qemu-devel] [PATCH v2 7/7] qdev: drop legacy_name from qdev properties arei.gonglei

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.