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