* [PATCH v4 00/32] qdev property code cleanup
@ 2020-12-11 22:04 Eduardo Habkost
2020-12-11 22:04 ` [PATCH v4 01/32] cs4231: Get rid of empty property array Eduardo Habkost
` (32 more replies)
0 siblings, 33 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:04 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
This code contains the first 32 patches from the series:
Subject: [PATCH v3 00/53] Make qdev static property API usable by any QOM type
https://lore.kernel.org/qemu-devel/20201112214350.872250-1-ehabkost@redhat.com
I'm submitting this separately so we can merge the qdev-specific
cleanup while we discuss our long term plans for QOM properties.
Eduardo Habkost (32):
cs4231: Get rid of empty property array
cpu: Move cpu_common_props to hw/core/cpu.c
qdev: Move property code to qdev-properties.[ch]
qdev: Check dev->realized at set_size()
sparc: Check dev->realized at sparc_set_nwindows()
qdev: Don't use dev->id on set_size32() error message
qdev: Make PropertyInfo.print method get Object* argument
qdev: Make bit_prop_set() get Object* argument
qdev: Make qdev_get_prop_ptr() get Object* arg
qdev: Make qdev_find_global_prop() get Object* argument
qdev: Make check_prop_still_unset() get Object* argument
qdev: Make error_set_from_qdev_prop_error() get Object* argument
qdev: Make qdev_propinfo_get_uint16() static
qdev: Move UUID property to qdev-properties-system.c
qdev: Move softmmu properties to qdev-properties-system.h
qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros
sparc: Use DEFINE_PROP for nwindows property
qdev: Get just property name at error_set_from_qdev_prop_error()
qdev: Avoid using prop->name unnecessarily
qdev: Add name parameter to qdev_class_add_property()
qdev: Add name argument to PropertyInfo.create method
qdev: Wrap getters and setters in separate helpers
qdev: Move dev->realized check to qdev_property_set()
qdev: Make PropertyInfo.create return ObjectProperty*
qdev: Make qdev_class_add_property() more flexible
qdev: Separate generic and device-specific property registration
qdev: Rename qdev_propinfo_* to field_prop_*
qdev: Move qdev_prop_tpm declaration to tpm_prop.h
qdev: Rename qdev_prop_* to prop_info_*
qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr()
qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen()
tests: Add unit test for qdev array properties
audio/audio.h | 1 +
hw/core/qdev-prop-internal.h | 76 +++-
hw/tpm/tpm_prop.h | 2 +
include/hw/block/block.h | 1 +
include/hw/core/cpu.h | 1 -
include/hw/qdev-core.h | 37 --
include/hw/qdev-properties-system.h | 77 ++++
include/hw/qdev-properties.h | 289 ++++++---------
include/net/net.h | 1 +
backends/tpm/tpm_util.c | 16 +-
cpu.c | 15 -
hw/acpi/vmgenid.c | 1 +
hw/arm/pxa2xx.c | 1 +
hw/arm/strongarm.c | 1 +
hw/audio/cs4231.c | 5 -
hw/block/fdc.c | 1 +
hw/block/m25p80.c | 1 +
hw/block/nand.c | 1 +
hw/block/onenand.c | 1 +
hw/block/pflash_cfi01.c | 1 +
hw/block/pflash_cfi02.c | 1 +
hw/block/vhost-user-blk.c | 1 +
hw/block/xen-block.c | 11 +-
hw/char/avr_usart.c | 1 +
hw/char/bcm2835_aux.c | 1 +
hw/char/cadence_uart.c | 1 +
hw/char/cmsdk-apb-uart.c | 1 +
hw/char/debugcon.c | 1 +
hw/char/digic-uart.c | 1 +
hw/char/escc.c | 1 +
hw/char/etraxfs_ser.c | 1 +
hw/char/exynos4210_uart.c | 1 +
hw/char/grlib_apbuart.c | 1 +
hw/char/ibex_uart.c | 1 +
hw/char/imx_serial.c | 1 +
hw/char/ipoctal232.c | 1 +
hw/char/lm32_juart.c | 1 +
hw/char/lm32_uart.c | 1 +
hw/char/mcf_uart.c | 1 +
hw/char/milkymist-uart.c | 1 +
hw/char/nrf51_uart.c | 1 +
hw/char/parallel.c | 1 +
hw/char/pl011.c | 1 +
hw/char/renesas_sci.c | 1 +
hw/char/sclpconsole-lm.c | 1 +
hw/char/sclpconsole.c | 1 +
hw/char/serial-pci-multi.c | 1 +
hw/char/serial.c | 1 +
hw/char/spapr_vty.c | 1 +
hw/char/stm32f2xx_usart.c | 1 +
hw/char/terminal3270.c | 1 +
hw/char/virtio-console.c | 1 +
hw/char/xilinx_uartlite.c | 1 +
hw/core/cpu.c | 15 +
hw/core/qdev-properties-system.c | 256 ++++++-------
hw/core/qdev-properties.c | 552 +++++++++++++++-------------
hw/core/qdev.c | 120 ------
hw/hyperv/vmbus.c | 1 +
hw/i386/kvm/i8254.c | 1 +
hw/ide/qdev.c | 1 +
hw/intc/arm_gicv3_common.c | 2 +-
hw/intc/rx_icu.c | 4 +-
hw/ipmi/ipmi_bmc_extern.c | 1 +
hw/ipmi/ipmi_bmc_sim.c | 1 +
hw/misc/allwinner-sid.c | 1 +
hw/misc/arm_sysctl.c | 4 +-
hw/misc/ivshmem.c | 1 +
hw/misc/mac_via.c | 1 +
hw/misc/sifive_u_otp.c | 1 +
hw/net/e1000e.c | 6 +-
hw/net/rocker/rocker.c | 1 +
hw/nvram/eeprom_at24c.c | 1 +
hw/nvram/spapr_nvram.c | 1 +
hw/pci-bridge/gen_pcie_root_port.c | 1 +
hw/pci/pci.c | 1 +
hw/ppc/pnv_pnor.c | 1 +
hw/rdma/vmw/pvrdma_main.c | 1 +
hw/rtc/mc146818rtc.c | 1 +
hw/s390x/css.c | 13 +-
hw/s390x/s390-pci-bus.c | 10 +-
hw/scsi/scsi-disk.c | 1 +
hw/scsi/scsi-generic.c | 1 +
hw/scsi/vhost-user-scsi.c | 1 +
hw/sd/sd.c | 1 +
hw/usb/ccid-card-passthru.c | 1 +
hw/usb/dev-serial.c | 1 +
hw/usb/redirect.c | 1 +
hw/vfio/pci-quirks.c | 11 +-
hw/vfio/pci.c | 1 +
hw/virtio/vhost-user-fs.c | 1 +
hw/virtio/vhost-user-vsock.c | 1 +
hw/virtio/virtio-iommu-pci.c | 1 +
hw/xen/xen_pt.c | 1 +
migration/migration.c | 1 +
softmmu/qdev-monitor.c | 1 +
target/arm/cpu.c | 2 +-
target/sparc/cpu.c | 5 +-
tests/test-qdev-global-props.c | 61 +++
98 files changed, 838 insertions(+), 826 deletions(-)
create mode 100644 include/hw/qdev-properties-system.h
--
2.28.0
^ permalink raw reply [flat|nested] 69+ messages in thread
* [PATCH v4 01/32] cs4231: Get rid of empty property array
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
@ 2020-12-11 22:04 ` Eduardo Habkost
2020-12-15 8:22 ` Gerd Hoffmann
2020-12-11 22:04 ` [PATCH v4 02/32] cpu: Move cpu_common_props to hw/core/cpu.c Eduardo Habkost
` (31 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:04 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Gerd Hoffmann, Marc-André Lureau,
Igor Mammedov, Philippe Mathieu-Daudé, Stefan Berger
An empty props array is unnecessary, we can just not call
device_class_set_props().
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/audio/cs4231.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/hw/audio/cs4231.c b/hw/audio/cs4231.c
index 8e9554ce9b..209c05a0a0 100644
--- a/hw/audio/cs4231.c
+++ b/hw/audio/cs4231.c
@@ -160,17 +160,12 @@ static void cs4231_init(Object *obj)
sysbus_init_irq(dev, &s->irq);
}
-static Property cs4231_properties[] = {
- {.name = NULL},
-};
-
static void cs4231_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
dc->reset = cs_reset;
dc->vmsd = &vmstate_cs4231;
- device_class_set_props(dc, cs4231_properties);
}
static const TypeInfo cs4231_info = {
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 02/32] cpu: Move cpu_common_props to hw/core/cpu.c
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
2020-12-11 22:04 ` [PATCH v4 01/32] cs4231: Get rid of empty property array Eduardo Habkost
@ 2020-12-11 22:04 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 03/32] qdev: Move property code to qdev-properties.[ch] Eduardo Habkost
` (30 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:04 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
There's no reason to keep the property list separate from the CPU
class code. Move the variable to hw/core/cpu.c and make it
static.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Cc: qemu-devel@nongnu.org
---
include/hw/core/cpu.h | 1 -
cpu.c | 15 ---------------
hw/core/cpu.c | 15 +++++++++++++++
3 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
index 3d92c967ff..8e7552910d 100644
--- a/include/hw/core/cpu.h
+++ b/include/hw/core/cpu.h
@@ -1111,7 +1111,6 @@ AddressSpace *cpu_get_address_space(CPUState *cpu, int asidx);
void QEMU_NORETURN cpu_abort(CPUState *cpu, const char *fmt, ...)
GCC_FMT_ATTR(2, 3);
-extern Property cpu_common_props[];
void cpu_exec_initfn(CPUState *cpu);
void cpu_exec_realizefn(CPUState *cpu, Error **errp);
void cpu_exec_unrealizefn(CPUState *cpu);
diff --git a/cpu.c b/cpu.c
index 0be5dcb6f3..0c485cdf2d 100644
--- a/cpu.c
+++ b/cpu.c
@@ -144,21 +144,6 @@ void cpu_exec_unrealizefn(CPUState *cpu)
#endif
}
-Property cpu_common_props[] = {
-#ifndef CONFIG_USER_ONLY
- /* Create a memory property for softmmu CPU object,
- * so users can wire up its memory. (This can't go in hw/core/cpu.c
- * because that file is compiled only once for both user-mode
- * and system builds.) The default if no link is set up is to use
- * the system address space.
- */
- DEFINE_PROP_LINK("memory", CPUState, memory, TYPE_MEMORY_REGION,
- MemoryRegion *),
-#endif
- DEFINE_PROP_BOOL("start-powered-off", CPUState, start_powered_off, false),
- DEFINE_PROP_END_OF_LIST(),
-};
-
void cpu_exec_initfn(CPUState *cpu)
{
cpu->as = NULL;
diff --git a/hw/core/cpu.c b/hw/core/cpu.c
index 576fa1d7ba..5c89c858aa 100644
--- a/hw/core/cpu.c
+++ b/hw/core/cpu.c
@@ -393,6 +393,21 @@ static vaddr cpu_adjust_watchpoint_address(CPUState *cpu, vaddr addr, int len)
return addr;
}
+static Property cpu_common_props[] = {
+#ifndef CONFIG_USER_ONLY
+ /* Create a memory property for softmmu CPU object,
+ * so users can wire up its memory. (This can't go in hw/core/cpu.c
+ * because that file is compiled only once for both user-mode
+ * and system builds.) The default if no link is set up is to use
+ * the system address space.
+ */
+ DEFINE_PROP_LINK("memory", CPUState, memory, TYPE_MEMORY_REGION,
+ MemoryRegion *),
+#endif
+ DEFINE_PROP_BOOL("start-powered-off", CPUState, start_powered_off, false),
+ DEFINE_PROP_END_OF_LIST(),
+};
+
static void cpu_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 03/32] qdev: Move property code to qdev-properties.[ch]
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
2020-12-11 22:04 ` [PATCH v4 01/32] cs4231: Get rid of empty property array Eduardo Habkost
2020-12-11 22:04 ` [PATCH v4 02/32] cpu: Move cpu_common_props to hw/core/cpu.c Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 04/32] qdev: Check dev->realized at set_size() Eduardo Habkost
` (29 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Move everything related to Property and PropertyInfo to
qdev-properties.[ch] to make it easier to refactor that code.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
include/hw/qdev-core.h | 37 -----------
include/hw/qdev-properties.h | 38 +++++++++++
hw/core/qdev-properties.c | 120 +++++++++++++++++++++++++++++++++++
hw/core/qdev.c | 120 -----------------------------------
softmmu/qdev-monitor.c | 1 +
5 files changed, 159 insertions(+), 157 deletions(-)
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 9fbb22a48d..8f91faebc3 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -276,43 +276,6 @@ struct BusState {
ResettableState reset;
};
-/**
- * Property:
- * @set_default: true if the default value should be set from @defval,
- * in which case @info->set_default_value must not be NULL
- * (if false then no default value is set by the property system
- * and the field retains whatever value it was given by instance_init).
- * @defval: default value for the property. This is used only if @set_default
- * is true.
- */
-struct Property {
- const char *name;
- const PropertyInfo *info;
- ptrdiff_t offset;
- uint8_t bitnr;
- bool set_default;
- union {
- int64_t i;
- uint64_t u;
- } defval;
- int arrayoffset;
- const PropertyInfo *arrayinfo;
- int arrayfieldsize;
- const char *link_type;
-};
-
-struct PropertyInfo {
- const char *name;
- const char *description;
- const QEnumLookup *enum_table;
- int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
- void (*set_default_value)(ObjectProperty *op, const Property *prop);
- void (*create)(ObjectClass *oc, Property *prop);
- ObjectPropertyAccessor *get;
- ObjectPropertyAccessor *set;
- ObjectPropertyRelease *release;
-};
-
/**
* GlobalProperty:
* @used: Set to true if property was used when initializing a device.
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 4437450065..db7ce51dd5 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -3,6 +3,44 @@
#include "hw/qdev-core.h"
+/**
+ * Property:
+ * @set_default: true if the default value should be set from @defval,
+ * in which case @info->set_default_value must not be NULL
+ * (if false then no default value is set by the property system
+ * and the field retains whatever value it was given by instance_init).
+ * @defval: default value for the property. This is used only if @set_default
+ * is true.
+ */
+struct Property {
+ const char *name;
+ const PropertyInfo *info;
+ ptrdiff_t offset;
+ uint8_t bitnr;
+ bool set_default;
+ union {
+ int64_t i;
+ uint64_t u;
+ } defval;
+ int arrayoffset;
+ const PropertyInfo *arrayinfo;
+ int arrayfieldsize;
+ const char *link_type;
+};
+
+struct PropertyInfo {
+ const char *name;
+ const char *description;
+ const QEnumLookup *enum_table;
+ int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
+ void (*set_default_value)(ObjectProperty *op, const Property *prop);
+ void (*create)(ObjectClass *oc, Property *prop);
+ ObjectPropertyAccessor *get;
+ ObjectPropertyAccessor *set;
+ ObjectPropertyRelease *release;
+};
+
+
/*** qdev-properties.c ***/
extern const PropertyInfo qdev_prop_bit;
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 509cbf155d..12a053e732 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -929,3 +929,123 @@ const PropertyInfo qdev_prop_link = {
.name = "link",
.create = create_link_property,
};
+
+void qdev_property_add_static(DeviceState *dev, Property *prop)
+{
+ Object *obj = OBJECT(dev);
+ ObjectProperty *op;
+
+ assert(!prop->info->create);
+
+ op = object_property_add(obj, prop->name, prop->info->name,
+ prop->info->get, prop->info->set,
+ prop->info->release,
+ prop);
+
+ object_property_set_description(obj, prop->name,
+ prop->info->description);
+
+ if (prop->set_default) {
+ prop->info->set_default_value(op, prop);
+ if (op->init) {
+ op->init(obj, op);
+ }
+ }
+}
+
+static void qdev_class_add_property(DeviceClass *klass, Property *prop)
+{
+ ObjectClass *oc = OBJECT_CLASS(klass);
+
+ if (prop->info->create) {
+ prop->info->create(oc, prop);
+ } else {
+ ObjectProperty *op;
+
+ op = object_class_property_add(oc,
+ prop->name, prop->info->name,
+ prop->info->get, prop->info->set,
+ prop->info->release,
+ prop);
+ if (prop->set_default) {
+ prop->info->set_default_value(op, prop);
+ }
+ }
+ object_class_property_set_description(oc, prop->name,
+ prop->info->description);
+}
+
+/**
+ * Legacy property handling
+ */
+
+static void qdev_get_legacy_property(Object *obj, Visitor *v,
+ const char *name, void *opaque,
+ Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+
+ char buffer[1024];
+ char *ptr = buffer;
+
+ prop->info->print(dev, prop, buffer, sizeof(buffer));
+ visit_type_str(v, name, &ptr, errp);
+}
+
+/**
+ * qdev_class_add_legacy_property:
+ * @dev: Device to add the property to.
+ * @prop: The qdev property definition.
+ *
+ * Add a legacy QOM property to @dev for qdev property @prop.
+ *
+ * Legacy properties are string versions of QOM properties. The format of
+ * the string depends on the property type. Legacy properties are only
+ * needed for "info qtree".
+ *
+ * Do not use this in new code! QOM Properties added through this interface
+ * will be given names in the "legacy" namespace.
+ */
+static void qdev_class_add_legacy_property(DeviceClass *dc, Property *prop)
+{
+ g_autofree char *name = NULL;
+
+ /* Register pointer properties as legacy properties */
+ if (!prop->info->print && prop->info->get) {
+ return;
+ }
+
+ name = g_strdup_printf("legacy-%s", prop->name);
+ object_class_property_add(OBJECT_CLASS(dc), name, "str",
+ prop->info->print ? qdev_get_legacy_property : prop->info->get,
+ NULL, NULL, prop);
+}
+
+void device_class_set_props(DeviceClass *dc, Property *props)
+{
+ Property *prop;
+
+ dc->props_ = props;
+ for (prop = props; prop && prop->name; prop++) {
+ qdev_class_add_legacy_property(dc, prop);
+ qdev_class_add_property(dc, prop);
+ }
+}
+
+void qdev_alias_all_properties(DeviceState *target, Object *source)
+{
+ ObjectClass *class;
+ Property *prop;
+
+ class = object_get_class(OBJECT(target));
+ do {
+ DeviceClass *dc = DEVICE_CLASS(class);
+
+ for (prop = dc->props_; prop && prop->name; prop++) {
+ object_property_add_alias(source, prop->name,
+ OBJECT(target), prop->name);
+ }
+ class = object_class_get_parent(class);
+ } while (class != object_class_by_name(TYPE_DEVICE));
+}
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index cbdff0b6c6..d3611e7c03 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -705,115 +705,6 @@ char *qdev_get_dev_path(DeviceState *dev)
return NULL;
}
-/**
- * Legacy property handling
- */
-
-static void qdev_get_legacy_property(Object *obj, Visitor *v,
- const char *name, void *opaque,
- Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
-
- char buffer[1024];
- char *ptr = buffer;
-
- prop->info->print(dev, prop, buffer, sizeof(buffer));
- visit_type_str(v, name, &ptr, errp);
-}
-
-/**
- * qdev_class_add_legacy_property:
- * @dev: Device to add the property to.
- * @prop: The qdev property definition.
- *
- * Add a legacy QOM property to @dev for qdev property @prop.
- *
- * Legacy properties are string versions of QOM properties. The format of
- * the string depends on the property type. Legacy properties are only
- * needed for "info qtree".
- *
- * Do not use this in new code! QOM Properties added through this interface
- * will be given names in the "legacy" namespace.
- */
-static void qdev_class_add_legacy_property(DeviceClass *dc, Property *prop)
-{
- g_autofree char *name = NULL;
-
- /* Register pointer properties as legacy properties */
- if (!prop->info->print && prop->info->get) {
- return;
- }
-
- name = g_strdup_printf("legacy-%s", prop->name);
- object_class_property_add(OBJECT_CLASS(dc), name, "str",
- prop->info->print ? qdev_get_legacy_property : prop->info->get,
- NULL, NULL, prop);
-}
-
-void qdev_property_add_static(DeviceState *dev, Property *prop)
-{
- Object *obj = OBJECT(dev);
- ObjectProperty *op;
-
- assert(!prop->info->create);
-
- op = object_property_add(obj, prop->name, prop->info->name,
- prop->info->get, prop->info->set,
- prop->info->release,
- prop);
-
- object_property_set_description(obj, prop->name,
- prop->info->description);
-
- if (prop->set_default) {
- prop->info->set_default_value(op, prop);
- if (op->init) {
- op->init(obj, op);
- }
- }
-}
-
-static void qdev_class_add_property(DeviceClass *klass, Property *prop)
-{
- ObjectClass *oc = OBJECT_CLASS(klass);
-
- if (prop->info->create) {
- prop->info->create(oc, prop);
- } else {
- ObjectProperty *op;
-
- op = object_class_property_add(oc,
- prop->name, prop->info->name,
- prop->info->get, prop->info->set,
- prop->info->release,
- prop);
- if (prop->set_default) {
- prop->info->set_default_value(op, prop);
- }
- }
- object_class_property_set_description(oc, prop->name,
- prop->info->description);
-}
-
-void qdev_alias_all_properties(DeviceState *target, Object *source)
-{
- ObjectClass *class;
- Property *prop;
-
- class = object_get_class(OBJECT(target));
- do {
- DeviceClass *dc = DEVICE_CLASS(class);
-
- for (prop = dc->props_; prop && prop->name; prop++) {
- object_property_add_alias(source, prop->name,
- OBJECT(target), prop->name);
- }
- class = object_class_get_parent(class);
- } while (class != object_class_by_name(TYPE_DEVICE));
-}
-
static bool device_get_realized(Object *obj, Error **errp)
{
DeviceState *dev = DEVICE(obj);
@@ -1208,17 +1099,6 @@ static void device_class_init(ObjectClass *class, void *data)
offsetof(DeviceState, parent_bus), NULL, 0);
}
-void device_class_set_props(DeviceClass *dc, Property *props)
-{
- Property *prop;
-
- dc->props_ = props;
- for (prop = props; prop && prop->name; prop++) {
- qdev_class_add_legacy_property(dc, prop);
- qdev_class_add_property(dc, prop);
- }
-}
-
void device_class_set_parent_reset(DeviceClass *dc,
DeviceReset dev_reset,
DeviceReset *parent_reset)
diff --git a/softmmu/qdev-monitor.c b/softmmu/qdev-monitor.c
index 832e254842..8c072e3efc 100644
--- a/softmmu/qdev-monitor.c
+++ b/softmmu/qdev-monitor.c
@@ -38,6 +38,7 @@
#include "migration/misc.h"
#include "migration/migration.h"
#include "qemu/cutils.h"
+#include "hw/qdev-properties.h"
#include "hw/clock.h"
/*
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 04/32] qdev: Check dev->realized at set_size()
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (2 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 03/32] qdev: Move property code to qdev-properties.[ch] Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 05/32] sparc: Check dev->realized at sparc_set_nwindows() Eduardo Habkost
` (28 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
This setter is one of the very few property setters that don't
check dev->realized, and there's no reason to make size
properties different from the rest. Add the missing check.
Fixes: e8cd45c78f53 ("qdev: Add SIZE type to qdev properties")
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 12a053e732..67ae19df05 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -905,6 +905,11 @@ static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
Property *prop = opaque;
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
visit_type_size(v, name, ptr, errp);
}
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 05/32] sparc: Check dev->realized at sparc_set_nwindows()
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (3 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 04/32] qdev: Check dev->realized at set_size() Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-15 11:45 ` Mark Cave-Ayland
2020-12-11 22:05 ` [PATCH v4 06/32] qdev: Don't use dev->id on set_size32() error message Eduardo Habkost
` (27 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Mark Cave-Ayland,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Igor Mammedov, Philippe Mathieu-Daudé, Artyom Tarasenko,
Stefan Berger
sparc_set_nwindows() is one of the very few property setters that
don't check dev->realized, and there's no reason for it to be
special. Check dev->realized like the other setters.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Cc: Artyom Tarasenko <atar4qemu@gmail.com>
Cc: qemu-devel@nongnu.org
---
target/sparc/cpu.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index 701e794eac..6a3299041f 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -798,11 +798,17 @@ static void sparc_get_nwindows(Object *obj, Visitor *v, const char *name,
static void sparc_set_nwindows(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
+ DeviceState *dev = DEVICE(obj);
const int64_t min = MIN_NWINDOWS;
const int64_t max = MAX_NWINDOWS;
SPARCCPU *cpu = SPARC_CPU(obj);
int64_t value;
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
if (!visit_type_int(v, name, &value, errp)) {
return;
}
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 06/32] qdev: Don't use dev->id on set_size32() error message
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (4 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 05/32] sparc: Check dev->realized at sparc_set_nwindows() Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 07/32] qdev: Make PropertyInfo.print method get Object* argument Eduardo Habkost
` (26 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
All other qdev property error messages use "<type>.<property>"
instead of "<id>.<property>". Change set_size32() for consistency,
and to make the code not specific to TYPE_DEVICE.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 67ae19df05..daf844c2d3 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -542,7 +542,7 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
error_setg(errp,
"Property %s.%s doesn't take value %" PRIu64
" (maximum: %u)",
- dev->id ? : "", name, value, UINT32_MAX);
+ object_get_typename(obj), name, value, UINT32_MAX);
return;
}
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 07/32] qdev: Make PropertyInfo.print method get Object* argument
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (5 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 06/32] qdev: Don't use dev->id on set_size32() error message Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 08/32] qdev: Make bit_prop_set() " Eduardo Habkost
` (25 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Make the code more generic and not specific to TYPE_DEVICE.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
include/hw/qdev-properties.h | 2 +-
hw/core/qdev-properties-system.c | 3 ++-
hw/core/qdev-properties.c | 3 +--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index db7ce51dd5..0ea822e6a7 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -32,7 +32,7 @@ struct PropertyInfo {
const char *name;
const char *description;
const QEnumLookup *enum_table;
- int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len);
+ int (*print)(Object *obj, Property *prop, char *dest, size_t len);
void (*set_default_value)(ObjectProperty *op, const Property *prop);
void (*create)(ObjectClass *oc, Property *prop);
ObjectPropertyAccessor *get;
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 8912fb4e9c..77b31eb9dc 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -801,9 +801,10 @@ invalid:
g_free(str);
}
-static int print_pci_devfn(DeviceState *dev, Property *prop, char *dest,
+static int print_pci_devfn(Object *obj, Property *prop, char *dest,
size_t len)
{
+ DeviceState *dev = DEVICE(obj);
int32_t *ptr = qdev_get_prop_ptr(dev, prop);
if (*ptr == -1) {
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index daf844c2d3..b6cf53e929 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -988,13 +988,12 @@ static void qdev_get_legacy_property(Object *obj, Visitor *v,
const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
char buffer[1024];
char *ptr = buffer;
- prop->info->print(dev, prop, buffer, sizeof(buffer));
+ prop->info->print(obj, prop, buffer, sizeof(buffer));
visit_type_str(v, name, &ptr, errp);
}
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 08/32] qdev: Make bit_prop_set() get Object* argument
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (6 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 07/32] qdev: Make PropertyInfo.print method get Object* argument Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 09/32] qdev: Make qdev_get_prop_ptr() get Object* arg Eduardo Habkost
` (24 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Make the code more generic and not specific to TYPE_DEVICE.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index b6cf53e929..3a4638f4de 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -92,8 +92,9 @@ static uint32_t qdev_get_prop_mask(Property *prop)
return 0x1 << prop->bitnr;
}
-static void bit_prop_set(DeviceState *dev, Property *props, bool val)
+static void bit_prop_set(Object *obj, Property *props, bool val)
{
+ DeviceState *dev = DEVICE(obj);
uint32_t *p = qdev_get_prop_ptr(dev, props);
uint32_t mask = qdev_get_prop_mask(props);
if (val) {
@@ -129,7 +130,7 @@ static void prop_set_bit(Object *obj, Visitor *v, const char *name,
if (!visit_type_bool(v, name, &value, errp)) {
return;
}
- bit_prop_set(dev, prop, value);
+ bit_prop_set(obj, prop, value);
}
static void set_default_value_bool(ObjectProperty *op, const Property *prop)
@@ -153,8 +154,9 @@ static uint64_t qdev_get_prop_mask64(Property *prop)
return 0x1ull << prop->bitnr;
}
-static void bit64_prop_set(DeviceState *dev, Property *props, bool val)
+static void bit64_prop_set(Object *obj, Property *props, bool val)
{
+ DeviceState *dev = DEVICE(obj);
uint64_t *p = qdev_get_prop_ptr(dev, props);
uint64_t mask = qdev_get_prop_mask64(props);
if (val) {
@@ -190,7 +192,7 @@ static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
if (!visit_type_bool(v, name, &value, errp)) {
return;
}
- bit64_prop_set(dev, prop, value);
+ bit64_prop_set(obj, prop, value);
}
const PropertyInfo qdev_prop_bit64 = {
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 09/32] qdev: Make qdev_get_prop_ptr() get Object* arg
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (7 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 08/32] qdev: Make bit_prop_set() " Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 7:46 ` Paul Durrant
2020-12-11 22:05 ` [PATCH v4 10/32] qdev: Make qdev_find_global_prop() get Object* argument Eduardo Habkost
` (23 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Matthew Rosato, David Hildenbrand, Stefano Stabellini, xen-devel,
qemu-block, Stefan Berger, Paul Durrant, Markus Armbruster,
Halil Pasic, Christian Borntraeger, Anthony Perard,
Marc-André Lureau, Philippe Mathieu-Daudé, Thomas Huth,
Alex Williamson, Igor Mammedov, John Snow, Richard Henderson,
Kevin Wolf, Daniel P. Berrange, Cornelia Huck, qemu-s390x,
Max Reitz, Paolo Bonzini, Stefan Berger
Make the code more generic and not specific to TYPE_DEVICE.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com> #s390 parts
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
- Fix build error with CONFIG_XEN
I took the liberty of keeping the Reviewed-by line from
Marc-André as the build fix is a trivial one line change
---
Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Anthony Perard <anthony.perard@citrix.com>
Cc: Paul Durrant <paul@xen.org>
Cc: Kevin Wolf <kwolf@redhat.com>
Cc: Max Reitz <mreitz@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Cornelia Huck <cohuck@redhat.com>
Cc: Thomas Huth <thuth@redhat.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: David Hildenbrand <david@redhat.com>
Cc: Halil Pasic <pasic@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Matthew Rosato <mjrosato@linux.ibm.com>
Cc: Alex Williamson <alex.williamson@redhat.com>
Cc: qemu-devel@nongnu.org
Cc: xen-devel@lists.xenproject.org
Cc: qemu-block@nongnu.org
Cc: qemu-s390x@nongnu.org
---
include/hw/qdev-properties.h | 2 +-
backends/tpm/tpm_util.c | 8 ++--
hw/block/xen-block.c | 5 +-
hw/core/qdev-properties-system.c | 57 +++++++++-------------
hw/core/qdev-properties.c | 82 +++++++++++++-------------------
hw/s390x/css.c | 5 +-
hw/s390x/s390-pci-bus.c | 4 +-
hw/vfio/pci-quirks.c | 5 +-
8 files changed, 68 insertions(+), 100 deletions(-)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 0ea822e6a7..0b92cfc761 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -302,7 +302,7 @@ void qdev_prop_set_macaddr(DeviceState *dev, const char *name,
const uint8_t *value);
void qdev_prop_set_enum(DeviceState *dev, const char *name, int value);
-void *qdev_get_prop_ptr(DeviceState *dev, Property *prop);
+void *qdev_get_prop_ptr(Object *obj, Property *prop);
void qdev_prop_register_global(GlobalProperty *prop);
const GlobalProperty *qdev_find_global_prop(DeviceState *dev,
diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c
index e6aeb63587..3973105658 100644
--- a/backends/tpm/tpm_util.c
+++ b/backends/tpm/tpm_util.c
@@ -35,8 +35,7 @@
static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
- TPMBackend **be = qdev_get_prop_ptr(dev, opaque);
+ TPMBackend **be = qdev_get_prop_ptr(obj, opaque);
char *p;
p = g_strdup(*be ? (*be)->id : "");
@@ -49,7 +48,7 @@ static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- TPMBackend *s, **be = qdev_get_prop_ptr(dev, prop);
+ TPMBackend *s, **be = qdev_get_prop_ptr(obj, prop);
char *str;
if (dev->realized) {
@@ -73,9 +72,8 @@ static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
static void release_tpm(Object *obj, const char *name, void *opaque)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- TPMBackend **be = qdev_get_prop_ptr(dev, prop);
+ TPMBackend **be = qdev_get_prop_ptr(obj, prop);
if (*be) {
tpm_backend_reset(*be);
diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
index 8a7a3f5452..905e4acd97 100644
--- a/hw/block/xen-block.c
+++ b/hw/block/xen-block.c
@@ -335,9 +335,8 @@ static char *disk_to_vbd_name(unsigned int disk)
static void xen_block_get_vdev(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- XenBlockVdev *vdev = qdev_get_prop_ptr(dev, prop);
+ XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
char *str;
switch (vdev->type) {
@@ -398,7 +397,7 @@ static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- XenBlockVdev *vdev = qdev_get_prop_ptr(dev, prop);
+ XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
char *str, *p;
const char *end;
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 77b31eb9dc..9ac9b95852 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -59,9 +59,8 @@ static bool check_prop_still_unset(DeviceState *dev, const char *name,
static void get_drive(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- void **ptr = qdev_get_prop_ptr(dev, prop);
+ void **ptr = qdev_get_prop_ptr(obj, prop);
const char *value;
char *p;
@@ -87,7 +86,7 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- void **ptr = qdev_get_prop_ptr(dev, prop);
+ void **ptr = qdev_get_prop_ptr(obj, prop);
char *str;
BlockBackend *blk;
bool blk_created = false;
@@ -185,7 +184,7 @@ static void release_drive(Object *obj, const char *name, void *opaque)
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- BlockBackend **ptr = qdev_get_prop_ptr(dev, prop);
+ BlockBackend **ptr = qdev_get_prop_ptr(obj, prop);
if (*ptr) {
AioContext *ctx = blk_get_aio_context(*ptr);
@@ -218,8 +217,7 @@ const PropertyInfo qdev_prop_drive_iothread = {
static void get_chr(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
- CharBackend *be = qdev_get_prop_ptr(dev, opaque);
+ CharBackend *be = qdev_get_prop_ptr(obj, opaque);
char *p;
p = g_strdup(be->chr && be->chr->label ? be->chr->label : "");
@@ -232,7 +230,7 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- CharBackend *be = qdev_get_prop_ptr(dev, prop);
+ CharBackend *be = qdev_get_prop_ptr(obj, prop);
Chardev *s;
char *str;
@@ -272,9 +270,8 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
static void release_chr(Object *obj, const char *name, void *opaque)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- CharBackend *be = qdev_get_prop_ptr(dev, prop);
+ CharBackend *be = qdev_get_prop_ptr(obj, prop);
qemu_chr_fe_deinit(be, false);
}
@@ -297,9 +294,8 @@ const PropertyInfo qdev_prop_chr = {
static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- MACAddr *mac = qdev_get_prop_ptr(dev, prop);
+ MACAddr *mac = qdev_get_prop_ptr(obj, prop);
char buffer[2 * 6 + 5 + 1];
char *p = buffer;
@@ -315,7 +311,7 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- MACAddr *mac = qdev_get_prop_ptr(dev, prop);
+ MACAddr *mac = qdev_get_prop_ptr(obj, prop);
int i, pos;
char *str;
const char *p;
@@ -381,9 +377,8 @@ void qdev_prop_set_macaddr(DeviceState *dev, const char *name,
static void get_netdev(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- NICPeers *peers_ptr = qdev_get_prop_ptr(dev, prop);
+ NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
char *p = g_strdup(peers_ptr->ncs[0] ? peers_ptr->ncs[0]->name : "");
visit_type_str(v, name, &p, errp);
@@ -395,7 +390,7 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- NICPeers *peers_ptr = qdev_get_prop_ptr(dev, prop);
+ NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
NetClientState **ncs = peers_ptr->ncs;
NetClientState *peers[MAX_QUEUE_NUM];
int queues, err = 0, i = 0;
@@ -461,9 +456,8 @@ const PropertyInfo qdev_prop_netdev = {
static void get_audiodev(Object *obj, Visitor *v, const char* name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- QEMUSoundCard *card = qdev_get_prop_ptr(dev, prop);
+ QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
char *p = g_strdup(audio_get_id(card));
visit_type_str(v, name, &p, errp);
@@ -475,7 +469,7 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- QEMUSoundCard *card = qdev_get_prop_ptr(dev, prop);
+ QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
AudioState *state;
int err = 0;
char *str;
@@ -582,7 +576,7 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
uint64_t value;
Error *local_err = NULL;
@@ -674,9 +668,8 @@ const PropertyInfo qdev_prop_multifd_compression = {
static void get_reserved_region(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- ReservedRegion *rr = qdev_get_prop_ptr(dev, prop);
+ ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
char buffer[64];
char *p = buffer;
int rc;
@@ -693,7 +686,7 @@ static void set_reserved_region(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- ReservedRegion *rr = qdev_get_prop_ptr(dev, prop);
+ ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
Error *local_err = NULL;
const char *endptr;
char *str;
@@ -761,7 +754,7 @@ static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- int32_t value, *ptr = qdev_get_prop_ptr(dev, prop);
+ int32_t value, *ptr = qdev_get_prop_ptr(obj, prop);
unsigned int slot, fn, n;
char *str;
@@ -804,8 +797,7 @@ invalid:
static int print_pci_devfn(Object *obj, Property *prop, char *dest,
size_t len)
{
- DeviceState *dev = DEVICE(obj);
- int32_t *ptr = qdev_get_prop_ptr(dev, prop);
+ int32_t *ptr = qdev_get_prop_ptr(obj, prop);
if (*ptr == -1) {
return snprintf(dest, len, "<unset>");
@@ -828,9 +820,8 @@ const PropertyInfo qdev_prop_pci_devfn = {
static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- PCIHostDeviceAddress *addr = qdev_get_prop_ptr(dev, prop);
+ PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
char buffer[] = "ffff:ff:ff.f";
char *p = buffer;
int rc = 0;
@@ -857,7 +848,7 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- PCIHostDeviceAddress *addr = qdev_get_prop_ptr(dev, prop);
+ PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
char *str, *p;
char *e;
unsigned long val;
@@ -951,9 +942,8 @@ const PropertyInfo qdev_prop_off_auto_pcibar = {
static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- PCIExpLinkSpeed *p = qdev_get_prop_ptr(dev, prop);
+ PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
int speed;
switch (*p) {
@@ -982,7 +972,7 @@ static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- PCIExpLinkSpeed *p = qdev_get_prop_ptr(dev, prop);
+ PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
int speed;
if (dev->realized) {
@@ -1028,9 +1018,8 @@ const PropertyInfo qdev_prop_pcie_link_speed = {
static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- PCIExpLinkWidth *p = qdev_get_prop_ptr(dev, prop);
+ PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
int width;
switch (*p) {
@@ -1068,7 +1057,7 @@ static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- PCIExpLinkWidth *p = qdev_get_prop_ptr(dev, prop);
+ PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
int width;
if (dev->realized) {
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 3a4638f4de..0a54a922c8 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -38,9 +38,9 @@ void qdev_prop_allow_set_link_before_realize(const Object *obj,
}
}
-void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
+void *qdev_get_prop_ptr(Object *obj, Property *prop)
{
- void *ptr = dev;
+ void *ptr = obj;
ptr += prop->offset;
return ptr;
}
@@ -48,9 +48,8 @@ void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- int *ptr = qdev_get_prop_ptr(dev, prop);
+ int *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
}
@@ -60,7 +59,7 @@ void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- int *ptr = qdev_get_prop_ptr(dev, prop);
+ int *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
@@ -94,8 +93,7 @@ static uint32_t qdev_get_prop_mask(Property *prop)
static void bit_prop_set(Object *obj, Property *props, bool val)
{
- DeviceState *dev = DEVICE(obj);
- uint32_t *p = qdev_get_prop_ptr(dev, props);
+ uint32_t *p = qdev_get_prop_ptr(obj, props);
uint32_t mask = qdev_get_prop_mask(props);
if (val) {
*p |= mask;
@@ -107,9 +105,8 @@ static void bit_prop_set(Object *obj, Property *props, bool val)
static void prop_get_bit(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint32_t *p = qdev_get_prop_ptr(dev, prop);
+ uint32_t *p = qdev_get_prop_ptr(obj, prop);
bool value = (*p & qdev_get_prop_mask(prop)) != 0;
visit_type_bool(v, name, &value, errp);
@@ -156,8 +153,7 @@ static uint64_t qdev_get_prop_mask64(Property *prop)
static void bit64_prop_set(Object *obj, Property *props, bool val)
{
- DeviceState *dev = DEVICE(obj);
- uint64_t *p = qdev_get_prop_ptr(dev, props);
+ uint64_t *p = qdev_get_prop_ptr(obj, props);
uint64_t mask = qdev_get_prop_mask64(props);
if (val) {
*p |= mask;
@@ -169,9 +165,8 @@ static void bit64_prop_set(Object *obj, Property *props, bool val)
static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint64_t *p = qdev_get_prop_ptr(dev, prop);
+ uint64_t *p = qdev_get_prop_ptr(obj, prop);
bool value = (*p & qdev_get_prop_mask64(prop)) != 0;
visit_type_bool(v, name, &value, errp);
@@ -208,9 +203,8 @@ const PropertyInfo qdev_prop_bit64 = {
static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- bool *ptr = qdev_get_prop_ptr(dev, prop);
+ bool *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_bool(v, name, ptr, errp);
}
@@ -220,7 +214,7 @@ static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- bool *ptr = qdev_get_prop_ptr(dev, prop);
+ bool *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
@@ -242,9 +236,8 @@ const PropertyInfo qdev_prop_bool = {
static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint8_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_uint8(v, name, ptr, errp);
}
@@ -254,7 +247,7 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint8_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
@@ -288,9 +281,8 @@ const PropertyInfo qdev_prop_uint8 = {
void qdev_propinfo_get_uint16(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint16_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_uint16(v, name, ptr, errp);
}
@@ -300,7 +292,7 @@ static void set_uint16(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint16_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
@@ -322,9 +314,8 @@ const PropertyInfo qdev_prop_uint16 = {
static void get_uint32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_uint32(v, name, ptr, errp);
}
@@ -334,7 +325,7 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
@@ -347,9 +338,8 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- int32_t *ptr = qdev_get_prop_ptr(dev, prop);
+ int32_t *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_int32(v, name, ptr, errp);
}
@@ -359,7 +349,7 @@ static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- int32_t *ptr = qdev_get_prop_ptr(dev, prop);
+ int32_t *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
@@ -388,9 +378,8 @@ const PropertyInfo qdev_prop_int32 = {
static void get_uint64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_uint64(v, name, ptr, errp);
}
@@ -400,7 +389,7 @@ static void set_uint64(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
@@ -413,9 +402,8 @@ static void set_uint64(Object *obj, Visitor *v, const char *name,
static void get_int64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- int64_t *ptr = qdev_get_prop_ptr(dev, prop);
+ int64_t *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_int64(v, name, ptr, errp);
}
@@ -425,7 +413,7 @@ static void set_int64(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- int64_t *ptr = qdev_get_prop_ptr(dev, prop);
+ int64_t *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
@@ -454,15 +442,14 @@ const PropertyInfo qdev_prop_int64 = {
static void release_string(Object *obj, const char *name, void *opaque)
{
Property *prop = opaque;
- g_free(*(char **)qdev_get_prop_ptr(DEVICE(obj), prop));
+ g_free(*(char **)qdev_get_prop_ptr(obj, prop));
}
static void get_string(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- char **ptr = qdev_get_prop_ptr(dev, prop);
+ char **ptr = qdev_get_prop_ptr(obj, prop);
if (!*ptr) {
char *str = (char *)"";
@@ -477,7 +464,7 @@ static void set_string(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- char **ptr = qdev_get_prop_ptr(dev, prop);
+ char **ptr = qdev_get_prop_ptr(obj, prop);
char *str;
if (dev->realized) {
@@ -515,9 +502,8 @@ const PropertyInfo qdev_prop_on_off_auto = {
void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
uint64_t value = *ptr;
visit_type_size(v, name, &value, errp);
@@ -528,7 +514,7 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
uint64_t value;
if (dev->realized) {
@@ -563,9 +549,8 @@ const PropertyInfo qdev_prop_size32 = {
static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- QemuUUID *uuid = qdev_get_prop_ptr(dev, prop);
+ QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
char buffer[UUID_FMT_LEN + 1];
char *p = buffer;
@@ -581,7 +566,7 @@ static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- QemuUUID *uuid = qdev_get_prop_ptr(dev, prop);
+ QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
char *str;
if (dev->realized) {
@@ -653,7 +638,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
*/
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint32_t *alenptr = qdev_get_prop_ptr(dev, prop);
+ uint32_t *alenptr = qdev_get_prop_ptr(obj, prop);
void **arrayptr = (void *)dev + prop->arrayoffset;
void *eltptr;
const char *arrayname;
@@ -699,7 +684,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
* being inside the device struct.
*/
arrayprop->prop.offset = eltptr - (void *)dev;
- assert(qdev_get_prop_ptr(dev, &arrayprop->prop) == eltptr);
+ assert(qdev_get_prop_ptr(obj, &arrayprop->prop) == eltptr);
object_property_add(obj, propname,
arrayprop->prop.info->name,
arrayprop->prop.info->get,
@@ -893,9 +878,8 @@ void qdev_prop_set_globals(DeviceState *dev)
static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_size(v, name, ptr, errp);
}
@@ -905,7 +889,7 @@ static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 9961cfe7bf..2b8f33fec2 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -2343,9 +2343,8 @@ void css_reset(void)
static void get_css_devid(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- CssDevId *dev_id = qdev_get_prop_ptr(dev, prop);
+ CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
char buffer[] = "xx.x.xxxx";
char *p = buffer;
int r;
@@ -2375,7 +2374,7 @@ static void set_css_devid(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- CssDevId *dev_id = qdev_get_prop_ptr(dev, prop);
+ CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
char *str;
int num, n1, n2;
unsigned int cssid, ssid, devid;
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index 05f7460aec..8b6be1197b 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -1330,7 +1330,7 @@ static void s390_pci_get_fid(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(DEVICE(obj), prop);
+ uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_uint32(v, name, ptr, errp);
}
@@ -1341,7 +1341,7 @@ static void s390_pci_set_fid(Object *obj, Visitor *v, const char *name,
DeviceState *dev = DEVICE(obj);
S390PCIBusDevice *zpci = S390_PCI_DEVICE(obj);
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c
index 57150913b7..53569925a2 100644
--- a/hw/vfio/pci-quirks.c
+++ b/hw/vfio/pci-quirks.c
@@ -1488,9 +1488,8 @@ static void get_nv_gpudirect_clique_id(Object *obj, Visitor *v,
const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint8_t *ptr = qdev_get_prop_ptr(dev, prop);
+ uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
visit_type_uint8(v, name, ptr, errp);
}
@@ -1501,7 +1500,7 @@ static void set_nv_gpudirect_clique_id(Object *obj, Visitor *v,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint8_t value, *ptr = qdev_get_prop_ptr(dev, prop);
+ uint8_t value, *ptr = qdev_get_prop_ptr(obj, prop);
if (dev->realized) {
qdev_prop_set_after_realize(dev, name, errp);
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 10/32] qdev: Make qdev_find_global_prop() get Object* argument
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (8 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 09/32] qdev: Make qdev_get_prop_ptr() get Object* arg Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 11/32] qdev: Make check_prop_still_unset() " Eduardo Habkost
` (22 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Make the code more generic and not specific to TYPE_DEVICE.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
include/hw/qdev-properties.h | 2 +-
hw/core/qdev-properties-system.c | 2 +-
hw/core/qdev-properties.c | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 0b92cfc761..7620095fed 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -305,7 +305,7 @@ void qdev_prop_set_enum(DeviceState *dev, const char *name, int value);
void *qdev_get_prop_ptr(Object *obj, Property *prop);
void qdev_prop_register_global(GlobalProperty *prop);
-const GlobalProperty *qdev_find_global_prop(DeviceState *dev,
+const GlobalProperty *qdev_find_global_prop(Object *obj,
const char *name);
int qdev_prop_check_globals(void);
void qdev_prop_set_globals(DeviceState *dev);
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 9ac9b95852..57e63c6949 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -36,7 +36,7 @@ static bool check_prop_still_unset(DeviceState *dev, const char *name,
const void *old_val, const char *new_val,
Error **errp)
{
- const GlobalProperty *prop = qdev_find_global_prop(dev, name);
+ const GlobalProperty *prop = qdev_find_global_prop(OBJECT(dev), name);
if (!old_val) {
return true;
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 0a54a922c8..41482d83d1 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -818,7 +818,7 @@ void qdev_prop_register_global(GlobalProperty *prop)
g_ptr_array_add(global_props(), prop);
}
-const GlobalProperty *qdev_find_global_prop(DeviceState *dev,
+const GlobalProperty *qdev_find_global_prop(Object *obj,
const char *name)
{
GPtrArray *props = global_props();
@@ -827,7 +827,7 @@ const GlobalProperty *qdev_find_global_prop(DeviceState *dev,
for (i = 0; i < props->len; i++) {
p = g_ptr_array_index(props, i);
- if (object_dynamic_cast(OBJECT(dev), p->driver)
+ if (object_dynamic_cast(obj, p->driver)
&& !strcmp(p->property, name)) {
return p;
}
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 11/32] qdev: Make check_prop_still_unset() get Object* argument
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (9 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 10/32] qdev: Make qdev_find_global_prop() get Object* argument Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 12/32] qdev: Make error_set_from_qdev_prop_error() " Eduardo Habkost
` (21 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Make the code more generic and not specific to TYPE_DEVICE.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties-system.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 57e63c6949..58bb129bbe 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -32,11 +32,11 @@
#include "hw/pci/pci.h"
#include "util/block-helpers.h"
-static bool check_prop_still_unset(DeviceState *dev, const char *name,
+static bool check_prop_still_unset(Object *obj, const char *name,
const void *old_val, const char *new_val,
Error **errp)
{
- const GlobalProperty *prop = qdev_find_global_prop(OBJECT(dev), name);
+ const GlobalProperty *prop = qdev_find_global_prop(obj, name);
if (!old_val) {
return true;
@@ -105,7 +105,7 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
* TODO Should this really be an error? If no, the old value
* needs to be released before we store the new one.
*/
- if (!check_prop_still_unset(dev, name, *ptr, str, errp)) {
+ if (!check_prop_still_unset(obj, name, *ptr, str, errp)) {
return;
}
@@ -247,7 +247,7 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
* TODO Should this really be an error? If no, the old value
* needs to be released before we store the new one.
*/
- if (!check_prop_still_unset(dev, name, be->chr, str, errp)) {
+ if (!check_prop_still_unset(obj, name, be->chr, str, errp)) {
return;
}
@@ -429,7 +429,7 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
* TODO Should this really be an error? If no, the old value
* needs to be released before we store the new one.
*/
- if (!check_prop_still_unset(dev, name, ncs[i], str, errp)) {
+ if (!check_prop_still_unset(obj, name, ncs[i], str, errp)) {
goto out;
}
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 12/32] qdev: Make error_set_from_qdev_prop_error() get Object* argument
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (10 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 11/32] qdev: Make check_prop_still_unset() " Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 13/32] qdev: Make qdev_propinfo_get_uint16() static Eduardo Habkost
` (20 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Thomas Huth, Daniel P. Berrange, David Hildenbrand,
John Snow, Cornelia Huck, Markus Armbruster, Halil Pasic,
Christian Borntraeger, qemu-s390x, Paolo Bonzini,
Marc-André Lureau, Igor Mammedov, Richard Henderson,
Philippe Mathieu-Daudé, Stefan Berger
Make the code more generic and not specific to TYPE_DEVICE.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com> #s390 parts
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Cornelia Huck <cohuck@redhat.com>
Cc: Thomas Huth <thuth@redhat.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: David Hildenbrand <david@redhat.com>
Cc: Halil Pasic <pasic@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: qemu-devel@nongnu.org
Cc: qemu-s390x@nongnu.org
---
include/hw/qdev-properties.h | 2 +-
hw/core/qdev-properties-system.c | 10 +++++-----
hw/core/qdev-properties.c | 10 +++++-----
hw/s390x/css.c | 2 +-
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 7620095fed..530286e869 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -309,7 +309,7 @@ const GlobalProperty *qdev_find_global_prop(Object *obj,
const char *name);
int qdev_prop_check_globals(void);
void qdev_prop_set_globals(DeviceState *dev);
-void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
+void error_set_from_qdev_prop_error(Error **errp, int ret, Object *obj,
Property *prop, const char *value);
/**
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 58bb129bbe..5796ed2619 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -352,7 +352,7 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
return;
inval:
- error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
g_free(str);
}
@@ -440,7 +440,7 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
peers_ptr->queues = queues;
out:
- error_set_from_qdev_prop_error(errp, err, dev, prop, str);
+ error_set_from_qdev_prop_error(errp, err, obj, prop, str);
g_free(str);
}
@@ -492,7 +492,7 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
card->state = state;
out:
- error_set_from_qdev_prop_error(errp, err, dev, prop, str);
+ error_set_from_qdev_prop_error(errp, err, obj, prop, str);
g_free(str);
}
@@ -790,7 +790,7 @@ static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
return;
invalid:
- error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
g_free(str);
}
@@ -914,7 +914,7 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
return;
inval:
- error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
g_free(str);
}
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 41482d83d1..5e010afdb8 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -581,7 +581,7 @@ static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
if (!strcmp(str, UUID_VALUE_AUTO)) {
qemu_uuid_generate(uuid);
} else if (qemu_uuid_parse(str, uuid) < 0) {
- error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
}
g_free(str);
}
@@ -735,22 +735,22 @@ static Property *qdev_prop_find(DeviceState *dev, const char *name)
return NULL;
}
-void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
+void error_set_from_qdev_prop_error(Error **errp, int ret, Object *obj,
Property *prop, const char *value)
{
switch (ret) {
case -EEXIST:
error_setg(errp, "Property '%s.%s' can't take value '%s', it's in use",
- object_get_typename(OBJECT(dev)), prop->name, value);
+ object_get_typename(obj), prop->name, value);
break;
default:
case -EINVAL:
error_setg(errp, QERR_PROPERTY_VALUE_BAD,
- object_get_typename(OBJECT(dev)), prop->name, value);
+ object_get_typename(obj), prop->name, value);
break;
case -ENOENT:
error_setg(errp, "Property '%s.%s' can't find value '%s'",
- object_get_typename(OBJECT(dev)), prop->name, value);
+ object_get_typename(obj), prop->name, value);
break;
case 0:
break;
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 2b8f33fec2..38fd46b9a9 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -2390,7 +2390,7 @@ static void set_css_devid(Object *obj, Visitor *v, const char *name,
num = sscanf(str, "%2x.%1x%n.%4x%n", &cssid, &ssid, &n1, &devid, &n2);
if (num != 3 || (n2 - n1) != 5 || strlen(str) != n2) {
- error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
goto out;
}
if ((cssid > MAX_CSSID) || (ssid > MAX_SSID)) {
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 13/32] qdev: Make qdev_propinfo_get_uint16() static
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (11 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 12/32] qdev: Make error_set_from_qdev_prop_error() " Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 14/32] qdev: Move UUID property to qdev-properties-system.c Eduardo Habkost
` (19 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
There are no users of the function outside qdev-properties.c.
Make function static and rename it to get_uint16().
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-prop-internal.h | 2 --
hw/core/qdev-properties.c | 6 +++---
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/hw/core/qdev-prop-internal.h b/hw/core/qdev-prop-internal.h
index 9cf5cc1d51..d7b77844fe 100644
--- a/hw/core/qdev-prop-internal.h
+++ b/hw/core/qdev-prop-internal.h
@@ -20,8 +20,6 @@ void qdev_propinfo_set_default_value_int(ObjectProperty *op,
void qdev_propinfo_set_default_value_uint(ObjectProperty *op,
const Property *prop);
-void qdev_propinfo_get_uint16(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp);
void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp);
void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 5e010afdb8..765e916c23 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -278,8 +278,8 @@ const PropertyInfo qdev_prop_uint8 = {
/* --- 16bit integer --- */
-void qdev_propinfo_get_uint16(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
+static void get_uint16(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
Property *prop = opaque;
uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
@@ -304,7 +304,7 @@ static void set_uint16(Object *obj, Visitor *v, const char *name,
const PropertyInfo qdev_prop_uint16 = {
.name = "uint16",
- .get = qdev_propinfo_get_uint16,
+ .get = get_uint16,
.set = set_uint16,
.set_default_value = qdev_propinfo_set_default_value_uint,
};
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 14/32] qdev: Move UUID property to qdev-properties-system.c
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (12 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 13/32] qdev: Make qdev_propinfo_get_uint16() static Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 14:18 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h Eduardo Habkost
` (18 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Only softmmu code uses DEFINE_PROP_UUID, and it currently depends
on error_set_from_qdev_prop_error(). Move it to
qdev-properties-system.c to get out of our way when refactoring
the qdev property system.
We can eventually move it back to the core property system later,
after removing usage of error_set_from_qdev_prop_error().
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
This is a new patch added in series v2
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties-system.c | 57 ++++++++++++++++++++++++++++++++
hw/core/qdev-properties.c | 57 --------------------------------
2 files changed, 57 insertions(+), 57 deletions(-)
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 5796ed2619..7a9a1d6404 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -21,6 +21,7 @@
#include "qemu/ctype.h"
#include "qemu/cutils.h"
#include "qemu/units.h"
+#include "qemu/uuid.h"
#include "qemu/error-report.h"
#include "qdev-prop-internal.h"
@@ -1106,3 +1107,59 @@ const PropertyInfo qdev_prop_pcie_link_width = {
.set = set_prop_pcielinkwidth,
.set_default_value = qdev_propinfo_set_default_value_enum,
};
+
+/* --- UUID --- */
+
+static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
+ Error **errp)
+{
+ Property *prop = opaque;
+ QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
+ char buffer[UUID_FMT_LEN + 1];
+ char *p = buffer;
+
+ qemu_uuid_unparse(uuid, buffer);
+
+ visit_type_str(v, name, &p, errp);
+}
+
+#define UUID_VALUE_AUTO "auto"
+
+static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
+ Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+ Property *prop = opaque;
+ QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
+ char *str;
+
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return;
+ }
+
+ if (!visit_type_str(v, name, &str, errp)) {
+ return;
+ }
+
+ if (!strcmp(str, UUID_VALUE_AUTO)) {
+ qemu_uuid_generate(uuid);
+ } else if (qemu_uuid_parse(str, uuid) < 0) {
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
+ }
+ g_free(str);
+}
+
+static void set_default_uuid_auto(ObjectProperty *op, const Property *prop)
+{
+ object_property_set_default_str(op, UUID_VALUE_AUTO);
+}
+
+const PropertyInfo qdev_prop_uuid = {
+ .name = "str",
+ .description = "UUID (aka GUID) or \"" UUID_VALUE_AUTO
+ "\" for random value (default)",
+ .get = get_uuid,
+ .set = set_uuid,
+ .set_default_value = set_default_uuid_auto,
+};
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 765e916c23..a2eaa43831 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -6,7 +6,6 @@
#include "qemu/ctype.h"
#include "qemu/error-report.h"
#include "qapi/visitor.h"
-#include "qemu/uuid.h"
#include "qemu/units.h"
#include "qemu/cutils.h"
#include "qdev-prop-internal.h"
@@ -544,62 +543,6 @@ const PropertyInfo qdev_prop_size32 = {
.set_default_value = qdev_propinfo_set_default_value_uint,
};
-/* --- UUID --- */
-
-static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
- Error **errp)
-{
- Property *prop = opaque;
- QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
- char buffer[UUID_FMT_LEN + 1];
- char *p = buffer;
-
- qemu_uuid_unparse(uuid, buffer);
-
- visit_type_str(v, name, &p, errp);
-}
-
-#define UUID_VALUE_AUTO "auto"
-
-static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
- Error **errp)
-{
- DeviceState *dev = DEVICE(obj);
- Property *prop = opaque;
- QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
- char *str;
-
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
- if (!visit_type_str(v, name, &str, errp)) {
- return;
- }
-
- if (!strcmp(str, UUID_VALUE_AUTO)) {
- qemu_uuid_generate(uuid);
- } else if (qemu_uuid_parse(str, uuid) < 0) {
- error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
- }
- g_free(str);
-}
-
-static void set_default_uuid_auto(ObjectProperty *op, const Property *prop)
-{
- object_property_set_default_str(op, UUID_VALUE_AUTO);
-}
-
-const PropertyInfo qdev_prop_uuid = {
- .name = "str",
- .description = "UUID (aka GUID) or \"" UUID_VALUE_AUTO
- "\" for random value (default)",
- .get = get_uuid,
- .set = set_uuid,
- .set_default_value = set_default_uuid_auto,
-};
-
/* --- support for array properties --- */
/* Used as an opaque for the object properties we add for each
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (13 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 14/32] qdev: Move UUID property to qdev-properties-system.c Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 14:25 ` Igor Mammedov
2020-12-15 14:40 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 16/32] qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros Eduardo Habkost
` (17 subsequent siblings)
32 siblings, 2 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Move the property types and property macros implemented in
qdev-properties-system.c to a new qdev-properties-system.h
header.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
* Move UUID property type too, as it was moved to
qdev-properties-system.c in the previous patch
---
audio/audio.h | 1 +
include/hw/block/block.h | 1 +
include/hw/qdev-properties-system.h | 84 +++++++++++++++++++++++++++++
include/hw/qdev-properties.h | 75 --------------------------
include/net/net.h | 1 +
hw/acpi/vmgenid.c | 1 +
hw/arm/pxa2xx.c | 1 +
hw/arm/strongarm.c | 1 +
hw/block/fdc.c | 1 +
hw/block/m25p80.c | 1 +
hw/block/nand.c | 1 +
hw/block/onenand.c | 1 +
hw/block/pflash_cfi01.c | 1 +
hw/block/pflash_cfi02.c | 1 +
hw/block/vhost-user-blk.c | 1 +
hw/char/avr_usart.c | 1 +
hw/char/bcm2835_aux.c | 1 +
hw/char/cadence_uart.c | 1 +
hw/char/cmsdk-apb-uart.c | 1 +
hw/char/debugcon.c | 1 +
hw/char/digic-uart.c | 1 +
hw/char/escc.c | 1 +
hw/char/etraxfs_ser.c | 1 +
hw/char/exynos4210_uart.c | 1 +
hw/char/grlib_apbuart.c | 1 +
hw/char/ibex_uart.c | 1 +
hw/char/imx_serial.c | 1 +
hw/char/ipoctal232.c | 1 +
hw/char/lm32_juart.c | 1 +
hw/char/lm32_uart.c | 1 +
hw/char/mcf_uart.c | 1 +
hw/char/milkymist-uart.c | 1 +
hw/char/nrf51_uart.c | 1 +
hw/char/parallel.c | 1 +
hw/char/pl011.c | 1 +
hw/char/renesas_sci.c | 1 +
hw/char/sclpconsole-lm.c | 1 +
hw/char/sclpconsole.c | 1 +
hw/char/serial-pci-multi.c | 1 +
hw/char/serial.c | 1 +
hw/char/spapr_vty.c | 1 +
hw/char/stm32f2xx_usart.c | 1 +
hw/char/terminal3270.c | 1 +
hw/char/virtio-console.c | 1 +
hw/char/xilinx_uartlite.c | 1 +
hw/core/qdev-properties-system.c | 1 +
hw/hyperv/vmbus.c | 1 +
hw/i386/kvm/i8254.c | 1 +
hw/ide/qdev.c | 1 +
hw/ipmi/ipmi_bmc_extern.c | 1 +
hw/ipmi/ipmi_bmc_sim.c | 1 +
hw/misc/allwinner-sid.c | 1 +
hw/misc/ivshmem.c | 1 +
hw/misc/mac_via.c | 1 +
hw/misc/sifive_u_otp.c | 1 +
hw/net/rocker/rocker.c | 1 +
hw/nvram/eeprom_at24c.c | 1 +
hw/nvram/spapr_nvram.c | 1 +
hw/pci-bridge/gen_pcie_root_port.c | 1 +
hw/pci/pci.c | 1 +
hw/ppc/pnv_pnor.c | 1 +
hw/rdma/vmw/pvrdma_main.c | 1 +
hw/rtc/mc146818rtc.c | 1 +
hw/scsi/scsi-disk.c | 1 +
hw/scsi/scsi-generic.c | 1 +
hw/scsi/vhost-user-scsi.c | 1 +
hw/sd/sd.c | 1 +
hw/usb/ccid-card-passthru.c | 1 +
hw/usb/dev-serial.c | 1 +
hw/usb/redirect.c | 1 +
hw/vfio/pci.c | 1 +
hw/virtio/vhost-user-fs.c | 1 +
hw/virtio/vhost-user-vsock.c | 1 +
hw/virtio/virtio-iommu-pci.c | 1 +
hw/xen/xen_pt.c | 1 +
migration/migration.c | 1 +
76 files changed, 158 insertions(+), 75 deletions(-)
create mode 100644 include/hw/qdev-properties-system.h
diff --git a/audio/audio.h b/audio/audio.h
index b883ebfb1f..21fe3226ae 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -28,6 +28,7 @@
#include "qemu/queue.h"
#include "qapi/qapi-types-audio.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
typedef void (*audio_callback_fn) (void *opaque, int avail);
diff --git a/include/hw/block/block.h b/include/hw/block/block.h
index 1e8b6253dd..c172cbe65f 100644
--- a/include/hw/block/block.h
+++ b/include/hw/block/block.h
@@ -13,6 +13,7 @@
#include "exec/hwaddr.h"
#include "qapi/qapi-types-block-core.h"
+#include "hw/qdev-properties-system.h"
/* Configuration */
diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properties-system.h
new file mode 100644
index 0000000000..29529dc999
--- /dev/null
+++ b/include/hw/qdev-properties-system.h
@@ -0,0 +1,84 @@
+#ifndef HW_QDEV_PROPERTIES_SYSTEM_H
+#define HW_QDEV_PROPERTIES_SYSTEM_H
+
+#include "hw/qdev-properties.h"
+
+extern const PropertyInfo qdev_prop_chr;
+extern const PropertyInfo qdev_prop_macaddr;
+extern const PropertyInfo qdev_prop_reserved_region;
+extern const PropertyInfo qdev_prop_multifd_compression;
+extern const PropertyInfo qdev_prop_losttickpolicy;
+extern const PropertyInfo qdev_prop_blockdev_on_error;
+extern const PropertyInfo qdev_prop_bios_chs_trans;
+extern const PropertyInfo qdev_prop_fdc_drive_type;
+extern const PropertyInfo qdev_prop_drive;
+extern const PropertyInfo qdev_prop_drive_iothread;
+extern const PropertyInfo qdev_prop_netdev;
+extern const PropertyInfo qdev_prop_pci_devfn;
+extern const PropertyInfo qdev_prop_blocksize;
+extern const PropertyInfo qdev_prop_pci_host_devaddr;
+extern const PropertyInfo qdev_prop_uuid;
+extern const PropertyInfo qdev_prop_audiodev;
+extern const PropertyInfo qdev_prop_off_auto_pcibar;
+extern const PropertyInfo qdev_prop_pcie_link_speed;
+extern const PropertyInfo qdev_prop_pcie_link_width;
+
+#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t)
+
+#define DEFINE_PROP_CHR(_n, _s, _f) \
+ DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharBackend)
+#define DEFINE_PROP_NETDEV(_n, _s, _f) \
+ DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NICPeers)
+#define DEFINE_PROP_DRIVE(_n, _s, _f) \
+ DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockBackend *)
+#define DEFINE_PROP_DRIVE_IOTHREAD(_n, _s, _f) \
+ DEFINE_PROP(_n, _s, _f, qdev_prop_drive_iothread, BlockBackend *)
+#define DEFINE_PROP_MACADDR(_n, _s, _f) \
+ DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
+#define DEFINE_PROP_RESERVED_REGION(_n, _s, _f) \
+ DEFINE_PROP(_n, _s, _f, qdev_prop_reserved_region, ReservedRegion)
+#define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \
+ MultiFDCompression)
+#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
+ LostTickPolicy)
+#define DEFINE_PROP_BLOCKDEV_ON_ERROR(_n, _s, _f, _d) \
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_blockdev_on_error, \
+ BlockdevOnError)
+#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int)
+#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f) \
+ DEFINE_PROP_UNSIGNED(_n, _s, _f, 0, qdev_prop_blocksize, uint32_t)
+#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \
+ DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress)
+#define DEFINE_PROP_OFF_AUTO_PCIBAR(_n, _s, _f, _d) \
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_off_auto_pcibar, \
+ OffAutoPCIBAR)
+#define DEFINE_PROP_PCIE_LINK_SPEED(_n, _s, _f, _d) \
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_speed, \
+ PCIExpLinkSpeed)
+#define DEFINE_PROP_PCIE_LINK_WIDTH(_n, _s, _f, _d) \
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_width, \
+ PCIExpLinkWidth)
+
+#define DEFINE_PROP_UUID(_name, _state, _field) { \
+ .name = (_name), \
+ .info = &qdev_prop_uuid, \
+ .offset = offsetof(_state, _field) \
+ + type_check(QemuUUID, typeof_field(_state, _field)), \
+ .set_default = true, \
+ }
+#define DEFINE_PROP_AUDIODEV(_n, _s, _f) \
+ DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, QEMUSoundCard)
+
+#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) { \
+ .name = (_name), \
+ .info = &qdev_prop_uuid, \
+ .offset = offsetof(_state, _field) \
+ + type_check(QemuUUID, typeof_field(_state, _field)), \
+ }
+
+
+#endif
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 530286e869..d35d4aae84 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -55,30 +55,11 @@ extern const PropertyInfo qdev_prop_uint64;
extern const PropertyInfo qdev_prop_int64;
extern const PropertyInfo qdev_prop_size;
extern const PropertyInfo qdev_prop_string;
-extern const PropertyInfo qdev_prop_chr;
extern const PropertyInfo qdev_prop_tpm;
-extern const PropertyInfo qdev_prop_macaddr;
-extern const PropertyInfo qdev_prop_reserved_region;
extern const PropertyInfo qdev_prop_on_off_auto;
-extern const PropertyInfo qdev_prop_multifd_compression;
-extern const PropertyInfo qdev_prop_losttickpolicy;
-extern const PropertyInfo qdev_prop_blockdev_on_error;
-extern const PropertyInfo qdev_prop_bios_chs_trans;
-extern const PropertyInfo qdev_prop_fdc_drive_type;
-extern const PropertyInfo qdev_prop_drive;
-extern const PropertyInfo qdev_prop_drive_iothread;
-extern const PropertyInfo qdev_prop_netdev;
-extern const PropertyInfo qdev_prop_pci_devfn;
extern const PropertyInfo qdev_prop_size32;
-extern const PropertyInfo qdev_prop_blocksize;
-extern const PropertyInfo qdev_prop_pci_host_devaddr;
-extern const PropertyInfo qdev_prop_uuid;
extern const PropertyInfo qdev_prop_arraylen;
-extern const PropertyInfo qdev_prop_audiodev;
extern const PropertyInfo qdev_prop_link;
-extern const PropertyInfo qdev_prop_off_auto_pcibar;
-extern const PropertyInfo qdev_prop_pcie_link_speed;
-extern const PropertyInfo qdev_prop_pcie_link_width;
#define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
.name = (_name), \
@@ -209,68 +190,12 @@ extern const PropertyInfo qdev_prop_pcie_link_width;
DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_int64, int64_t)
#define DEFINE_PROP_SIZE(_n, _s, _f, _d) \
DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size, uint64_t)
-#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t)
-
-#define DEFINE_PROP_CHR(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharBackend)
#define DEFINE_PROP_STRING(_n, _s, _f) \
DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
-#define DEFINE_PROP_NETDEV(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NICPeers)
-#define DEFINE_PROP_DRIVE(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockBackend *)
-#define DEFINE_PROP_DRIVE_IOTHREAD(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_drive_iothread, BlockBackend *)
-#define DEFINE_PROP_MACADDR(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
-#define DEFINE_PROP_RESERVED_REGION(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_reserved_region, ReservedRegion)
#define DEFINE_PROP_ON_OFF_AUTO(_n, _s, _f, _d) \
DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_on_off_auto, OnOffAuto)
-#define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \
- MultiFDCompression)
-#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
- LostTickPolicy)
-#define DEFINE_PROP_BLOCKDEV_ON_ERROR(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_blockdev_on_error, \
- BlockdevOnError)
-#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int)
#define DEFINE_PROP_SIZE32(_n, _s, _f, _d) \
DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size32, uint32_t)
-#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f) \
- DEFINE_PROP_UNSIGNED(_n, _s, _f, 0, qdev_prop_blocksize, uint32_t)
-#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress)
-#define DEFINE_PROP_OFF_AUTO_PCIBAR(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_off_auto_pcibar, \
- OffAutoPCIBAR)
-#define DEFINE_PROP_PCIE_LINK_SPEED(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_speed, \
- PCIExpLinkSpeed)
-#define DEFINE_PROP_PCIE_LINK_WIDTH(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_width, \
- PCIExpLinkWidth)
-
-#define DEFINE_PROP_UUID(_name, _state, _field) { \
- .name = (_name), \
- .info = &qdev_prop_uuid, \
- .offset = offsetof(_state, _field) \
- + type_check(QemuUUID, typeof_field(_state, _field)), \
- .set_default = true, \
- }
-#define DEFINE_PROP_AUDIODEV(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, QEMUSoundCard)
-
-#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) { \
- .name = (_name), \
- .info = &qdev_prop_uuid, \
- .offset = offsetof(_state, _field) \
- + type_check(QemuUUID, typeof_field(_state, _field)), \
- }
#define DEFINE_PROP_END_OF_LIST() \
{}
diff --git a/include/net/net.h b/include/net/net.h
index 778fc787ca..919facaad2 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -4,6 +4,7 @@
#include "qemu/queue.h"
#include "qapi/qapi-types-net.h"
#include "net/queue.h"
+#include "hw/qdev-properties-system.h"
#define MAC_FMT "%02X:%02X:%02X:%02X:%02X:%02X"
#define MAC_ARG(x) ((uint8_t *)(x))[0], ((uint8_t *)(x))[1], \
diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c
index 2c8152d508..6c92fdae49 100644
--- a/hw/acpi/vmgenid.c
+++ b/hw/acpi/vmgenid.c
@@ -19,6 +19,7 @@
#include "hw/acpi/vmgenid.h"
#include "hw/nvram/fw_cfg.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "sysemu/reset.h"
diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
index 1a98f3bd5c..fdc4955e95 100644
--- a/hw/arm/pxa2xx.c
+++ b/hw/arm/pxa2xx.c
@@ -21,6 +21,7 @@
#include "hw/i2c/i2c.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/ssi/ssi.h"
#include "hw/sd/sd.h"
#include "chardev/char-fe.h"
diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
index ca7c385f31..c7ca54bcea 100644
--- a/hw/arm/strongarm.c
+++ b/hw/arm/strongarm.c
@@ -33,6 +33,7 @@
#include "hw/boards.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/sysbus.h"
#include "migration/vmstate.h"
#include "strongarm.h"
diff --git a/hw/block/fdc.c b/hw/block/fdc.c
index 4c2c35e223..3636874432 100644
--- a/hw/block/fdc.c
+++ b/hw/block/fdc.c
@@ -36,6 +36,7 @@
#include "hw/irq.h"
#include "hw/isa/isa.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/sysbus.h"
#include "migration/vmstate.h"
#include "hw/block/block.h"
diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
index d09a811767..93bd1821ff 100644
--- a/hw/block/m25p80.c
+++ b/hw/block/m25p80.c
@@ -25,6 +25,7 @@
#include "qemu/units.h"
#include "sysemu/block-backend.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/ssi/ssi.h"
#include "migration/vmstate.h"
#include "qemu/bitops.h"
diff --git a/hw/block/nand.c b/hw/block/nand.c
index 1d7a48a2ec..1c098db897 100644
--- a/hw/block/nand.c
+++ b/hw/block/nand.c
@@ -21,6 +21,7 @@
#include "qemu/osdep.h"
#include "hw/hw.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/block/flash.h"
#include "sysemu/block-backend.h"
#include "migration/vmstate.h"
diff --git a/hw/block/onenand.c b/hw/block/onenand.c
index 5ff7be86bb..579a73d7f7 100644
--- a/hw/block/onenand.c
+++ b/hw/block/onenand.c
@@ -24,6 +24,7 @@
#include "hw/block/flash.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "sysemu/block-backend.h"
#include "exec/memory.h"
#include "hw/sysbus.h"
diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
index daae965860..ccf326793d 100644
--- a/hw/block/pflash_cfi01.c
+++ b/hw/block/pflash_cfi01.c
@@ -40,6 +40,7 @@
#include "hw/block/block.h"
#include "hw/block/flash.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "sysemu/block-backend.h"
#include "qapi/error.h"
#include "qemu/error-report.h"
diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
index 1b3d94e047..2ad2f6baea 100644
--- a/hw/block/pflash_cfi02.c
+++ b/hw/block/pflash_cfi02.c
@@ -36,6 +36,7 @@
#include "hw/block/block.h"
#include "hw/block/flash.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qapi/error.h"
#include "qemu/error-report.h"
#include "qemu/bitmap.h"
diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
index 2dd3d93ca0..da4fbf9084 100644
--- a/hw/block/vhost-user-blk.c
+++ b/hw/block/vhost-user-blk.c
@@ -22,6 +22,7 @@
#include "qemu/cutils.h"
#include "hw/qdev-core.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/virtio/vhost.h"
#include "hw/virtio/vhost-user-blk.h"
#include "hw/virtio/virtio.h"
diff --git a/hw/char/avr_usart.c b/hw/char/avr_usart.c
index fbe2a112b7..5bcf9db0b7 100644
--- a/hw/char/avr_usart.c
+++ b/hw/char/avr_usart.c
@@ -24,6 +24,7 @@
#include "qemu/log.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
static int avr_usart_can_receive(void *opaque)
{
diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c
index dade2ab5fd..96410b1ff8 100644
--- a/hw/char/bcm2835_aux.c
+++ b/hw/char/bcm2835_aux.c
@@ -24,6 +24,7 @@
#include "hw/char/bcm2835_aux.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "qemu/log.h"
#include "qemu/module.h"
diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
index e196906c92..c603e14012 100644
--- a/hw/char/cadence_uart.c
+++ b/hw/char/cadence_uart.c
@@ -32,6 +32,7 @@
#include "hw/char/cadence_uart.h"
#include "hw/irq.h"
#include "hw/qdev-clock.h"
+#include "hw/qdev-properties-system.h"
#include "trace.h"
#ifdef CADENCE_UART_ERR_DEBUG
diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c
index 626b68f2ec..ba2cbbee3d 100644
--- a/hw/char/cmsdk-apb-uart.c
+++ b/hw/char/cmsdk-apb-uart.c
@@ -27,6 +27,7 @@
#include "chardev/char-serial.h"
#include "hw/char/cmsdk-apb-uart.h"
#include "hw/irq.h"
+#include "hw/qdev-properties-system.h"
REG32(DATA, 0)
REG32(STATE, 4)
diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c
index 2a063ad72c..fdb04fee09 100644
--- a/hw/char/debugcon.c
+++ b/hw/char/debugcon.c
@@ -30,6 +30,7 @@
#include "chardev/char-fe.h"
#include "hw/isa/isa.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qom/object.h"
#define TYPE_ISA_DEBUGCON_DEVICE "isa-debugcon"
diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c
index e130cb4692..00e5df5517 100644
--- a/hw/char/digic-uart.c
+++ b/hw/char/digic-uart.c
@@ -35,6 +35,7 @@
#include "hw/char/digic-uart.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
enum {
ST_RX_RDY = (1 << 0),
diff --git a/hw/char/escc.c b/hw/char/escc.c
index 7d16ee8688..52e7978287 100644
--- a/hw/char/escc.c
+++ b/hw/char/escc.c
@@ -25,6 +25,7 @@
#include "qemu/osdep.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/sysbus.h"
#include "migration/vmstate.h"
#include "qemu/module.h"
diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c
index d9fba2ae6c..6bee3ee18e 100644
--- a/hw/char/etraxfs_ser.c
+++ b/hw/char/etraxfs_ser.c
@@ -25,6 +25,7 @@
#include "qemu/osdep.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/sysbus.h"
#include "chardev/char-fe.h"
#include "qemu/log.h"
diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
index 96afe3580f..6361df2ad3 100644
--- a/hw/char/exynos4210_uart.c
+++ b/hw/char/exynos4210_uart.c
@@ -32,6 +32,7 @@
#include "hw/arm/exynos4210.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "trace.h"
#include "qom/object.h"
diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
index 3f80f6824e..82ff40a530 100644
--- a/hw/char/grlib_apbuart.c
+++ b/hw/char/grlib_apbuart.c
@@ -25,6 +25,7 @@
#include "qemu/osdep.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/sparc/grlib.h"
#include "hw/sysbus.h"
#include "qemu/module.h"
diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c
index cc49a35013..89f1182c9b 100644
--- a/hw/char/ibex_uart.c
+++ b/hw/char/ibex_uart.c
@@ -30,6 +30,7 @@
#include "hw/irq.h"
#include "hw/qdev-clock.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "qemu/log.h"
#include "qemu/module.h"
diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c
index 731b8fc64c..ee1375e26d 100644
--- a/hw/char/imx_serial.c
+++ b/hw/char/imx_serial.c
@@ -22,6 +22,7 @@
#include "hw/char/imx_serial.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "qemu/log.h"
#include "qemu/module.h"
diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c
index ad000a39b9..3311e0872c 100644
--- a/hw/char/ipoctal232.c
+++ b/hw/char/ipoctal232.c
@@ -12,6 +12,7 @@
#include "hw/ipack/ipack.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "qemu/bitops.h"
#include "qemu/module.h"
diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c
index aced357011..ce30279650 100644
--- a/hw/char/lm32_juart.c
+++ b/hw/char/lm32_juart.c
@@ -26,6 +26,7 @@
#include "hw/char/lm32_juart.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qom/object.h"
enum {
diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c
index 2f58e2943b..d8e0331311 100644
--- a/hw/char/lm32_uart.c
+++ b/hw/char/lm32_uart.c
@@ -25,6 +25,7 @@
#include "qemu/osdep.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/sysbus.h"
#include "migration/vmstate.h"
#include "trace.h"
diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c
index e6814faffb..6fa4ac502c 100644
--- a/hw/char/mcf_uart.c
+++ b/hw/char/mcf_uart.c
@@ -13,6 +13,7 @@
#include "qapi/error.h"
#include "hw/m68k/mcf.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "chardev/char-fe.h"
#include "qom/object.h"
diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c
index a817c51eb5..cb1b3470ad 100644
--- a/hw/char/milkymist-uart.c
+++ b/hw/char/milkymist-uart.c
@@ -24,6 +24,7 @@
#include "qemu/osdep.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/sysbus.h"
#include "migration/vmstate.h"
#include "trace.h"
diff --git a/hw/char/nrf51_uart.c b/hw/char/nrf51_uart.c
index d1fef77acd..045ca5fa40 100644
--- a/hw/char/nrf51_uart.c
+++ b/hw/char/nrf51_uart.c
@@ -18,6 +18,7 @@
#include "hw/char/nrf51_uart.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "trace.h"
diff --git a/hw/char/parallel.c b/hw/char/parallel.c
index 8b418abf71..b45e67bfbb 100644
--- a/hw/char/parallel.c
+++ b/hw/char/parallel.c
@@ -32,6 +32,7 @@
#include "hw/irq.h"
#include "hw/isa/isa.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "hw/char/parallel.h"
#include "sysemu/reset.h"
diff --git a/hw/char/pl011.c b/hw/char/pl011.c
index ede16c781c..ea4a4e5235 100644
--- a/hw/char/pl011.c
+++ b/hw/char/pl011.c
@@ -23,6 +23,7 @@
#include "hw/irq.h"
#include "hw/sysbus.h"
#include "hw/qdev-clock.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "chardev/char-fe.h"
#include "qemu/log.h"
diff --git a/hw/char/renesas_sci.c b/hw/char/renesas_sci.c
index 5d7c6e6523..1c63467290 100644
--- a/hw/char/renesas_sci.c
+++ b/hw/char/renesas_sci.c
@@ -26,6 +26,7 @@
#include "hw/irq.h"
#include "hw/registerfields.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/char/renesas_sci.h"
#include "migration/vmstate.h"
diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c
index 81f6d0ed4f..b9e9b2d453 100644
--- a/hw/char/sclpconsole-lm.c
+++ b/hw/char/sclpconsole-lm.c
@@ -23,6 +23,7 @@
#include "migration/vmstate.h"
#include "hw/s390x/event-facility.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/s390x/ebcdic.h"
#include "qom/object.h"
diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c
index aa72ab40b9..c36b572222 100644
--- a/hw/char/sclpconsole.c
+++ b/hw/char/sclpconsole.c
@@ -20,6 +20,7 @@
#include "hw/s390x/sclp.h"
#include "migration/vmstate.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/s390x/event-facility.h"
#include "chardev/char-fe.h"
#include "qom/object.h"
diff --git a/hw/char/serial-pci-multi.c b/hw/char/serial-pci-multi.c
index 2cf3e44177..3a9f96c2d1 100644
--- a/hw/char/serial-pci-multi.c
+++ b/hw/char/serial-pci-multi.c
@@ -33,6 +33,7 @@
#include "hw/irq.h"
#include "hw/pci/pci.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#define PCI_SERIAL_MAX_PORTS 4
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 62c627f486..6e52539648 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -36,6 +36,7 @@
#include "qemu/error-report.h"
#include "trace.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#define UART_LCR_DLAB 0x80 /* Divisor latch access bit */
diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c
index e726d4d915..79eaa2fa52 100644
--- a/hw/char/spapr_vty.c
+++ b/hw/char/spapr_vty.c
@@ -8,6 +8,7 @@
#include "hw/ppc/spapr.h"
#include "hw/ppc/spapr_vio.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qom/object.h"
#define VTERM_BUFSIZE 16
diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c
index 0d661be6d3..8df0832424 100644
--- a/hw/char/stm32f2xx_usart.c
+++ b/hw/char/stm32f2xx_usart.c
@@ -26,6 +26,7 @@
#include "hw/char/stm32f2xx_usart.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qemu/log.h"
#include "qemu/module.h"
diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c
index d77981bb6d..a9a46c8ed3 100644
--- a/hw/char/terminal3270.c
+++ b/hw/char/terminal3270.c
@@ -16,6 +16,7 @@
#include "qemu/module.h"
#include "chardev/char-fe.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/s390x/3270-ccw.h"
#include "qom/object.h"
diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
index bc752cf90f..6b132caa29 100644
--- a/hw/char/virtio-console.c
+++ b/hw/char/virtio-console.c
@@ -16,6 +16,7 @@
#include "qemu/module.h"
#include "trace.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/virtio/virtio-serial.h"
#include "qapi/error.h"
#include "qapi/qapi-events-char.h"
diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c
index 2e773ec4c4..99b9a6f851 100644
--- a/hw/char/xilinx_uartlite.c
+++ b/hw/char/xilinx_uartlite.c
@@ -26,6 +26,7 @@
#include "qemu/log.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/sysbus.h"
#include "qemu/module.h"
#include "chardev/char-fe.h"
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 7a9a1d6404..e2d523b27a 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -12,6 +12,7 @@
#include "qemu/osdep.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qapi/error.h"
#include "qapi/visitor.h"
#include "qapi/qapi-types-block.h"
diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c
index 896e981f85..984caf898d 100644
--- a/hw/hyperv/vmbus.c
+++ b/hw/hyperv/vmbus.c
@@ -13,6 +13,7 @@
#include "qapi/error.h"
#include "migration/vmstate.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/hyperv/hyperv.h"
#include "hw/hyperv/vmbus.h"
#include "hw/hyperv/vmbus-bridge.h"
diff --git a/hw/i386/kvm/i8254.c b/hw/i386/kvm/i8254.c
index 40d84734e7..c73254e886 100644
--- a/hw/i386/kvm/i8254.c
+++ b/hw/i386/kvm/i8254.c
@@ -32,6 +32,7 @@
#include "sysemu/runstate.h"
#include "hw/timer/i8254.h"
#include "hw/timer/i8254_internal.h"
+#include "hw/qdev-properties-system.h"
#include "sysemu/kvm.h"
#include "qom/object.h"
diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
index 1086b7a327..8cd19fa5e9 100644
--- a/hw/ide/qdev.c
+++ b/hw/ide/qdev.c
@@ -26,6 +26,7 @@
#include "qemu/module.h"
#include "hw/ide/internal.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "sysemu/block-backend.h"
#include "sysemu/blockdev.h"
#include "hw/block/block.h"
diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c
index c3f3306e66..e141a5cd45 100644
--- a/hw/ipmi/ipmi_bmc_extern.c
+++ b/hw/ipmi/ipmi_bmc_extern.c
@@ -35,6 +35,7 @@
#include "chardev/char-fe.h"
#include "hw/ipmi/ipmi.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "qom/object.h"
diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c
index f78e92d3d5..55fb81fa5a 100644
--- a/hw/ipmi/ipmi_bmc_sim.c
+++ b/hw/ipmi/ipmi_bmc_sim.c
@@ -30,6 +30,7 @@
#include "qemu/module.h"
#include "hw/loader.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#define IPMI_NETFN_CHASSIS 0x00
diff --git a/hw/misc/allwinner-sid.c b/hw/misc/allwinner-sid.c
index 196380c33a..6d61f55b1d 100644
--- a/hw/misc/allwinner-sid.c
+++ b/hw/misc/allwinner-sid.c
@@ -26,6 +26,7 @@
#include "qemu/guest-random.h"
#include "qapi/error.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/misc/allwinner-sid.h"
#include "trace.h"
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index e321e5cb69..0505b52c98 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -23,6 +23,7 @@
#include "qemu/cutils.h"
#include "hw/pci/pci.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/pci/msi.h"
#include "hw/pci/msix.h"
#include "sysemu/kvm.h"
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index 6db62dab7d..488d086a17 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -28,6 +28,7 @@
#include "qapi/error.h"
#include "qemu/cutils.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "sysemu/block-backend.h"
#include "trace.h"
#include "qemu/log.h"
diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c
index 60066375ab..4401787a5c 100644
--- a/hw/misc/sifive_u_otp.c
+++ b/hw/misc/sifive_u_otp.c
@@ -21,6 +21,7 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/sysbus.h"
#include "qemu/log.h"
#include "qemu/module.h"
diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c
index 1af1e6fa2f..0fb8db1dee 100644
--- a/hw/net/rocker/rocker.c
+++ b/hw/net/rocker/rocker.c
@@ -18,6 +18,7 @@
#include "qemu/osdep.h"
#include "hw/pci/pci.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "hw/pci/msix.h"
#include "net/net.h"
diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
index 3e93dbbffb..af6f5dbb99 100644
--- a/hw/nvram/eeprom_at24c.c
+++ b/hw/nvram/eeprom_at24c.c
@@ -13,6 +13,7 @@
#include "qemu/module.h"
#include "hw/i2c/i2c.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "sysemu/block-backend.h"
#include "qom/object.h"
diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c
index fc53a42572..9e51bc82ae 100644
--- a/hw/nvram/spapr_nvram.c
+++ b/hw/nvram/spapr_nvram.c
@@ -39,6 +39,7 @@
#include "hw/ppc/spapr.h"
#include "hw/ppc/spapr_vio.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qom/object.h"
struct SpaprNvram {
diff --git a/hw/pci-bridge/gen_pcie_root_port.c b/hw/pci-bridge/gen_pcie_root_port.c
index 8931afc049..ec9907917e 100644
--- a/hw/pci-bridge/gen_pcie_root_port.c
+++ b/hw/pci-bridge/gen_pcie_root_port.c
@@ -16,6 +16,7 @@
#include "hw/pci/msix.h"
#include "hw/pci/pcie_port.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "qom/object.h"
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 9424231542..b09208f562 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -31,6 +31,7 @@
#include "hw/pci/pci_bus.h"
#include "hw/pci/pci_host.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/qemu-file-types.h"
#include "migration/vmstate.h"
#include "monitor/monitor.h"
diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c
index c365ee58b8..ef8dff03e0 100644
--- a/hw/ppc/pnv_pnor.c
+++ b/hw/ppc/pnv_pnor.c
@@ -17,6 +17,7 @@
#include "hw/loader.h"
#include "hw/ppc/pnv_pnor.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
static uint64_t pnv_pnor_read(void *opaque, hwaddr addr, unsigned size)
{
diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c
index 77b1235a3f..8593570332 100644
--- a/hw/rdma/vmw/pvrdma_main.c
+++ b/hw/rdma/vmw/pvrdma_main.c
@@ -21,6 +21,7 @@
#include "hw/pci/msi.h"
#include "hw/pci/msix.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "cpu.h"
#include "trace.h"
#include "monitor/monitor.h"
diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c
index 7a38540cb9..5d0fcacd0c 100644
--- a/hw/rtc/mc146818rtc.c
+++ b/hw/rtc/mc146818rtc.c
@@ -30,6 +30,7 @@
#include "hw/acpi/aml-build.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qemu/timer.h"
#include "sysemu/sysemu.h"
#include "sysemu/replay.h"
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index 90841ad791..29504ea081 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -34,6 +34,7 @@
#include "sysemu/blockdev.h"
#include "hw/block/block.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "sysemu/dma.h"
#include "sysemu/sysemu.h"
#include "qemu/cutils.h"
diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c
index 2cb23ca891..9740f7e36a 100644
--- a/hw/scsi/scsi-generic.c
+++ b/hw/scsi/scsi-generic.c
@@ -19,6 +19,7 @@
#include "hw/scsi/scsi.h"
#include "migration/qemu-file-types.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/scsi/emulation.h"
#include "sysemu/block-backend.h"
#include "trace.h"
diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c
index 7c0631656c..4666019442 100644
--- a/hw/scsi/vhost-user-scsi.c
+++ b/hw/scsi/vhost-user-scsi.c
@@ -21,6 +21,7 @@
#include "hw/fw-path-provider.h"
#include "hw/qdev-core.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/virtio/vhost.h"
#include "hw/virtio/vhost-backend.h"
#include "hw/virtio/vhost-user-scsi.h"
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
index 1842c03797..2aeab39c3f 100644
--- a/hw/sd/sd.c
+++ b/hw/sd/sd.c
@@ -42,6 +42,7 @@
#include "qapi/error.h"
#include "qemu/bitmap.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qemu/error-report.h"
#include "qemu/timer.h"
#include "qemu/log.h"
diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
index e8e9d37e88..c27c602697 100644
--- a/hw/usb/ccid-card-passthru.c
+++ b/hw/usb/ccid-card-passthru.c
@@ -14,6 +14,7 @@
#include <libcacard.h>
#include "chardev/char-fe.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "qemu/error-report.h"
#include "qemu/module.h"
diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
index 19e1933f04..b58c4eb908 100644
--- a/hw/usb/dev-serial.c
+++ b/hw/usb/dev-serial.c
@@ -14,6 +14,7 @@
#include "qemu/error-report.h"
#include "qemu/module.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/usb.h"
#include "migration/vmstate.h"
#include "desc.h"
diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
index 3238de6bb8..0b7e0e15f4 100644
--- a/hw/usb/redirect.c
+++ b/hw/usb/redirect.c
@@ -42,6 +42,7 @@
#include <usbredirfilter.h>
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/usb.h"
#include "migration/qemu-file-types.h"
#include "migration/vmstate.h"
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index 51dc373695..f74be78209 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -27,6 +27,7 @@
#include "hw/pci/msix.h"
#include "hw/pci/pci_bridge.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "migration/vmstate.h"
#include "qemu/error-report.h"
#include "qemu/main-loop.h"
diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c
index 1bc5d03a00..ed036ad9c1 100644
--- a/hw/virtio/vhost-user-fs.c
+++ b/hw/virtio/vhost-user-fs.c
@@ -16,6 +16,7 @@
#include "standard-headers/linux/virtio_fs.h"
#include "qapi/error.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/virtio/virtio-bus.h"
#include "hw/virtio/virtio-access.h"
#include "qemu/error-report.h"
diff --git a/hw/virtio/vhost-user-vsock.c b/hw/virtio/vhost-user-vsock.c
index 3534a39d62..a6f08c26b9 100644
--- a/hw/virtio/vhost-user-vsock.c
+++ b/hw/virtio/vhost-user-vsock.c
@@ -13,6 +13,7 @@
#include "qapi/error.h"
#include "qemu/error-report.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/virtio/vhost-user-vsock.h"
static const int user_feature_bits[] = {
diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c
index 378f63b210..770c286be7 100644
--- a/hw/virtio/virtio-iommu-pci.c
+++ b/hw/virtio/virtio-iommu-pci.c
@@ -14,6 +14,7 @@
#include "virtio-pci.h"
#include "hw/virtio/virtio-iommu.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "qapi/error.h"
#include "hw/boards.h"
#include "qom/object.h"
diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
index 6d359ee486..3cbd08b10e 100644
--- a/hw/xen/xen_pt.c
+++ b/hw/xen/xen_pt.c
@@ -58,6 +58,7 @@
#include "hw/pci/pci.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "hw/xen/xen.h"
#include "hw/i386/pc.h"
#include "hw/xen/xen-legacy-backend.h"
diff --git a/migration/migration.c b/migration/migration.c
index e0dbde4091..cfbf46b77d 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -52,6 +52,7 @@
#include "migration/colo.h"
#include "hw/boards.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-properties-system.h"
#include "monitor/monitor.h"
#include "net/announce.h"
#include "qemu/queue.h"
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 16/32] qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (14 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 14:32 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property Eduardo Habkost
` (16 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Instead of duplicating the code that sets name, info, offset,
and does type checking, make DEFINE_PROP accept a variable number
of arguments and reuse it in all DEFINE_PROP_* macros.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
* Redone after UUID property was moved
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
include/hw/qdev-properties-system.h | 19 ++---
include/hw/qdev-properties.h | 114 ++++++++++------------------
2 files changed, 46 insertions(+), 87 deletions(-)
diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properties-system.h
index 29529dc999..0ac327ae60 100644
--- a/include/hw/qdev-properties-system.h
+++ b/include/hw/qdev-properties-system.h
@@ -63,22 +63,15 @@ extern const PropertyInfo qdev_prop_pcie_link_width;
DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_width, \
PCIExpLinkWidth)
-#define DEFINE_PROP_UUID(_name, _state, _field) { \
- .name = (_name), \
- .info = &qdev_prop_uuid, \
- .offset = offsetof(_state, _field) \
- + type_check(QemuUUID, typeof_field(_state, _field)), \
- .set_default = true, \
- }
+#define DEFINE_PROP_UUID(_name, _state, _field) \
+ DEFINE_PROP(_name, _state, _field, qdev_prop_uuid, QemuUUID, \
+ .set_default = true)
+
#define DEFINE_PROP_AUDIODEV(_n, _s, _f) \
DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, QEMUSoundCard)
-#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) { \
- .name = (_name), \
- .info = &qdev_prop_uuid, \
- .offset = offsetof(_state, _field) \
- + type_check(QemuUUID, typeof_field(_state, _field)), \
- }
+#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) \
+ DEFINE_PROP(_name, _state, _field, qdev_prop_uuid, QemuUUID)
#endif
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index d35d4aae84..1b58e4f922 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -61,73 +61,46 @@ extern const PropertyInfo qdev_prop_size32;
extern const PropertyInfo qdev_prop_arraylen;
extern const PropertyInfo qdev_prop_link;
-#define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
+#define DEFINE_PROP(_name, _state, _field, _prop, _type, ...) { \
.name = (_name), \
.info = &(_prop), \
.offset = offsetof(_state, _field) \
+ type_check(_type, typeof_field(_state, _field)), \
+ __VA_ARGS__ \
}
-#define DEFINE_PROP_SIGNED(_name, _state, _field, _defval, _prop, _type) { \
- .name = (_name), \
- .info = &(_prop), \
- .offset = offsetof(_state, _field) \
- + type_check(_type,typeof_field(_state, _field)), \
- .set_default = true, \
- .defval.i = (_type)_defval, \
- }
+#define DEFINE_PROP_SIGNED(_name, _state, _field, _defval, _prop, _type) \
+ DEFINE_PROP(_name, _state, _field, _prop, _type, \
+ .set_default = true, \
+ .defval.i = (_type)_defval)
-#define DEFINE_PROP_SIGNED_NODEFAULT(_name, _state, _field, _prop, _type) { \
- .name = (_name), \
- .info = &(_prop), \
- .offset = offsetof(_state, _field) \
- + type_check(_type, typeof_field(_state, _field)), \
- }
+#define DEFINE_PROP_SIGNED_NODEFAULT(_name, _state, _field, _prop, _type) \
+ DEFINE_PROP(_name, _state, _field, _prop, _type)
-#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) { \
- .name = (_name), \
- .info = &(qdev_prop_bit), \
- .bitnr = (_bit), \
- .offset = offsetof(_state, _field) \
- + type_check(uint32_t,typeof_field(_state, _field)), \
- .set_default = true, \
- .defval.u = (bool)_defval, \
- }
+#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) \
+ DEFINE_PROP(_name, _state, _field, qdev_prop_bit, uint32_t, \
+ .bitnr = (_bit), \
+ .set_default = true, \
+ .defval.u = (bool)_defval)
-#define DEFINE_PROP_UNSIGNED(_name, _state, _field, _defval, _prop, _type) { \
- .name = (_name), \
- .info = &(_prop), \
- .offset = offsetof(_state, _field) \
- + type_check(_type, typeof_field(_state, _field)), \
- .set_default = true, \
- .defval.u = (_type)_defval, \
- }
+#define DEFINE_PROP_UNSIGNED(_name, _state, _field, _defval, _prop, _type) \
+ DEFINE_PROP(_name, _state, _field, _prop, _type, \
+ .set_default = true, \
+ .defval.u = (_type)_defval)
-#define DEFINE_PROP_UNSIGNED_NODEFAULT(_name, _state, _field, _prop, _type) { \
- .name = (_name), \
- .info = &(_prop), \
- .offset = offsetof(_state, _field) \
- + type_check(_type, typeof_field(_state, _field)), \
- }
+#define DEFINE_PROP_UNSIGNED_NODEFAULT(_name, _state, _field, _prop, _type) \
+ DEFINE_PROP(_name, _state, _field, _prop, _type)
-#define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) { \
- .name = (_name), \
- .info = &(qdev_prop_bit64), \
- .bitnr = (_bit), \
- .offset = offsetof(_state, _field) \
- + type_check(uint64_t, typeof_field(_state, _field)), \
- .set_default = true, \
- .defval.u = (bool)_defval, \
- }
+#define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) \
+ DEFINE_PROP(_name, _state, _field, qdev_prop_bit64, uint64_t, \
+ .bitnr = (_bit), \
+ .set_default = true, \
+ .defval.u = (bool)_defval)
-#define DEFINE_PROP_BOOL(_name, _state, _field, _defval) { \
- .name = (_name), \
- .info = &(qdev_prop_bool), \
- .offset = offsetof(_state, _field) \
- + type_check(bool, typeof_field(_state, _field)), \
- .set_default = true, \
- .defval.u = (bool)_defval, \
- }
+#define DEFINE_PROP_BOOL(_name, _state, _field, _defval) \
+ DEFINE_PROP(_name, _state, _field, qdev_prop_bool, bool, \
+ .set_default = true, \
+ .defval.u = (bool)_defval)
#define PROP_ARRAY_LEN_PREFIX "len-"
@@ -155,26 +128,19 @@ extern const PropertyInfo qdev_prop_link;
* It is the responsibility of the device deinit code to free the
* @_arrayfield memory.
*/
-#define DEFINE_PROP_ARRAY(_name, _state, _field, \
- _arrayfield, _arrayprop, _arraytype) { \
- .name = (PROP_ARRAY_LEN_PREFIX _name), \
- .info = &(qdev_prop_arraylen), \
- .set_default = true, \
- .defval.u = 0, \
- .offset = offsetof(_state, _field) \
- + type_check(uint32_t, typeof_field(_state, _field)), \
- .arrayinfo = &(_arrayprop), \
- .arrayfieldsize = sizeof(_arraytype), \
- .arrayoffset = offsetof(_state, _arrayfield), \
- }
+#define DEFINE_PROP_ARRAY(_name, _state, _field, \
+ _arrayfield, _arrayprop, _arraytype) \
+ DEFINE_PROP((PROP_ARRAY_LEN_PREFIX _name), \
+ _state, _field, qdev_prop_arraylen, uint32_t, \
+ .set_default = true, \
+ .defval.u = 0, \
+ .arrayinfo = &(_arrayprop), \
+ .arrayfieldsize = sizeof(_arraytype), \
+ .arrayoffset = offsetof(_state, _arrayfield))
-#define DEFINE_PROP_LINK(_name, _state, _field, _type, _ptr_type) { \
- .name = (_name), \
- .info = &(qdev_prop_link), \
- .offset = offsetof(_state, _field) \
- + type_check(_ptr_type, typeof_field(_state, _field)), \
- .link_type = _type, \
- }
+#define DEFINE_PROP_LINK(_name, _state, _field, _type, _ptr_type) \
+ DEFINE_PROP(_name, _state, _field, qdev_prop_link, _ptr_type, \
+ .link_type = _type)
#define DEFINE_PROP_UINT8(_n, _s, _f, _d) \
DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_uint8, uint8_t)
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (15 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 16/32] qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 14:42 ` Igor Mammedov
2020-12-15 11:52 ` Mark Cave-Ayland
2020-12-11 22:05 ` [PATCH v4 18/32] qdev: Get just property name at error_set_from_qdev_prop_error() Eduardo Habkost
` (15 subsequent siblings)
32 siblings, 2 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Mark Cave-Ayland,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Igor Mammedov, Philippe Mathieu-Daudé, Artyom Tarasenko,
Stefan Berger
Use the DEFINE_PROP macro (which will set extra fields in the
struct) instead of initializing a Property struct manually.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
This is a new patch added in v2 of the series
---
Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Cc: Artyom Tarasenko <atar4qemu@gmail.com>
Cc: qemu-devel@nongnu.org
---
target/sparc/cpu.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index 6a3299041f..92534bcd18 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -848,7 +848,8 @@ static Property sparc_cpu_properties[] = {
qdev_prop_uint64, target_ulong),
DEFINE_PROP_UINT32("fpu-version", SPARCCPU, env.def.fpu_version, 0),
DEFINE_PROP_UINT32("mmu-version", SPARCCPU, env.def.mmu_version, 0),
- { .name = "nwindows", .info = &qdev_prop_nwindows },
+ DEFINE_PROP("nwindows", SPARCCPU, env.def.nwindows,
+ qdev_prop_nwindows, uint32_t),
DEFINE_PROP_END_OF_LIST()
};
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 18/32] qdev: Get just property name at error_set_from_qdev_prop_error()
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (16 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 10:41 ` Cornelia Huck
2020-12-14 14:44 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 19/32] qdev: Avoid using prop->name unnecessarily Eduardo Habkost
` (14 subsequent siblings)
32 siblings, 2 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Thomas Huth, Daniel P. Berrange, David Hildenbrand,
John Snow, Cornelia Huck, Markus Armbruster, Halil Pasic,
Christian Borntraeger, qemu-s390x, Paolo Bonzini,
Marc-André Lureau, Igor Mammedov, Richard Henderson,
Philippe Mathieu-Daudé, Stefan Berger
Replace `Property *prop` parameter with `char *name`, to reduce
dependency of getter and setter functions on the Property struct
(which will be changed in following patches).
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
This is a new patch added in series v2
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Cornelia Huck <cohuck@redhat.com>
Cc: Halil Pasic <pasic@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Thomas Huth <thuth@redhat.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: David Hildenbrand <david@redhat.com>
Cc: qemu-devel@nongnu.org
Cc: qemu-s390x@nongnu.org
---
include/hw/qdev-properties.h | 2 +-
hw/core/qdev-properties-system.c | 12 ++++++------
hw/core/qdev-properties.c | 8 ++++----
hw/s390x/css.c | 2 +-
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 1b58e4f922..476737b9da 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -201,7 +201,7 @@ const GlobalProperty *qdev_find_global_prop(Object *obj,
int qdev_prop_check_globals(void);
void qdev_prop_set_globals(DeviceState *dev);
void error_set_from_qdev_prop_error(Error **errp, int ret, Object *obj,
- Property *prop, const char *value);
+ const char *name, const char *value);
/**
* qdev_property_add_static:
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index e2d523b27a..9cf9bcb39d 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -354,7 +354,7 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
return;
inval:
- error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
g_free(str);
}
@@ -442,7 +442,7 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
peers_ptr->queues = queues;
out:
- error_set_from_qdev_prop_error(errp, err, obj, prop, str);
+ error_set_from_qdev_prop_error(errp, err, obj, name, str);
g_free(str);
}
@@ -494,7 +494,7 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
card->state = state;
out:
- error_set_from_qdev_prop_error(errp, err, obj, prop, str);
+ error_set_from_qdev_prop_error(errp, err, obj, name, str);
g_free(str);
}
@@ -792,7 +792,7 @@ static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
return;
invalid:
- error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
g_free(str);
}
@@ -916,7 +916,7 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
return;
inval:
- error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
g_free(str);
}
@@ -1146,7 +1146,7 @@ static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
if (!strcmp(str, UUID_VALUE_AUTO)) {
qemu_uuid_generate(uuid);
} else if (qemu_uuid_parse(str, uuid) < 0) {
- error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
}
g_free(str);
}
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index a2eaa43831..7495798a66 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -679,21 +679,21 @@ static Property *qdev_prop_find(DeviceState *dev, const char *name)
}
void error_set_from_qdev_prop_error(Error **errp, int ret, Object *obj,
- Property *prop, const char *value)
+ const char *name, const char *value)
{
switch (ret) {
case -EEXIST:
error_setg(errp, "Property '%s.%s' can't take value '%s', it's in use",
- object_get_typename(obj), prop->name, value);
+ object_get_typename(obj), name, value);
break;
default:
case -EINVAL:
error_setg(errp, QERR_PROPERTY_VALUE_BAD,
- object_get_typename(obj), prop->name, value);
+ object_get_typename(obj), name, value);
break;
case -ENOENT:
error_setg(errp, "Property '%s.%s' can't find value '%s'",
- object_get_typename(obj), prop->name, value);
+ object_get_typename(obj), name, value);
break;
case 0:
break;
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 38fd46b9a9..7a44320d12 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -2390,7 +2390,7 @@ static void set_css_devid(Object *obj, Visitor *v, const char *name,
num = sscanf(str, "%2x.%1x%n.%4x%n", &cssid, &ssid, &n1, &devid, &n2);
if (num != 3 || (n2 - n1) != 5 || strlen(str) != n2) {
- error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
+ error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
goto out;
}
if ((cssid > MAX_CSSID) || (ssid > MAX_SSID)) {
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 19/32] qdev: Avoid using prop->name unnecessarily
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (17 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 18/32] qdev: Get just property name at error_set_from_qdev_prop_error() Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 14:45 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 20/32] qdev: Add name parameter to qdev_class_add_property() Eduardo Habkost
` (13 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, Stefan Berger, John Snow,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Igor Mammedov, Philippe Mathieu-Daudé, Stefan Berger
We already get the property name as argument to the property
getter and setters, we don't need to use prop->name. This will
make it easier to remove the Property.name field in the future.
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
This is a new patch added in series v2
---
Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
backends/tpm/tpm_util.c | 2 +-
hw/core/qdev-properties-system.c | 14 +++++++-------
hw/core/qdev-properties.c | 4 ++--
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c
index 3973105658..a5d997e7dc 100644
--- a/backends/tpm/tpm_util.c
+++ b/backends/tpm/tpm_util.c
@@ -63,7 +63,7 @@ static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
s = qemu_find_tpm_be(str);
if (s == NULL) {
error_setg(errp, "Property '%s.%s' can't find value '%s'",
- object_get_typename(obj), prop->name, str);
+ object_get_typename(obj), name, str);
} else if (tpm_backend_init(s, TPM_IF(obj), errp) == 0) {
*be = s; /* weak reference, avoid cyclic ref */
}
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 9cf9bcb39d..42529c3b65 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -141,7 +141,7 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
}
if (!blk) {
error_setg(errp, "Property '%s.%s' can't find value '%s'",
- object_get_typename(OBJECT(dev)), prop->name, str);
+ object_get_typename(OBJECT(dev)), name, str);
goto fail;
}
if (blk_attach_dev(blk, dev) < 0) {
@@ -262,10 +262,10 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
s = qemu_chr_find(str);
if (s == NULL) {
error_setg(errp, "Property '%s.%s' can't find value '%s'",
- object_get_typename(obj), prop->name, str);
+ object_get_typename(obj), name, str);
} else if (!qemu_chr_fe_init(be, s, errp)) {
error_prepend(errp, "Property '%s.%s' can't take value '%s': ",
- object_get_typename(obj), prop->name, str);
+ object_get_typename(obj), name, str);
}
g_free(str);
}
@@ -966,7 +966,7 @@ static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
abort();
}
- visit_type_enum(v, prop->name, &speed, prop->info->enum_table, errp);
+ visit_type_enum(v, name, &speed, prop->info->enum_table, errp);
}
static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
@@ -982,7 +982,7 @@ static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
return;
}
- if (!visit_type_enum(v, prop->name, &speed, prop->info->enum_table,
+ if (!visit_type_enum(v, name, &speed, prop->info->enum_table,
errp)) {
return;
}
@@ -1051,7 +1051,7 @@ static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
abort();
}
- visit_type_enum(v, prop->name, &width, prop->info->enum_table, errp);
+ visit_type_enum(v, name, &width, prop->info->enum_table, errp);
}
static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
@@ -1067,7 +1067,7 @@ static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
return;
}
- if (!visit_type_enum(v, prop->name, &width, prop->info->enum_table,
+ if (!visit_type_enum(v, name, &width, prop->info->enum_table,
errp)) {
return;
}
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 7495798a66..50734a1cd4 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -50,7 +50,7 @@ void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
Property *prop = opaque;
int *ptr = qdev_get_prop_ptr(obj, prop);
- visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
+ visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
}
void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
@@ -65,7 +65,7 @@ void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
return;
}
- visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
+ visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
}
void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 20/32] qdev: Add name parameter to qdev_class_add_property()
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (18 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 19/32] qdev: Avoid using prop->name unnecessarily Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 21/32] qdev: Add name argument to PropertyInfo.create method Eduardo Habkost
` (12 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
This will make it easier to remove Property.name in the future.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
This is a new patch added in series v2
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 50734a1cd4..457c7fe4ba 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -887,7 +887,8 @@ void qdev_property_add_static(DeviceState *dev, Property *prop)
}
}
-static void qdev_class_add_property(DeviceClass *klass, Property *prop)
+static void qdev_class_add_property(DeviceClass *klass, const char *name,
+ Property *prop)
{
ObjectClass *oc = OBJECT_CLASS(klass);
@@ -897,7 +898,7 @@ static void qdev_class_add_property(DeviceClass *klass, Property *prop)
ObjectProperty *op;
op = object_class_property_add(oc,
- prop->name, prop->info->name,
+ name, prop->info->name,
prop->info->get, prop->info->set,
prop->info->release,
prop);
@@ -905,7 +906,7 @@ static void qdev_class_add_property(DeviceClass *klass, Property *prop)
prop->info->set_default_value(op, prop);
}
}
- object_class_property_set_description(oc, prop->name,
+ object_class_property_set_description(oc, name,
prop->info->description);
}
@@ -962,7 +963,7 @@ void device_class_set_props(DeviceClass *dc, Property *props)
dc->props_ = props;
for (prop = props; prop && prop->name; prop++) {
qdev_class_add_legacy_property(dc, prop);
- qdev_class_add_property(dc, prop);
+ qdev_class_add_property(dc, prop->name, prop);
}
}
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 21/32] qdev: Add name argument to PropertyInfo.create method
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (19 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 20/32] qdev: Add name parameter to qdev_class_add_property() Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 14:47 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 22/32] qdev: Wrap getters and setters in separate helpers Eduardo Habkost
` (11 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
This will make it easier to remove the Property.name field in the
future.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
This is a new patch added in series v2
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
include/hw/qdev-properties.h | 2 +-
hw/core/qdev-properties.c | 7 ++++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 476737b9da..ab9c538ba4 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -34,7 +34,7 @@ struct PropertyInfo {
const QEnumLookup *enum_table;
int (*print)(Object *obj, Property *prop, char *dest, size_t len);
void (*set_default_value)(ObjectProperty *op, const Property *prop);
- void (*create)(ObjectClass *oc, Property *prop);
+ void (*create)(ObjectClass *oc, const char *name, Property *prop);
ObjectPropertyAccessor *get;
ObjectPropertyAccessor *set;
ObjectPropertyRelease *release;
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 457c7fe4ba..c68a20695d 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -851,9 +851,10 @@ const PropertyInfo qdev_prop_size = {
/* --- object link property --- */
-static void create_link_property(ObjectClass *oc, Property *prop)
+static void create_link_property(ObjectClass *oc, const char *name,
+ Property *prop)
{
- object_class_property_add_link(oc, prop->name, prop->link_type,
+ object_class_property_add_link(oc, name, prop->link_type,
prop->offset,
qdev_prop_allow_set_link_before_realize,
OBJ_PROP_LINK_STRONG);
@@ -893,7 +894,7 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
ObjectClass *oc = OBJECT_CLASS(klass);
if (prop->info->create) {
- prop->info->create(oc, prop);
+ prop->info->create(oc, name, prop);
} else {
ObjectProperty *op;
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 22/32] qdev: Wrap getters and setters in separate helpers
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (20 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 21/32] qdev: Add name argument to PropertyInfo.create method Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-15 14:42 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set() Eduardo Habkost
` (10 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
We'll add extra code to the qdev property getters and setters, so
add wrapper functions where additional actions can be performed.
The new functions have a "field_prop_" prefix instead of "qdev_"
because the code will eventually be moved outside
qdev-properties.c, to common QOM code.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
* Redone after changes in previous patches in the series
* Renamed functions from static_prop_* to field_prop_*
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties.c | 44 +++++++++++++++++++++++++++++++++++----
1 file changed, 40 insertions(+), 4 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index c68a20695d..b924f13d58 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -44,6 +44,40 @@ void *qdev_get_prop_ptr(Object *obj, Property *prop)
return ptr;
}
+static void field_prop_get(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ Property *prop = opaque;
+ return prop->info->get(obj, v, name, opaque, errp);
+}
+
+/**
+ * field_prop_getter: Return getter function to be used for property
+ *
+ * Return value can be NULL if @info has no getter function.
+ */
+static ObjectPropertyAccessor *field_prop_getter(const PropertyInfo *info)
+{
+ return info->get ? field_prop_get : NULL;
+}
+
+static void field_prop_set(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
+{
+ Property *prop = opaque;
+ return prop->info->set(obj, v, name, opaque, errp);
+}
+
+/**
+ * field_prop_setter: Return setter function to be used for property
+ *
+ * Return value can be NULL if @info has not setter function.
+ */
+static ObjectPropertyAccessor *field_prop_setter(const PropertyInfo *info)
+{
+ return info->set ? field_prop_set : NULL;
+}
+
void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
@@ -630,8 +664,8 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
assert(qdev_get_prop_ptr(obj, &arrayprop->prop) == eltptr);
object_property_add(obj, propname,
arrayprop->prop.info->name,
- arrayprop->prop.info->get,
- arrayprop->prop.info->set,
+ field_prop_getter(arrayprop->prop.info),
+ field_prop_setter(arrayprop->prop.info),
array_element_release,
arrayprop);
}
@@ -873,7 +907,8 @@ void qdev_property_add_static(DeviceState *dev, Property *prop)
assert(!prop->info->create);
op = object_property_add(obj, prop->name, prop->info->name,
- prop->info->get, prop->info->set,
+ field_prop_getter(prop->info),
+ field_prop_setter(prop->info),
prop->info->release,
prop);
@@ -900,7 +935,8 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
op = object_class_property_add(oc,
name, prop->info->name,
- prop->info->get, prop->info->set,
+ field_prop_getter(prop->info),
+ field_prop_setter(prop->info),
prop->info->release,
prop);
if (prop->set_default) {
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set()
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (21 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 22/32] qdev: Wrap getters and setters in separate helpers Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 7:46 ` Paul Durrant
` (2 more replies)
2020-12-11 22:05 ` [PATCH v4 24/32] qdev: Make PropertyInfo.create return ObjectProperty* Eduardo Habkost
` (9 subsequent siblings)
32 siblings, 3 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Matthew Rosato, Paul Durrant, Mark Cave-Ayland,
Stefano Stabellini, xen-devel, qemu-block, Stefan Berger,
David Hildenbrand, Markus Armbruster, Halil Pasic,
Christian Borntraeger, Anthony Perard, Marc-André Lureau,
Philippe Mathieu-Daudé, Artyom Tarasenko, Thomas Huth,
Alex Williamson, Igor Mammedov, John Snow, Richard Henderson,
Kevin Wolf, Daniel P. Berrange, Cornelia Huck, qemu-s390x,
Max Reitz, Paolo Bonzini, Stefan Berger
Every single qdev property setter function manually checks
dev->realized. We can just check dev->realized inside
qdev_property_set() instead.
The check is being added as a separate function
(qdev_prop_allow_set()) because it will become a callback later.
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
* Removed unused variable at xen_block_set_vdev()
* Redone patch after changes in the previous patches in the
series
---
Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Anthony Perard <anthony.perard@citrix.com>
Cc: Paul Durrant <paul@xen.org>
Cc: Kevin Wolf <kwolf@redhat.com>
Cc: Max Reitz <mreitz@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Cornelia Huck <cohuck@redhat.com>
Cc: Halil Pasic <pasic@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: David Hildenbrand <david@redhat.com>
Cc: Thomas Huth <thuth@redhat.com>
Cc: Matthew Rosato <mjrosato@linux.ibm.com>
Cc: Alex Williamson <alex.williamson@redhat.com>
Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Cc: Artyom Tarasenko <atar4qemu@gmail.com>
Cc: qemu-devel@nongnu.org
Cc: xen-devel@lists.xenproject.org
Cc: qemu-block@nongnu.org
Cc: qemu-s390x@nongnu.org
---
backends/tpm/tpm_util.c | 6 --
hw/block/xen-block.c | 6 --
hw/core/qdev-properties-system.c | 70 ----------------------
hw/core/qdev-properties.c | 100 ++++++-------------------------
hw/s390x/css.c | 6 --
hw/s390x/s390-pci-bus.c | 6 --
hw/vfio/pci-quirks.c | 6 --
target/sparc/cpu.c | 6 --
8 files changed, 18 insertions(+), 188 deletions(-)
diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c
index a5d997e7dc..39b45fa46d 100644
--- a/backends/tpm/tpm_util.c
+++ b/backends/tpm/tpm_util.c
@@ -46,16 +46,10 @@ static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
TPMBackend *s, **be = qdev_get_prop_ptr(obj, prop);
char *str;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
index 905e4acd97..bd1aef63a7 100644
--- a/hw/block/xen-block.c
+++ b/hw/block/xen-block.c
@@ -395,17 +395,11 @@ static int vbd_name_to_disk(const char *name, const char **endp,
static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
char *str, *p;
const char *end;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 42529c3b65..f31aea3de1 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -94,11 +94,6 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
bool blk_created = false;
int ret;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
@@ -230,17 +225,11 @@ static void get_chr(Object *obj, Visitor *v, const char *name, void *opaque,
static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
CharBackend *be = qdev_get_prop_ptr(obj, prop);
Chardev *s;
char *str;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
@@ -311,18 +300,12 @@ static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
MACAddr *mac = qdev_get_prop_ptr(obj, prop);
int i, pos;
char *str;
const char *p;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
@@ -390,7 +373,6 @@ static void get_netdev(Object *obj, Visitor *v, const char *name,
static void set_netdev(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
NetClientState **ncs = peers_ptr->ncs;
@@ -398,11 +380,6 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
int queues, err = 0, i = 0;
char *str;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
@@ -469,18 +446,12 @@ static void get_audiodev(Object *obj, Visitor *v, const char* name,
static void set_audiodev(Object *obj, Visitor *v, const char* name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
AudioState *state;
int err = 0;
char *str;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
@@ -582,11 +553,6 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
uint64_t value;
Error *local_err = NULL;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_size(v, name, &value, errp)) {
return;
}
@@ -686,7 +652,6 @@ static void get_reserved_region(Object *obj, Visitor *v, const char *name,
static void set_reserved_region(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
Error *local_err = NULL;
@@ -694,11 +659,6 @@ static void set_reserved_region(Object *obj, Visitor *v, const char *name,
char *str;
int ret;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_str(v, name, &str, &local_err);
if (local_err) {
error_propagate(errp, local_err);
@@ -754,17 +714,11 @@ const PropertyInfo qdev_prop_reserved_region = {
static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
int32_t value, *ptr = qdev_get_prop_ptr(obj, prop);
unsigned int slot, fn, n;
char *str;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, NULL)) {
if (!visit_type_int32(v, name, &value, errp)) {
return;
@@ -848,7 +802,6 @@ static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
char *str, *p;
@@ -857,11 +810,6 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
unsigned long dom = 0, bus = 0;
unsigned int slot = 0, func = 0;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
@@ -972,16 +920,10 @@ static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
int speed;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_enum(v, name, &speed, prop->info->enum_table,
errp)) {
return;
@@ -1057,16 +999,10 @@ static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
int width;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_enum(v, name, &width, prop->info->enum_table,
errp)) {
return;
@@ -1129,16 +1065,10 @@ static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
char *str;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index b924f13d58..92f48ecbf2 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -24,6 +24,19 @@ void qdev_prop_set_after_realize(DeviceState *dev, const char *name,
}
}
+/* returns: true if property is allowed to be set, false otherwise */
+static bool qdev_prop_allow_set(Object *obj, const char *name,
+ Error **errp)
+{
+ DeviceState *dev = DEVICE(obj);
+
+ if (dev->realized) {
+ qdev_prop_set_after_realize(dev, name, errp);
+ return false;
+ }
+ return true;
+}
+
void qdev_prop_allow_set_link_before_realize(const Object *obj,
const char *name,
Object *val, Error **errp)
@@ -65,6 +78,11 @@ static void field_prop_set(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
+
+ if (!qdev_prop_allow_set(obj, name, errp)) {
+ return;
+ }
+
return prop->info->set(obj, v, name, opaque, errp);
}
@@ -90,15 +108,9 @@ void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
int *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
}
@@ -148,15 +160,9 @@ static void prop_get_bit(Object *obj, Visitor *v, const char *name,
static void prop_set_bit(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
bool value;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_bool(v, name, &value, errp)) {
return;
}
@@ -208,15 +214,9 @@ static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
bool value;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_bool(v, name, &value, errp)) {
return;
}
@@ -245,15 +245,9 @@ static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
bool *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_bool(v, name, ptr, errp);
}
@@ -278,15 +272,9 @@ static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_uint8(v, name, ptr, errp);
}
@@ -323,15 +311,9 @@ static void get_uint16(Object *obj, Visitor *v, const char *name,
static void set_uint16(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_uint16(v, name, ptr, errp);
}
@@ -356,15 +338,9 @@ static void get_uint32(Object *obj, Visitor *v, const char *name,
static void set_uint32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_uint32(v, name, ptr, errp);
}
@@ -380,15 +356,9 @@ void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
int32_t *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_int32(v, name, ptr, errp);
}
@@ -420,15 +390,9 @@ static void get_uint64(Object *obj, Visitor *v, const char *name,
static void set_uint64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_uint64(v, name, ptr, errp);
}
@@ -444,15 +408,9 @@ static void get_int64(Object *obj, Visitor *v, const char *name,
static void set_int64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
int64_t *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_int64(v, name, ptr, errp);
}
@@ -495,16 +453,10 @@ static void get_string(Object *obj, Visitor *v, const char *name,
static void set_string(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
char **ptr = qdev_get_prop_ptr(obj, prop);
char *str;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
@@ -545,16 +497,10 @@ void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
uint64_t value;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_size(v, name, &value, errp)) {
return;
}
@@ -621,10 +567,6 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
const char *arrayname;
int i;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
if (*alenptr) {
error_setg(errp, "array size property %s may not be set more than once",
name);
@@ -864,15 +806,9 @@ static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
visit_type_size(v, name, ptr, errp);
}
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 7a44320d12..496e2c5801 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -2372,18 +2372,12 @@ static void get_css_devid(Object *obj, Visitor *v, const char *name,
static void set_css_devid(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
char *str;
int num, n1, n2;
unsigned int cssid, ssid, devid;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_str(v, name, &str, errp)) {
return;
}
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index 8b6be1197b..30511f620e 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -1338,16 +1338,10 @@ static void s390_pci_get_fid(Object *obj, Visitor *v, const char *name,
static void s390_pci_set_fid(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
S390PCIBusDevice *zpci = S390_PCI_DEVICE(obj);
Property *prop = opaque;
uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_uint32(v, name, ptr, errp)) {
return;
}
diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c
index 53569925a2..802979635c 100644
--- a/hw/vfio/pci-quirks.c
+++ b/hw/vfio/pci-quirks.c
@@ -1498,15 +1498,9 @@ static void set_nv_gpudirect_clique_id(Object *obj, Visitor *v,
const char *name, void *opaque,
Error **errp)
{
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
uint8_t value, *ptr = qdev_get_prop_ptr(obj, prop);
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_uint8(v, name, &value, errp)) {
return;
}
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index 92534bcd18..b730146bbe 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -798,17 +798,11 @@ static void sparc_get_nwindows(Object *obj, Visitor *v, const char *name,
static void sparc_set_nwindows(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
- DeviceState *dev = DEVICE(obj);
const int64_t min = MIN_NWINDOWS;
const int64_t max = MAX_NWINDOWS;
SPARCCPU *cpu = SPARC_CPU(obj);
int64_t value;
- if (dev->realized) {
- qdev_prop_set_after_realize(dev, name, errp);
- return;
- }
-
if (!visit_type_int(v, name, &value, errp)) {
return;
}
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 24/32] qdev: Make PropertyInfo.create return ObjectProperty*
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (22 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set() Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 14:57 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 25/32] qdev: Make qdev_class_add_property() more flexible Eduardo Habkost
` (8 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Returning ObjectProperty* will be useful for new property
registration code that will add additional callbacks
to ObjectProperty after registering it.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
* Redone patch on top of additional changes in series v2
* Commit message reword
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
include/hw/qdev-properties.h | 3 ++-
hw/core/qdev-properties.c | 12 ++++++------
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index ab9c538ba4..aae882317a 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -34,7 +34,8 @@ struct PropertyInfo {
const QEnumLookup *enum_table;
int (*print)(Object *obj, Property *prop, char *dest, size_t len);
void (*set_default_value)(ObjectProperty *op, const Property *prop);
- void (*create)(ObjectClass *oc, const char *name, Property *prop);
+ ObjectProperty *(*create)(ObjectClass *oc, const char *name,
+ Property *prop);
ObjectPropertyAccessor *get;
ObjectPropertyAccessor *set;
ObjectPropertyRelease *release;
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 92f48ecbf2..3bb05e7d0d 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -821,13 +821,13 @@ const PropertyInfo qdev_prop_size = {
/* --- object link property --- */
-static void create_link_property(ObjectClass *oc, const char *name,
- Property *prop)
+static ObjectProperty *create_link_property(ObjectClass *oc, const char *name,
+ Property *prop)
{
- object_class_property_add_link(oc, name, prop->link_type,
- prop->offset,
- qdev_prop_allow_set_link_before_realize,
- OBJ_PROP_LINK_STRONG);
+ return object_class_property_add_link(oc, name, prop->link_type,
+ prop->offset,
+ qdev_prop_allow_set_link_before_realize,
+ OBJ_PROP_LINK_STRONG);
}
const PropertyInfo qdev_prop_link = {
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 25/32] qdev: Make qdev_class_add_property() more flexible
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (23 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 24/32] qdev: Make PropertyInfo.create return ObjectProperty* Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 15:00 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 26/32] qdev: Separate generic and device-specific property registration Eduardo Habkost
` (7 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Support Property.set_default and PropertyInfo.description even if
PropertyInfo.create is set.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
* Patch redone after changes in the previous patches in the
series
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 3bb05e7d0d..fcda0c8f4b 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -863,24 +863,25 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
Property *prop)
{
ObjectClass *oc = OBJECT_CLASS(klass);
+ ObjectProperty *op;
if (prop->info->create) {
- prop->info->create(oc, name, prop);
+ op = prop->info->create(oc, name, prop);
} else {
- ObjectProperty *op;
-
op = object_class_property_add(oc,
name, prop->info->name,
field_prop_getter(prop->info),
field_prop_setter(prop->info),
prop->info->release,
prop);
- if (prop->set_default) {
- prop->info->set_default_value(op, prop);
- }
}
- object_class_property_set_description(oc, name,
- prop->info->description);
+ if (prop->set_default) {
+ prop->info->set_default_value(op, prop);
+ }
+ if (prop->info->description) {
+ object_class_property_set_description(oc, name,
+ prop->info->description);
+ }
}
/**
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 26/32] qdev: Separate generic and device-specific property registration
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (24 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 25/32] qdev: Make qdev_class_add_property() more flexible Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-15 14:33 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 27/32] qdev: Rename qdev_propinfo_* to field_prop_* Eduardo Habkost
` (6 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
qdev_class_add_property() and qdev_property_add_static() will
have code that's specific for device types.
object_class_property_add_field_static() and
object_property_add_field() will be generic and part of the QOM
field property API. Note that the new functions have a `name`
parameter because the plan is to eventually get rid of the
Property.name field.
The declarations for the new functions are being added to
qdev-properties-internal.h, but they will be moved to a QOM
header later.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v2 -> v3:
* Re-added array-based array registration function, named
as object_class_add_field_properties()
* Renamed object_class_property_add_field() to
object_class_property_add_field_static(), to indicate that
the function expect the Property argument to have static life
time.
* Keep all new functions as internal API by now,
until we decide what's going to be the preferred API for
registering class field properties.
Changes v1 -> v2:
* Patch redone after changes in previous patches in the series
* Rename new functions to object*_property_add_field()
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-prop-internal.h | 42 ++++++++++++++++++++++++++++++++++++
hw/core/qdev-properties.c | 37 ++++++++++++++++++++++++-------
2 files changed, 71 insertions(+), 8 deletions(-)
diff --git a/hw/core/qdev-prop-internal.h b/hw/core/qdev-prop-internal.h
index d7b77844fe..6f17ddf271 100644
--- a/hw/core/qdev-prop-internal.h
+++ b/hw/core/qdev-prop-internal.h
@@ -25,4 +25,46 @@ void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp);
+/**
+ * object_property_add_field: Add a field property to an object instance
+ * @obj: object instance
+ * @name: property name
+ * @prop: property definition
+ *
+ * This function should not be used in new code. Please add class properties
+ * instead, using object_class_add_field().
+ */
+ObjectProperty *
+object_property_add_field(Object *obj, const char *name,
+ Property *prop);
+
+/**
+ * object_class_property_add_field_static: Add a field property to object class
+ * @oc: object class
+ * @name: property name
+ * @prop: property definition
+ *
+ * Add a field property to an object class. A field property is
+ * a property that will change a field at a specific offset of the
+ * object instance struct.
+ *
+ * *@prop must have static life time.
+ */
+ObjectProperty *
+object_class_property_add_field_static(ObjectClass *oc, const char *name,
+ Property *prop);
+
+/**
+ * object_class_add_field_properties: Add field properties from array to a class
+ * @oc: object class
+ * @props: array of property definitions
+ *
+ * Register an array of field properties to a class, using
+ * object_class_property_add_field_static() for each array element.
+ *
+ * The array at @props must end with DEFINE_PROP_END_OF_LIST(), and
+ * must have static life time.
+ */
+void object_class_add_field_properties(ObjectClass *oc, Property *props);
+
#endif
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index fcda0c8f4b..8436b60ec4 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -835,20 +835,21 @@ const PropertyInfo qdev_prop_link = {
.create = create_link_property,
};
-void qdev_property_add_static(DeviceState *dev, Property *prop)
+ObjectProperty *
+object_property_add_field(Object *obj, const char *name,
+ Property *prop)
{
- Object *obj = OBJECT(dev);
ObjectProperty *op;
assert(!prop->info->create);
- op = object_property_add(obj, prop->name, prop->info->name,
+ op = object_property_add(obj, name, prop->info->name,
field_prop_getter(prop->info),
field_prop_setter(prop->info),
prop->info->release,
prop);
- object_property_set_description(obj, prop->name,
+ object_property_set_description(obj, name,
prop->info->description);
if (prop->set_default) {
@@ -857,12 +858,14 @@ void qdev_property_add_static(DeviceState *dev, Property *prop)
op->init(obj, op);
}
}
+
+ return op;
}
-static void qdev_class_add_property(DeviceClass *klass, const char *name,
- Property *prop)
+ObjectProperty *
+object_class_property_add_field_static(ObjectClass *oc, const char *name,
+ Property *prop)
{
- ObjectClass *oc = OBJECT_CLASS(klass);
ObjectProperty *op;
if (prop->info->create) {
@@ -882,6 +885,22 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
object_class_property_set_description(oc, name,
prop->info->description);
}
+ return op;
+}
+
+void object_class_add_field_properties(ObjectClass *oc, Property *props)
+{
+ Property *prop;
+
+ for (prop = props; prop && prop->name; prop++) {
+ object_class_property_add_field_static(oc, prop->name, prop);
+ }
+}
+
+
+void qdev_property_add_static(DeviceState *dev, Property *prop)
+{
+ object_property_add_field(OBJECT(dev), prop->name, prop);
}
/**
@@ -932,13 +951,15 @@ static void qdev_class_add_legacy_property(DeviceClass *dc, Property *prop)
void device_class_set_props(DeviceClass *dc, Property *props)
{
+ ObjectClass *oc = OBJECT_CLASS(dc);
Property *prop;
dc->props_ = props;
for (prop = props; prop && prop->name; prop++) {
qdev_class_add_legacy_property(dc, prop);
- qdev_class_add_property(dc, prop->name, prop);
}
+
+ object_class_add_field_properties(oc, props);
}
void qdev_alias_all_properties(DeviceState *target, Object *source)
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 27/32] qdev: Rename qdev_propinfo_* to field_prop_*
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (25 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 26/32] qdev: Separate generic and device-specific property registration Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-15 14:35 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 28/32] qdev: Move qdev_prop_tpm declaration to tpm_prop.h Eduardo Habkost
` (5 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
These functions will be moved to be part of QOM, so rename them.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v2:
* Rename to field_prop_* instead of object_propinfo_*
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-prop-internal.h | 28 +++++++--------
hw/core/qdev-properties-system.c | 48 ++++++++++++-------------
hw/core/qdev-properties.c | 62 ++++++++++++++++----------------
3 files changed, 69 insertions(+), 69 deletions(-)
diff --git a/hw/core/qdev-prop-internal.h b/hw/core/qdev-prop-internal.h
index 6f17ddf271..740a5e530b 100644
--- a/hw/core/qdev-prop-internal.h
+++ b/hw/core/qdev-prop-internal.h
@@ -8,22 +8,22 @@
#ifndef HW_CORE_QDEV_PROP_INTERNAL_H
#define HW_CORE_QDEV_PROP_INTERNAL_H
-void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp);
-void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp);
+void field_prop_get_enum(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp);
+void field_prop_set_enum(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp);
-void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
- const Property *prop);
-void qdev_propinfo_set_default_value_int(ObjectProperty *op,
- const Property *prop);
-void qdev_propinfo_set_default_value_uint(ObjectProperty *op,
- const Property *prop);
+void field_prop_set_default_value_enum(ObjectProperty *op,
+ const Property *prop);
+void field_prop_set_default_value_int(ObjectProperty *op,
+ const Property *prop);
+void field_prop_set_default_value_uint(ObjectProperty *op,
+ const Property *prop);
-void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp);
-void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp);
+void field_prop_get_int32(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp);
+void field_prop_get_size32(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp);
/**
* object_property_add_field: Add a field property to an object instance
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index f31aea3de1..590c5f3d97 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -537,9 +537,9 @@ QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int));
const PropertyInfo qdev_prop_losttickpolicy = {
.name = "LostTickPolicy",
.enum_table = &LostTickPolicy_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .get = field_prop_get_enum,
+ .set = field_prop_set_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* --- blocksize --- */
@@ -568,9 +568,9 @@ const PropertyInfo qdev_prop_blocksize = {
.name = "size",
.description = "A power of two between " MIN_BLOCK_SIZE_STR
" and " MAX_BLOCK_SIZE_STR,
- .get = qdev_propinfo_get_size32,
+ .get = field_prop_get_size32,
.set = set_blocksize,
- .set_default_value = qdev_propinfo_set_default_value_uint,
+ .set_default_value = field_prop_set_default_value_uint,
};
/* --- Block device error handling policy --- */
@@ -582,9 +582,9 @@ const PropertyInfo qdev_prop_blockdev_on_error = {
.description = "Error handling policy, "
"report/ignore/enospc/stop/auto",
.enum_table = &BlockdevOnError_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .get = field_prop_get_enum,
+ .set = field_prop_set_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* --- BIOS CHS translation */
@@ -596,9 +596,9 @@ const PropertyInfo qdev_prop_bios_chs_trans = {
.description = "Logical CHS translation algorithm, "
"auto/none/lba/large/rechs",
.enum_table = &BiosAtaTranslation_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .get = field_prop_get_enum,
+ .set = field_prop_set_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* --- FDC default drive types */
@@ -608,9 +608,9 @@ const PropertyInfo qdev_prop_fdc_drive_type = {
.description = "FDC drive type, "
"144/288/120/none/auto",
.enum_table = &FloppyDriveType_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .get = field_prop_get_enum,
+ .set = field_prop_set_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* --- MultiFDCompression --- */
@@ -620,9 +620,9 @@ const PropertyInfo qdev_prop_multifd_compression = {
.description = "multifd_compression values, "
"none/zlib/zstd",
.enum_table = &MultiFDCompression_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .get = field_prop_get_enum,
+ .set = field_prop_set_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* --- Reserved Region --- */
@@ -766,9 +766,9 @@ const PropertyInfo qdev_prop_pci_devfn = {
.name = "int32",
.description = "Slot and optional function number, example: 06.0 or 06",
.print = print_pci_devfn,
- .get = qdev_propinfo_get_int32,
+ .get = field_prop_get_int32,
.set = set_pci_devfn,
- .set_default_value = qdev_propinfo_set_default_value_int,
+ .set_default_value = field_prop_set_default_value_int,
};
/* --- pci host address --- */
@@ -882,9 +882,9 @@ const PropertyInfo qdev_prop_off_auto_pcibar = {
.name = "OffAutoPCIBAR",
.description = "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
.enum_table = &OffAutoPCIBAR_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .get = field_prop_get_enum,
+ .set = field_prop_set_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* --- PCIELinkSpeed 2_5/5/8/16 -- */
@@ -954,7 +954,7 @@ const PropertyInfo qdev_prop_pcie_link_speed = {
.enum_table = &PCIELinkSpeed_lookup,
.get = get_prop_pcielinkspeed,
.set = set_prop_pcielinkspeed,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* --- PCIELinkWidth 1/2/4/8/12/16/32 -- */
@@ -1042,7 +1042,7 @@ const PropertyInfo qdev_prop_pcie_link_width = {
.enum_table = &PCIELinkWidth_lookup,
.get = get_prop_pcielinkwidth,
.set = set_prop_pcielinkwidth,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* --- UUID --- */
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 8436b60ec4..d2f565f552 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -96,8 +96,8 @@ static ObjectPropertyAccessor *field_prop_setter(const PropertyInfo *info)
return info->set ? field_prop_set : NULL;
}
-void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
+void field_prop_get_enum(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
Property *prop = opaque;
int *ptr = qdev_get_prop_ptr(obj, prop);
@@ -105,8 +105,8 @@ void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
}
-void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
+void field_prop_set_enum(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
Property *prop = opaque;
int *ptr = qdev_get_prop_ptr(obj, prop);
@@ -114,8 +114,8 @@ void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
}
-void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
- const Property *prop)
+void field_prop_set_default_value_enum(ObjectProperty *op,
+ const Property *prop)
{
object_property_set_default_str(op,
qapi_enum_lookup(prop->info->enum_table, prop->defval.i));
@@ -123,9 +123,9 @@ void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
const PropertyInfo qdev_prop_enum = {
.name = "enum",
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .get = field_prop_get_enum,
+ .set = field_prop_set_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* Bit */
@@ -278,14 +278,14 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
visit_type_uint8(v, name, ptr, errp);
}
-void qdev_propinfo_set_default_value_int(ObjectProperty *op,
- const Property *prop)
+void field_prop_set_default_value_int(ObjectProperty *op,
+ const Property *prop)
{
object_property_set_default_int(op, prop->defval.i);
}
-void qdev_propinfo_set_default_value_uint(ObjectProperty *op,
- const Property *prop)
+void field_prop_set_default_value_uint(ObjectProperty *op,
+ const Property *prop)
{
object_property_set_default_uint(op, prop->defval.u);
}
@@ -294,7 +294,7 @@ const PropertyInfo qdev_prop_uint8 = {
.name = "uint8",
.get = get_uint8,
.set = set_uint8,
- .set_default_value = qdev_propinfo_set_default_value_uint,
+ .set_default_value = field_prop_set_default_value_uint,
};
/* --- 16bit integer --- */
@@ -321,7 +321,7 @@ const PropertyInfo qdev_prop_uint16 = {
.name = "uint16",
.get = get_uint16,
.set = set_uint16,
- .set_default_value = qdev_propinfo_set_default_value_uint,
+ .set_default_value = field_prop_set_default_value_uint,
};
/* --- 32bit integer --- */
@@ -344,8 +344,8 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
visit_type_uint32(v, name, ptr, errp);
}
-void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
+void field_prop_get_int32(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
Property *prop = opaque;
int32_t *ptr = qdev_get_prop_ptr(obj, prop);
@@ -366,14 +366,14 @@ const PropertyInfo qdev_prop_uint32 = {
.name = "uint32",
.get = get_uint32,
.set = set_uint32,
- .set_default_value = qdev_propinfo_set_default_value_uint,
+ .set_default_value = field_prop_set_default_value_uint,
};
const PropertyInfo qdev_prop_int32 = {
.name = "int32",
- .get = qdev_propinfo_get_int32,
+ .get = field_prop_get_int32,
.set = set_int32,
- .set_default_value = qdev_propinfo_set_default_value_int,
+ .set_default_value = field_prop_set_default_value_int,
};
/* --- 64bit integer --- */
@@ -418,14 +418,14 @@ const PropertyInfo qdev_prop_uint64 = {
.name = "uint64",
.get = get_uint64,
.set = set_uint64,
- .set_default_value = qdev_propinfo_set_default_value_uint,
+ .set_default_value = field_prop_set_default_value_uint,
};
const PropertyInfo qdev_prop_int64 = {
.name = "int64",
.get = get_int64,
.set = set_int64,
- .set_default_value = qdev_propinfo_set_default_value_int,
+ .set_default_value = field_prop_set_default_value_int,
};
/* --- string --- */
@@ -477,15 +477,15 @@ const PropertyInfo qdev_prop_on_off_auto = {
.name = "OnOffAuto",
.description = "on/off/auto",
.enum_table = &OnOffAuto_lookup,
- .get = qdev_propinfo_get_enum,
- .set = qdev_propinfo_set_enum,
- .set_default_value = qdev_propinfo_set_default_value_enum,
+ .get = field_prop_get_enum,
+ .set = field_prop_set_enum,
+ .set_default_value = field_prop_set_default_value_enum,
};
/* --- 32bit unsigned int 'size' type --- */
-void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
- void *opaque, Error **errp)
+void field_prop_get_size32(Object *obj, Visitor *v, const char *name,
+ void *opaque, Error **errp)
{
Property *prop = opaque;
uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
@@ -518,9 +518,9 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
const PropertyInfo qdev_prop_size32 = {
.name = "size",
- .get = qdev_propinfo_get_size32,
+ .get = field_prop_get_size32,
.set = set_size32,
- .set_default_value = qdev_propinfo_set_default_value_uint,
+ .set_default_value = field_prop_set_default_value_uint,
};
/* --- support for array properties --- */
@@ -617,7 +617,7 @@ const PropertyInfo qdev_prop_arraylen = {
.name = "uint32",
.get = get_uint32,
.set = set_prop_arraylen,
- .set_default_value = qdev_propinfo_set_default_value_uint,
+ .set_default_value = field_prop_set_default_value_uint,
};
/* --- public helpers --- */
@@ -816,7 +816,7 @@ const PropertyInfo qdev_prop_size = {
.name = "size",
.get = get_size,
.set = set_size,
- .set_default_value = qdev_propinfo_set_default_value_uint,
+ .set_default_value = field_prop_set_default_value_uint,
};
/* --- object link property --- */
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 28/32] qdev: Move qdev_prop_tpm declaration to tpm_prop.h
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (26 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 27/32] qdev: Rename qdev_propinfo_* to field_prop_* Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-15 14:36 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 29/32] qdev: Rename qdev_prop_* to prop_info_* Eduardo Habkost
` (4 subsequent siblings)
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, Stefan Berger, John Snow,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Igor Mammedov, Philippe Mathieu-Daudé, Stefan Berger
Move the variable declaration close to the macro that uses it.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/tpm/tpm_prop.h | 2 ++
include/hw/qdev-properties.h | 1 -
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/hw/tpm/tpm_prop.h b/hw/tpm/tpm_prop.h
index d19e40c112..bbd4225d66 100644
--- a/hw/tpm/tpm_prop.h
+++ b/hw/tpm/tpm_prop.h
@@ -25,6 +25,8 @@
#include "sysemu/tpm_backend.h"
#include "hw/qdev-properties.h"
+extern const PropertyInfo qdev_prop_tpm;
+
#define DEFINE_PROP_TPMBE(_n, _s, _f) \
DEFINE_PROP(_n, _s, _f, qdev_prop_tpm, TPMBackend *)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index aae882317a..68e544708b 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -56,7 +56,6 @@ extern const PropertyInfo qdev_prop_uint64;
extern const PropertyInfo qdev_prop_int64;
extern const PropertyInfo qdev_prop_size;
extern const PropertyInfo qdev_prop_string;
-extern const PropertyInfo qdev_prop_tpm;
extern const PropertyInfo qdev_prop_on_off_auto;
extern const PropertyInfo qdev_prop_size32;
extern const PropertyInfo qdev_prop_arraylen;
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 29/32] qdev: Rename qdev_prop_* to prop_info_*
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (27 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 28/32] qdev: Move qdev_prop_tpm declaration to tpm_prop.h Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr() Eduardo Habkost
` (3 subsequent siblings)
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Peter Maydell, Dmitry Fleytman, Daniel P. Berrange,
Yoshinori Sato, John Snow, Jason Wang, Mark Cave-Ayland,
Markus Armbruster, Paolo Bonzini, qemu-arm,
Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Artyom Tarasenko, Stefan Berger
The basic property types in qdev-properties.c are not going to be
qdev-specific anymore. Rename the variables to prop_info_*.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
* Redone patch after moving UUID property to qdev-properties-system.c
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Dmitry Fleytman <dmitry.fleytman@gmail.com>
Cc: Jason Wang <jasowang@redhat.com>
Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Cc: Artyom Tarasenko <atar4qemu@gmail.com>
Cc: qemu-devel@nongnu.org
Cc: qemu-arm@nongnu.org
---
include/hw/qdev-properties.h | 62 ++++++++++++++++++------------------
hw/core/qdev-properties.c | 36 ++++++++++-----------
hw/intc/arm_gicv3_common.c | 2 +-
hw/intc/rx_icu.c | 4 +--
hw/misc/arm_sysctl.c | 4 +--
hw/net/e1000e.c | 6 ++--
target/arm/cpu.c | 2 +-
target/sparc/cpu.c | 2 +-
8 files changed, 59 insertions(+), 59 deletions(-)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 68e544708b..90222822f1 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -44,22 +44,22 @@ struct PropertyInfo {
/*** qdev-properties.c ***/
-extern const PropertyInfo qdev_prop_bit;
-extern const PropertyInfo qdev_prop_bit64;
-extern const PropertyInfo qdev_prop_bool;
-extern const PropertyInfo qdev_prop_enum;
-extern const PropertyInfo qdev_prop_uint8;
-extern const PropertyInfo qdev_prop_uint16;
-extern const PropertyInfo qdev_prop_uint32;
-extern const PropertyInfo qdev_prop_int32;
-extern const PropertyInfo qdev_prop_uint64;
-extern const PropertyInfo qdev_prop_int64;
-extern const PropertyInfo qdev_prop_size;
-extern const PropertyInfo qdev_prop_string;
-extern const PropertyInfo qdev_prop_on_off_auto;
-extern const PropertyInfo qdev_prop_size32;
-extern const PropertyInfo qdev_prop_arraylen;
-extern const PropertyInfo qdev_prop_link;
+extern const PropertyInfo prop_info_bit;
+extern const PropertyInfo prop_info_bit64;
+extern const PropertyInfo prop_info_bool;
+extern const PropertyInfo prop_info_enum;
+extern const PropertyInfo prop_info_uint8;
+extern const PropertyInfo prop_info_uint16;
+extern const PropertyInfo prop_info_uint32;
+extern const PropertyInfo prop_info_int32;
+extern const PropertyInfo prop_info_uint64;
+extern const PropertyInfo prop_info_int64;
+extern const PropertyInfo prop_info_size;
+extern const PropertyInfo prop_info_string;
+extern const PropertyInfo prop_info_on_off_auto;
+extern const PropertyInfo prop_info_size32;
+extern const PropertyInfo prop_info_arraylen;
+extern const PropertyInfo prop_info_link;
#define DEFINE_PROP(_name, _state, _field, _prop, _type, ...) { \
.name = (_name), \
@@ -78,7 +78,7 @@ extern const PropertyInfo qdev_prop_link;
DEFINE_PROP(_name, _state, _field, _prop, _type)
#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) \
- DEFINE_PROP(_name, _state, _field, qdev_prop_bit, uint32_t, \
+ DEFINE_PROP(_name, _state, _field, prop_info_bit, uint32_t, \
.bitnr = (_bit), \
.set_default = true, \
.defval.u = (bool)_defval)
@@ -92,13 +92,13 @@ extern const PropertyInfo qdev_prop_link;
DEFINE_PROP(_name, _state, _field, _prop, _type)
#define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) \
- DEFINE_PROP(_name, _state, _field, qdev_prop_bit64, uint64_t, \
+ DEFINE_PROP(_name, _state, _field, prop_info_bit64, uint64_t, \
.bitnr = (_bit), \
.set_default = true, \
.defval.u = (bool)_defval)
#define DEFINE_PROP_BOOL(_name, _state, _field, _defval) \
- DEFINE_PROP(_name, _state, _field, qdev_prop_bool, bool, \
+ DEFINE_PROP(_name, _state, _field, prop_info_bool, bool, \
.set_default = true, \
.defval.u = (bool)_defval)
@@ -131,7 +131,7 @@ extern const PropertyInfo qdev_prop_link;
#define DEFINE_PROP_ARRAY(_name, _state, _field, \
_arrayfield, _arrayprop, _arraytype) \
DEFINE_PROP((PROP_ARRAY_LEN_PREFIX _name), \
- _state, _field, qdev_prop_arraylen, uint32_t, \
+ _state, _field, prop_info_arraylen, uint32_t, \
.set_default = true, \
.defval.u = 0, \
.arrayinfo = &(_arrayprop), \
@@ -139,29 +139,29 @@ extern const PropertyInfo qdev_prop_link;
.arrayoffset = offsetof(_state, _arrayfield))
#define DEFINE_PROP_LINK(_name, _state, _field, _type, _ptr_type) \
- DEFINE_PROP(_name, _state, _field, qdev_prop_link, _ptr_type, \
+ DEFINE_PROP(_name, _state, _field, prop_info_link, _ptr_type, \
.link_type = _type)
#define DEFINE_PROP_UINT8(_n, _s, _f, _d) \
- DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_uint8, uint8_t)
+ DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, prop_info_uint8, uint8_t)
#define DEFINE_PROP_UINT16(_n, _s, _f, _d) \
- DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_uint16, uint16_t)
+ DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, prop_info_uint16, uint16_t)
#define DEFINE_PROP_UINT32(_n, _s, _f, _d) \
- DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_uint32, uint32_t)
+ DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, prop_info_uint32, uint32_t)
#define DEFINE_PROP_INT32(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_int32, int32_t)
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, prop_info_int32, int32_t)
#define DEFINE_PROP_UINT64(_n, _s, _f, _d) \
- DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_uint64, uint64_t)
+ DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, prop_info_uint64, uint64_t)
#define DEFINE_PROP_INT64(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_int64, int64_t)
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, prop_info_int64, int64_t)
#define DEFINE_PROP_SIZE(_n, _s, _f, _d) \
- DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size, uint64_t)
+ DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, prop_info_size, uint64_t)
#define DEFINE_PROP_STRING(_n, _s, _f) \
- DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
+ DEFINE_PROP(_n, _s, _f, prop_info_string, char*)
#define DEFINE_PROP_ON_OFF_AUTO(_n, _s, _f, _d) \
- DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_on_off_auto, OnOffAuto)
+ DEFINE_PROP_SIGNED(_n, _s, _f, _d, prop_info_on_off_auto, OnOffAuto)
#define DEFINE_PROP_SIZE32(_n, _s, _f, _d) \
- DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size32, uint32_t)
+ DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, prop_info_size32, uint32_t)
#define DEFINE_PROP_END_OF_LIST() \
{}
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index d2f565f552..c1dd4ae71b 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -121,7 +121,7 @@ void field_prop_set_default_value_enum(ObjectProperty *op,
qapi_enum_lookup(prop->info->enum_table, prop->defval.i));
}
-const PropertyInfo qdev_prop_enum = {
+const PropertyInfo prop_info_enum = {
.name = "enum",
.get = field_prop_get_enum,
.set = field_prop_set_enum,
@@ -132,7 +132,7 @@ const PropertyInfo qdev_prop_enum = {
static uint32_t qdev_get_prop_mask(Property *prop)
{
- assert(prop->info == &qdev_prop_bit);
+ assert(prop->info == &prop_info_bit);
return 0x1 << prop->bitnr;
}
@@ -174,7 +174,7 @@ static void set_default_value_bool(ObjectProperty *op, const Property *prop)
object_property_set_default_bool(op, prop->defval.u);
}
-const PropertyInfo qdev_prop_bit = {
+const PropertyInfo prop_info_bit = {
.name = "bool",
.description = "on/off",
.get = prop_get_bit,
@@ -186,7 +186,7 @@ const PropertyInfo qdev_prop_bit = {
static uint64_t qdev_get_prop_mask64(Property *prop)
{
- assert(prop->info == &qdev_prop_bit64);
+ assert(prop->info == &prop_info_bit64);
return 0x1ull << prop->bitnr;
}
@@ -223,7 +223,7 @@ static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
bit64_prop_set(obj, prop, value);
}
-const PropertyInfo qdev_prop_bit64 = {
+const PropertyInfo prop_info_bit64 = {
.name = "bool",
.description = "on/off",
.get = prop_get_bit64,
@@ -251,7 +251,7 @@ static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
visit_type_bool(v, name, ptr, errp);
}
-const PropertyInfo qdev_prop_bool = {
+const PropertyInfo prop_info_bool = {
.name = "bool",
.get = get_bool,
.set = set_bool,
@@ -290,7 +290,7 @@ void field_prop_set_default_value_uint(ObjectProperty *op,
object_property_set_default_uint(op, prop->defval.u);
}
-const PropertyInfo qdev_prop_uint8 = {
+const PropertyInfo prop_info_uint8 = {
.name = "uint8",
.get = get_uint8,
.set = set_uint8,
@@ -317,7 +317,7 @@ static void set_uint16(Object *obj, Visitor *v, const char *name,
visit_type_uint16(v, name, ptr, errp);
}
-const PropertyInfo qdev_prop_uint16 = {
+const PropertyInfo prop_info_uint16 = {
.name = "uint16",
.get = get_uint16,
.set = set_uint16,
@@ -362,14 +362,14 @@ static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
visit_type_int32(v, name, ptr, errp);
}
-const PropertyInfo qdev_prop_uint32 = {
+const PropertyInfo prop_info_uint32 = {
.name = "uint32",
.get = get_uint32,
.set = set_uint32,
.set_default_value = field_prop_set_default_value_uint,
};
-const PropertyInfo qdev_prop_int32 = {
+const PropertyInfo prop_info_int32 = {
.name = "int32",
.get = field_prop_get_int32,
.set = set_int32,
@@ -414,14 +414,14 @@ static void set_int64(Object *obj, Visitor *v, const char *name,
visit_type_int64(v, name, ptr, errp);
}
-const PropertyInfo qdev_prop_uint64 = {
+const PropertyInfo prop_info_uint64 = {
.name = "uint64",
.get = get_uint64,
.set = set_uint64,
.set_default_value = field_prop_set_default_value_uint,
};
-const PropertyInfo qdev_prop_int64 = {
+const PropertyInfo prop_info_int64 = {
.name = "int64",
.get = get_int64,
.set = set_int64,
@@ -464,7 +464,7 @@ static void set_string(Object *obj, Visitor *v, const char *name,
*ptr = str;
}
-const PropertyInfo qdev_prop_string = {
+const PropertyInfo prop_info_string = {
.name = "str",
.release = release_string,
.get = get_string,
@@ -473,7 +473,7 @@ const PropertyInfo qdev_prop_string = {
/* --- on/off/auto --- */
-const PropertyInfo qdev_prop_on_off_auto = {
+const PropertyInfo prop_info_on_off_auto = {
.name = "OnOffAuto",
.description = "on/off/auto",
.enum_table = &OnOffAuto_lookup,
@@ -516,7 +516,7 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
*ptr = value;
}
-const PropertyInfo qdev_prop_size32 = {
+const PropertyInfo prop_info_size32 = {
.name = "size",
.get = field_prop_get_size32,
.set = set_size32,
@@ -613,7 +613,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
}
}
-const PropertyInfo qdev_prop_arraylen = {
+const PropertyInfo prop_info_arraylen = {
.name = "uint32",
.get = get_uint32,
.set = set_prop_arraylen,
@@ -812,7 +812,7 @@ static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
visit_type_size(v, name, ptr, errp);
}
-const PropertyInfo qdev_prop_size = {
+const PropertyInfo prop_info_size = {
.name = "size",
.get = get_size,
.set = set_size,
@@ -830,7 +830,7 @@ static ObjectProperty *create_link_property(ObjectClass *oc, const char *name,
OBJ_PROP_LINK_STRONG);
}
-const PropertyInfo qdev_prop_link = {
+const PropertyInfo prop_info_link = {
.name = "link",
.create = create_link_property,
};
diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c
index 58ef65f589..6d06b4d4c5 100644
--- a/hw/intc/arm_gicv3_common.c
+++ b/hw/intc/arm_gicv3_common.c
@@ -496,7 +496,7 @@ static Property arm_gicv3_common_properties[] = {
DEFINE_PROP_UINT32("revision", GICv3State, revision, 3),
DEFINE_PROP_BOOL("has-security-extensions", GICv3State, security_extn, 0),
DEFINE_PROP_ARRAY("redist-region-count", GICv3State, nb_redist_regions,
- redist_region_count, qdev_prop_uint32, uint32_t),
+ redist_region_count, prop_info_uint32, uint32_t),
DEFINE_PROP_END_OF_LIST(),
};
diff --git a/hw/intc/rx_icu.c b/hw/intc/rx_icu.c
index e5c01807b9..dde05eaf8b 100644
--- a/hw/intc/rx_icu.c
+++ b/hw/intc/rx_icu.c
@@ -363,9 +363,9 @@ static const VMStateDescription vmstate_rxicu = {
static Property rxicu_properties[] = {
DEFINE_PROP_ARRAY("ipr-map", RXICUState, nr_irqs, map,
- qdev_prop_uint8, uint8_t),
+ prop_info_uint8, uint8_t),
DEFINE_PROP_ARRAY("trigger-level", RXICUState, nr_sense, init_sense,
- qdev_prop_uint8, uint8_t),
+ prop_info_uint8, uint8_t),
DEFINE_PROP_END_OF_LIST(),
};
diff --git a/hw/misc/arm_sysctl.c b/hw/misc/arm_sysctl.c
index 42d4693854..634f3d916f 100644
--- a/hw/misc/arm_sysctl.c
+++ b/hw/misc/arm_sysctl.c
@@ -628,10 +628,10 @@ static Property arm_sysctl_properties[] = {
DEFINE_PROP_UINT32("proc_id", arm_sysctl_state, proc_id, 0),
/* Daughterboard power supply voltages (as reported via SYS_CFG) */
DEFINE_PROP_ARRAY("db-voltage", arm_sysctl_state, db_num_vsensors,
- db_voltage, qdev_prop_uint32, uint32_t),
+ db_voltage, prop_info_uint32, uint32_t),
/* Daughterboard clock reset values (as reported via SYS_CFG) */
DEFINE_PROP_ARRAY("db-clock", arm_sysctl_state, db_num_clocks,
- db_clock_reset, qdev_prop_uint32, uint32_t),
+ db_clock_reset, prop_info_uint32, uint32_t),
DEFINE_PROP_END_OF_LIST(),
};
diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c
index a8a77eca95..9d2f471c7c 100644
--- a/hw/net/e1000e.c
+++ b/hw/net/e1000e.c
@@ -686,15 +686,15 @@ static void e1000e_class_init(ObjectClass *class, void *data)
dc->reset = e1000e_qdev_reset;
dc->vmsd = &e1000e_vmstate;
- e1000e_prop_disable_vnet = qdev_prop_uint8;
+ e1000e_prop_disable_vnet = prop_info_uint8;
e1000e_prop_disable_vnet.description = "Do not use virtio headers, "
"perform SW offloads emulation "
"instead";
- e1000e_prop_subsys_ven = qdev_prop_uint16;
+ e1000e_prop_subsys_ven = prop_info_uint16;
e1000e_prop_subsys_ven.description = "PCI device Subsystem Vendor ID";
- e1000e_prop_subsys = qdev_prop_uint16;
+ e1000e_prop_subsys = prop_info_uint16;
e1000e_prop_subsys.description = "PCI device Subsystem ID";
device_class_set_props(dc, e1000e_properties);
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index d6188f6566..bb34ff1aab 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -1111,7 +1111,7 @@ static Property arm_cpu_has_mpu_property =
static Property arm_cpu_pmsav7_dregion_property =
DEFINE_PROP_UNSIGNED_NODEFAULT("pmsav7-dregion", ARMCPU,
pmsav7_dregion,
- qdev_prop_uint32, uint32_t);
+ prop_info_uint32, uint32_t);
static bool arm_get_pmu(Object *obj, Error **errp)
{
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index b730146bbe..0da2190cac 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -839,7 +839,7 @@ static Property sparc_cpu_properties[] = {
DEFINE_PROP_BIT("cmt", SPARCCPU, env.def.features, 12, false),
DEFINE_PROP_BIT("gl", SPARCCPU, env.def.features, 13, false),
DEFINE_PROP_UNSIGNED("iu-version", SPARCCPU, env.def.iu_version, 0,
- qdev_prop_uint64, target_ulong),
+ prop_info_uint64, target_ulong),
DEFINE_PROP_UINT32("fpu-version", SPARCCPU, env.def.fpu_version, 0),
DEFINE_PROP_UINT32("mmu-version", SPARCCPU, env.def.mmu_version, 0),
DEFINE_PROP("nwindows", SPARCCPU, env.def.nwindows,
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr()
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (28 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 29/32] qdev: Rename qdev_prop_* to prop_info_* Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 7:47 ` Paul Durrant
` (2 more replies)
2020-12-11 22:05 ` [PATCH v4 31/32] qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen() Eduardo Habkost
` (2 subsequent siblings)
32 siblings, 3 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Matthew Rosato, Paul Durrant, Stefano Stabellini, xen-devel,
qemu-block, Stefan Berger, David Hildenbrand, Markus Armbruster,
Halil Pasic, Christian Borntraeger, Anthony Perard,
Marc-André Lureau, Philippe Mathieu-Daudé, Thomas Huth,
Alex Williamson, Igor Mammedov, John Snow, Richard Henderson,
Kevin Wolf, Daniel P. Berrange, Cornelia Huck, qemu-s390x,
Max Reitz, Paolo Bonzini, Stefan Berger
The function will be moved to common QOM code, as it is not
specific to TYPE_DEVICE anymore.
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Changes v1 -> v2:
* Rename to object_field_prop_ptr() instead of object_static_prop_ptr()
---
Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Anthony Perard <anthony.perard@citrix.com>
Cc: Paul Durrant <paul@xen.org>
Cc: Kevin Wolf <kwolf@redhat.com>
Cc: Max Reitz <mreitz@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Cornelia Huck <cohuck@redhat.com>
Cc: Halil Pasic <pasic@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: David Hildenbrand <david@redhat.com>
Cc: Thomas Huth <thuth@redhat.com>
Cc: Matthew Rosato <mjrosato@linux.ibm.com>
Cc: Alex Williamson <alex.williamson@redhat.com>
Cc: qemu-devel@nongnu.org
Cc: xen-devel@lists.xenproject.org
Cc: qemu-block@nongnu.org
Cc: qemu-s390x@nongnu.org
---
include/hw/qdev-properties.h | 2 +-
backends/tpm/tpm_util.c | 6 ++--
hw/block/xen-block.c | 4 +--
hw/core/qdev-properties-system.c | 50 +++++++++++++-------------
hw/core/qdev-properties.c | 60 ++++++++++++++++----------------
hw/s390x/css.c | 4 +--
hw/s390x/s390-pci-bus.c | 4 +--
hw/vfio/pci-quirks.c | 4 +--
8 files changed, 67 insertions(+), 67 deletions(-)
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 90222822f1..97bb9494ae 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -193,7 +193,7 @@ void qdev_prop_set_macaddr(DeviceState *dev, const char *name,
const uint8_t *value);
void qdev_prop_set_enum(DeviceState *dev, const char *name, int value);
-void *qdev_get_prop_ptr(Object *obj, Property *prop);
+void *object_field_prop_ptr(Object *obj, Property *prop);
void qdev_prop_register_global(GlobalProperty *prop);
const GlobalProperty *qdev_find_global_prop(Object *obj,
diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c
index 39b45fa46d..a6e6d3e72f 100644
--- a/backends/tpm/tpm_util.c
+++ b/backends/tpm/tpm_util.c
@@ -35,7 +35,7 @@
static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- TPMBackend **be = qdev_get_prop_ptr(obj, opaque);
+ TPMBackend **be = object_field_prop_ptr(obj, opaque);
char *p;
p = g_strdup(*be ? (*be)->id : "");
@@ -47,7 +47,7 @@ static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- TPMBackend *s, **be = qdev_get_prop_ptr(obj, prop);
+ TPMBackend *s, **be = object_field_prop_ptr(obj, prop);
char *str;
if (!visit_type_str(v, name, &str, errp)) {
@@ -67,7 +67,7 @@ static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
static void release_tpm(Object *obj, const char *name, void *opaque)
{
Property *prop = opaque;
- TPMBackend **be = qdev_get_prop_ptr(obj, prop);
+ TPMBackend **be = object_field_prop_ptr(obj, prop);
if (*be) {
tpm_backend_reset(*be);
diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
index bd1aef63a7..718d886e5c 100644
--- a/hw/block/xen-block.c
+++ b/hw/block/xen-block.c
@@ -336,7 +336,7 @@ static void xen_block_get_vdev(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
+ XenBlockVdev *vdev = object_field_prop_ptr(obj, prop);
char *str;
switch (vdev->type) {
@@ -396,7 +396,7 @@ static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
+ XenBlockVdev *vdev = object_field_prop_ptr(obj, prop);
char *str, *p;
const char *end;
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 590c5f3d97..e6d378a34e 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -62,7 +62,7 @@ static void get_drive(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- void **ptr = qdev_get_prop_ptr(obj, prop);
+ void **ptr = object_field_prop_ptr(obj, prop);
const char *value;
char *p;
@@ -88,7 +88,7 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- void **ptr = qdev_get_prop_ptr(obj, prop);
+ void **ptr = object_field_prop_ptr(obj, prop);
char *str;
BlockBackend *blk;
bool blk_created = false;
@@ -181,7 +181,7 @@ static void release_drive(Object *obj, const char *name, void *opaque)
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- BlockBackend **ptr = qdev_get_prop_ptr(obj, prop);
+ BlockBackend **ptr = object_field_prop_ptr(obj, prop);
if (*ptr) {
AioContext *ctx = blk_get_aio_context(*ptr);
@@ -214,7 +214,7 @@ const PropertyInfo qdev_prop_drive_iothread = {
static void get_chr(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
- CharBackend *be = qdev_get_prop_ptr(obj, opaque);
+ CharBackend *be = object_field_prop_ptr(obj, opaque);
char *p;
p = g_strdup(be->chr && be->chr->label ? be->chr->label : "");
@@ -226,7 +226,7 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- CharBackend *be = qdev_get_prop_ptr(obj, prop);
+ CharBackend *be = object_field_prop_ptr(obj, prop);
Chardev *s;
char *str;
@@ -262,7 +262,7 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
static void release_chr(Object *obj, const char *name, void *opaque)
{
Property *prop = opaque;
- CharBackend *be = qdev_get_prop_ptr(obj, prop);
+ CharBackend *be = object_field_prop_ptr(obj, prop);
qemu_chr_fe_deinit(be, false);
}
@@ -286,7 +286,7 @@ static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- MACAddr *mac = qdev_get_prop_ptr(obj, prop);
+ MACAddr *mac = object_field_prop_ptr(obj, prop);
char buffer[2 * 6 + 5 + 1];
char *p = buffer;
@@ -301,7 +301,7 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- MACAddr *mac = qdev_get_prop_ptr(obj, prop);
+ MACAddr *mac = object_field_prop_ptr(obj, prop);
int i, pos;
char *str;
const char *p;
@@ -363,7 +363,7 @@ static void get_netdev(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
+ NICPeers *peers_ptr = object_field_prop_ptr(obj, prop);
char *p = g_strdup(peers_ptr->ncs[0] ? peers_ptr->ncs[0]->name : "");
visit_type_str(v, name, &p, errp);
@@ -374,7 +374,7 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
+ NICPeers *peers_ptr = object_field_prop_ptr(obj, prop);
NetClientState **ncs = peers_ptr->ncs;
NetClientState *peers[MAX_QUEUE_NUM];
int queues, err = 0, i = 0;
@@ -436,7 +436,7 @@ static void get_audiodev(Object *obj, Visitor *v, const char* name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
+ QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
char *p = g_strdup(audio_get_id(card));
visit_type_str(v, name, &p, errp);
@@ -447,7 +447,7 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
+ QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
AudioState *state;
int err = 0;
char *str;
@@ -549,7 +549,7 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
{
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint32_t *ptr = object_field_prop_ptr(obj, prop);
uint64_t value;
Error *local_err = NULL;
@@ -637,7 +637,7 @@ static void get_reserved_region(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
+ ReservedRegion *rr = object_field_prop_ptr(obj, prop);
char buffer[64];
char *p = buffer;
int rc;
@@ -653,7 +653,7 @@ static void set_reserved_region(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
+ ReservedRegion *rr = object_field_prop_ptr(obj, prop);
Error *local_err = NULL;
const char *endptr;
char *str;
@@ -715,7 +715,7 @@ static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- int32_t value, *ptr = qdev_get_prop_ptr(obj, prop);
+ int32_t value, *ptr = object_field_prop_ptr(obj, prop);
unsigned int slot, fn, n;
char *str;
@@ -753,7 +753,7 @@ invalid:
static int print_pci_devfn(Object *obj, Property *prop, char *dest,
size_t len)
{
- int32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ int32_t *ptr = object_field_prop_ptr(obj, prop);
if (*ptr == -1) {
return snprintf(dest, len, "<unset>");
@@ -777,7 +777,7 @@ static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
+ PCIHostDeviceAddress *addr = object_field_prop_ptr(obj, prop);
char buffer[] = "ffff:ff:ff.f";
char *p = buffer;
int rc = 0;
@@ -803,7 +803,7 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
+ PCIHostDeviceAddress *addr = object_field_prop_ptr(obj, prop);
char *str, *p;
char *e;
unsigned long val;
@@ -893,7 +893,7 @@ static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
+ PCIExpLinkSpeed *p = object_field_prop_ptr(obj, prop);
int speed;
switch (*p) {
@@ -921,7 +921,7 @@ static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
+ PCIExpLinkSpeed *p = object_field_prop_ptr(obj, prop);
int speed;
if (!visit_type_enum(v, name, &speed, prop->info->enum_table,
@@ -963,7 +963,7 @@ static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
+ PCIExpLinkWidth *p = object_field_prop_ptr(obj, prop);
int width;
switch (*p) {
@@ -1000,7 +1000,7 @@ static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
+ PCIExpLinkWidth *p = object_field_prop_ptr(obj, prop);
int width;
if (!visit_type_enum(v, name, &width, prop->info->enum_table,
@@ -1051,7 +1051,7 @@ static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
+ QemuUUID *uuid = object_field_prop_ptr(obj, prop);
char buffer[UUID_FMT_LEN + 1];
char *p = buffer;
@@ -1066,7 +1066,7 @@ static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
+ QemuUUID *uuid = object_field_prop_ptr(obj, prop);
char *str;
if (!visit_type_str(v, name, &str, errp)) {
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index c1dd4ae71b..3d648b088d 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -50,7 +50,7 @@ void qdev_prop_allow_set_link_before_realize(const Object *obj,
}
}
-void *qdev_get_prop_ptr(Object *obj, Property *prop)
+void *object_field_prop_ptr(Object *obj, Property *prop)
{
void *ptr = obj;
ptr += prop->offset;
@@ -100,7 +100,7 @@ void field_prop_get_enum(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- int *ptr = qdev_get_prop_ptr(obj, prop);
+ int *ptr = object_field_prop_ptr(obj, prop);
visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
}
@@ -109,7 +109,7 @@ void field_prop_set_enum(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- int *ptr = qdev_get_prop_ptr(obj, prop);
+ int *ptr = object_field_prop_ptr(obj, prop);
visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
}
@@ -138,7 +138,7 @@ static uint32_t qdev_get_prop_mask(Property *prop)
static void bit_prop_set(Object *obj, Property *props, bool val)
{
- uint32_t *p = qdev_get_prop_ptr(obj, props);
+ uint32_t *p = object_field_prop_ptr(obj, props);
uint32_t mask = qdev_get_prop_mask(props);
if (val) {
*p |= mask;
@@ -151,7 +151,7 @@ static void prop_get_bit(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint32_t *p = qdev_get_prop_ptr(obj, prop);
+ uint32_t *p = object_field_prop_ptr(obj, prop);
bool value = (*p & qdev_get_prop_mask(prop)) != 0;
visit_type_bool(v, name, &value, errp);
@@ -192,7 +192,7 @@ static uint64_t qdev_get_prop_mask64(Property *prop)
static void bit64_prop_set(Object *obj, Property *props, bool val)
{
- uint64_t *p = qdev_get_prop_ptr(obj, props);
+ uint64_t *p = object_field_prop_ptr(obj, props);
uint64_t mask = qdev_get_prop_mask64(props);
if (val) {
*p |= mask;
@@ -205,7 +205,7 @@ static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint64_t *p = qdev_get_prop_ptr(obj, prop);
+ uint64_t *p = object_field_prop_ptr(obj, prop);
bool value = (*p & qdev_get_prop_mask64(prop)) != 0;
visit_type_bool(v, name, &value, errp);
@@ -237,7 +237,7 @@ static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- bool *ptr = qdev_get_prop_ptr(obj, prop);
+ bool *ptr = object_field_prop_ptr(obj, prop);
visit_type_bool(v, name, ptr, errp);
}
@@ -246,7 +246,7 @@ static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- bool *ptr = qdev_get_prop_ptr(obj, prop);
+ bool *ptr = object_field_prop_ptr(obj, prop);
visit_type_bool(v, name, ptr, errp);
}
@@ -264,7 +264,7 @@ static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint8_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint8(v, name, ptr, errp);
}
@@ -273,7 +273,7 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint8_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint8(v, name, ptr, errp);
}
@@ -303,7 +303,7 @@ static void get_uint16(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint16_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint16(v, name, ptr, errp);
}
@@ -312,7 +312,7 @@ static void set_uint16(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint16_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint16(v, name, ptr, errp);
}
@@ -330,7 +330,7 @@ static void get_uint32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint32_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint32(v, name, ptr, errp);
}
@@ -339,7 +339,7 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint32_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint32(v, name, ptr, errp);
}
@@ -348,7 +348,7 @@ void field_prop_get_int32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- int32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ int32_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_int32(v, name, ptr, errp);
}
@@ -357,7 +357,7 @@ static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- int32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ int32_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_int32(v, name, ptr, errp);
}
@@ -382,7 +382,7 @@ static void get_uint64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint64_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint64(v, name, ptr, errp);
}
@@ -391,7 +391,7 @@ static void set_uint64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint64_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint64(v, name, ptr, errp);
}
@@ -400,7 +400,7 @@ static void get_int64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- int64_t *ptr = qdev_get_prop_ptr(obj, prop);
+ int64_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_int64(v, name, ptr, errp);
}
@@ -409,7 +409,7 @@ static void set_int64(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- int64_t *ptr = qdev_get_prop_ptr(obj, prop);
+ int64_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_int64(v, name, ptr, errp);
}
@@ -433,14 +433,14 @@ const PropertyInfo prop_info_int64 = {
static void release_string(Object *obj, const char *name, void *opaque)
{
Property *prop = opaque;
- g_free(*(char **)qdev_get_prop_ptr(obj, prop));
+ g_free(*(char **)object_field_prop_ptr(obj, prop));
}
static void get_string(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- char **ptr = qdev_get_prop_ptr(obj, prop);
+ char **ptr = object_field_prop_ptr(obj, prop);
if (!*ptr) {
char *str = (char *)"";
@@ -454,7 +454,7 @@ static void set_string(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- char **ptr = qdev_get_prop_ptr(obj, prop);
+ char **ptr = object_field_prop_ptr(obj, prop);
char *str;
if (!visit_type_str(v, name, &str, errp)) {
@@ -488,7 +488,7 @@ void field_prop_get_size32(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint32_t *ptr = object_field_prop_ptr(obj, prop);
uint64_t value = *ptr;
visit_type_size(v, name, &value, errp);
@@ -498,7 +498,7 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint32_t *ptr = object_field_prop_ptr(obj, prop);
uint64_t value;
if (!visit_type_size(v, name, &value, errp)) {
@@ -561,7 +561,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
*/
DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
- uint32_t *alenptr = qdev_get_prop_ptr(obj, prop);
+ uint32_t *alenptr = object_field_prop_ptr(obj, prop);
void **arrayptr = (void *)dev + prop->arrayoffset;
void *eltptr;
const char *arrayname;
@@ -603,7 +603,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
* being inside the device struct.
*/
arrayprop->prop.offset = eltptr - (void *)dev;
- assert(qdev_get_prop_ptr(obj, &arrayprop->prop) == eltptr);
+ assert(object_field_prop_ptr(obj, &arrayprop->prop) == eltptr);
object_property_add(obj, propname,
arrayprop->prop.info->name,
field_prop_getter(arrayprop->prop.info),
@@ -798,7 +798,7 @@ static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint64_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_size(v, name, ptr, errp);
}
@@ -807,7 +807,7 @@ static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
Error **errp)
{
Property *prop = opaque;
- uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint64_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_size(v, name, ptr, errp);
}
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 496e2c5801..fe47751df4 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -2344,7 +2344,7 @@ static void get_css_devid(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
+ CssDevId *dev_id = object_field_prop_ptr(obj, prop);
char buffer[] = "xx.x.xxxx";
char *p = buffer;
int r;
@@ -2373,7 +2373,7 @@ static void set_css_devid(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
+ CssDevId *dev_id = object_field_prop_ptr(obj, prop);
char *str;
int num, n1, n2;
unsigned int cssid, ssid, devid;
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index 30511f620e..dd138dae94 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -1330,7 +1330,7 @@ static void s390_pci_get_fid(Object *obj, Visitor *v, const char *name,
void *opaque, Error **errp)
{
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint32_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint32(v, name, ptr, errp);
}
@@ -1340,7 +1340,7 @@ static void s390_pci_set_fid(Object *obj, Visitor *v, const char *name,
{
S390PCIBusDevice *zpci = S390_PCI_DEVICE(obj);
Property *prop = opaque;
- uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint32_t *ptr = object_field_prop_ptr(obj, prop);
if (!visit_type_uint32(v, name, ptr, errp)) {
return;
diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c
index 802979635c..fc8d63c850 100644
--- a/hw/vfio/pci-quirks.c
+++ b/hw/vfio/pci-quirks.c
@@ -1489,7 +1489,7 @@ static void get_nv_gpudirect_clique_id(Object *obj, Visitor *v,
Error **errp)
{
Property *prop = opaque;
- uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
+ uint8_t *ptr = object_field_prop_ptr(obj, prop);
visit_type_uint8(v, name, ptr, errp);
}
@@ -1499,7 +1499,7 @@ static void set_nv_gpudirect_clique_id(Object *obj, Visitor *v,
Error **errp)
{
Property *prop = opaque;
- uint8_t value, *ptr = qdev_get_prop_ptr(obj, prop);
+ uint8_t value, *ptr = object_field_prop_ptr(obj, prop);
if (!visit_type_uint8(v, name, &value, errp)) {
return;
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 31/32] qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen()
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (29 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr() Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 15:11 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 32/32] tests: Add unit test for qdev array properties Eduardo Habkost
2020-12-14 19:42 ` [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
We're just doing pointer math with the device pointer, we can
simply use obj instead.
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
hw/core/qdev-properties.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 3d648b088d..9d25b49fc1 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -559,10 +559,9 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
* array-length field in the device struct, we have to create the
* array itself and dynamically add the corresponding properties.
*/
- DeviceState *dev = DEVICE(obj);
Property *prop = opaque;
uint32_t *alenptr = object_field_prop_ptr(obj, prop);
- void **arrayptr = (void *)dev + prop->arrayoffset;
+ void **arrayptr = (void *)obj + prop->arrayoffset;
void *eltptr;
const char *arrayname;
int i;
@@ -602,7 +601,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
* they get the right answer despite the array element not actually
* being inside the device struct.
*/
- arrayprop->prop.offset = eltptr - (void *)dev;
+ arrayprop->prop.offset = eltptr - (void *)obj;
assert(object_field_prop_ptr(obj, &arrayprop->prop) == eltptr);
object_property_add(obj, propname,
arrayprop->prop.info->name,
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* [PATCH v4 32/32] tests: Add unit test for qdev array properties
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (30 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 31/32] qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen() Eduardo Habkost
@ 2020-12-11 22:05 ` Eduardo Habkost
2020-12-14 19:42 ` [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
32 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-11 22:05 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
Add a test case to ensure array properties are behaving as
expected.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
This is a new patch added in v3 of this series.
---
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
---
tests/test-qdev-global-props.c | 61 ++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/tests/test-qdev-global-props.c b/tests/test-qdev-global-props.c
index c8862cac5f..9426ce2a72 100644
--- a/tests/test-qdev-global-props.c
+++ b/tests/test-qdev-global-props.c
@@ -44,11 +44,16 @@ struct MyType {
uint32_t prop1;
uint32_t prop2;
+
+ char **myarray;
+ uint32_t myarray_len;
};
static Property static_props[] = {
DEFINE_PROP_UINT32("prop1", MyType, prop1, PROP_DEFAULT),
DEFINE_PROP_UINT32("prop2", MyType, prop2, PROP_DEFAULT),
+ DEFINE_PROP_ARRAY("myarray", MyType, myarray_len, myarray,
+ prop_info_string, char *),
DEFINE_PROP_END_OF_LIST()
};
@@ -60,11 +65,19 @@ static void static_prop_class_init(ObjectClass *oc, void *data)
device_class_set_props(dc, static_props);
}
+static void static_props_finalize(Object *obj)
+{
+ MyType *mt = STATIC_TYPE(obj);
+
+ g_free(mt->myarray);
+}
+
static const TypeInfo static_prop_type = {
.name = TYPE_STATIC_PROPS,
.parent = TYPE_DEVICE,
.instance_size = sizeof(MyType),
.class_init = static_prop_class_init,
+ .instance_finalize = static_props_finalize,
};
static const TypeInfo subclass_type = {
@@ -91,6 +104,52 @@ static void test_static_prop(void)
g_test_trap_assert_stdout("");
}
+static void test_static_prop_array(void)
+{
+ Error *err = NULL;
+ ObjectClass *oc = object_class_by_name(TYPE_STATIC_PROPS);
+ Object *obj = object_new(TYPE_STATIC_PROPS);
+ char *s = NULL;
+
+ g_assert_nonnull(object_class_property_find(oc, "len-myarray"));
+ g_assert_null(object_class_property_find(oc, "myarray[0]"));
+
+ g_assert_nonnull(object_property_find(obj, "len-myarray"));
+ g_assert_null(object_property_find(obj, "myarray[0]"));
+
+ g_assert_cmpint(object_property_get_int(obj, "len-myarray", &error_abort), ==, 0);
+ object_property_set_int(obj, "len-myarray", 3, &error_abort);
+ g_assert_cmpint(object_property_get_int(obj, "len-myarray", &error_abort), ==, 3);
+
+ g_assert_nonnull(object_property_find(obj, "myarray[0]"));
+ g_assert_nonnull(object_property_find(obj, "myarray[1]"));
+ g_assert_nonnull(object_property_find(obj, "myarray[2]"));
+ g_assert_null(object_property_find(obj, "myarray[3]"));
+
+ /* Setting length a second time must fail */
+ object_property_set_int(obj, "len-myarray", 42, &err);
+ error_free_or_abort(&err);
+
+ g_assert_nonnull(object_property_find(obj, "myarray[2]"));
+ g_assert_null(object_property_find(obj, "myarray[3]"));
+
+ s = object_property_get_str(obj, "myarray[2]", &error_abort);
+ g_assert_cmpstr(s, ==, "");
+ g_free(s);
+
+ object_property_set_str(obj, "myarray[1]", "value", &error_abort);
+
+ s = object_property_get_str(obj, "myarray[1]", &error_abort);
+ g_assert_cmpstr(s, ==, "value");
+ g_free(s);
+
+ s = object_property_get_str(obj, "myarray[2]", &error_abort);
+ g_assert_cmpstr(s, ==, "");
+ g_free(s);
+
+ object_unref(obj);
+}
+
static void register_global_properties(GlobalProperty *props)
{
int i;
@@ -299,6 +358,8 @@ int main(int argc, char **argv)
test_static_prop_subprocess);
g_test_add_func("/qdev/properties/static/default",
test_static_prop);
+ g_test_add_func("/qdev/properties/static/array",
+ test_static_prop_array);
g_test_add_func("/qdev/properties/static/global/subprocess",
test_static_globalprop_subprocess);
--
2.28.0
^ permalink raw reply related [flat|nested] 69+ messages in thread
* RE: [PATCH v4 09/32] qdev: Make qdev_get_prop_ptr() get Object* arg
2020-12-11 22:05 ` [PATCH v4 09/32] qdev: Make qdev_get_prop_ptr() get Object* arg Eduardo Habkost
@ 2020-12-14 7:46 ` Paul Durrant
0 siblings, 0 replies; 69+ messages in thread
From: Paul Durrant @ 2020-12-14 7:46 UTC (permalink / raw)
To: 'Eduardo Habkost', qemu-devel
Cc: 'Matthew Rosato', 'David Hildenbrand',
'Stefano Stabellini', xen-devel, qemu-block,
'Stefan Berger', 'Markus Armbruster',
'Halil Pasic', 'Christian Borntraeger',
'Anthony Perard', 'Marc-André Lureau',
'Philippe Mathieu-Daudé', 'Thomas Huth',
'Alex Williamson', 'Igor Mammedov',
'John Snow', 'Richard Henderson',
'Kevin Wolf', 'Daniel P. Berrange',
'Cornelia Huck', qemu-s390x, 'Max Reitz',
'Paolo Bonzini', 'Stefan Berger'
> -----Original Message-----
> From: Eduardo Habkost <ehabkost@redhat.com>
> Sent: 11 December 2020 22:05
> To: qemu-devel@nongnu.org
> Cc: Markus Armbruster <armbru@redhat.com>; Igor Mammedov <imammedo@redhat.com>; Stefan Berger
> <stefanb@linux.ibm.com>; Marc-André Lureau <marcandre.lureau@redhat.com>; Daniel P. Berrange
> <berrange@redhat.com>; Philippe Mathieu-Daudé <philmd@redhat.com>; John Snow <jsnow@redhat.com>; Kevin
> Wolf <kwolf@redhat.com>; Eric Blake <eblake@redhat.com>; Paolo Bonzini <pbonzini@redhat.com>; Cornelia
> Huck <cohuck@redhat.com>; Stefan Berger <stefanb@linux.vnet.ibm.com>; Stefano Stabellini
> <sstabellini@kernel.org>; Anthony Perard <anthony.perard@citrix.com>; Paul Durrant <paul@xen.org>; Max
> Reitz <mreitz@redhat.com>; Thomas Huth <thuth@redhat.com>; Richard Henderson <rth@twiddle.net>; David
> Hildenbrand <david@redhat.com>; Halil Pasic <pasic@linux.ibm.com>; Christian Borntraeger
> <borntraeger@de.ibm.com>; Matthew Rosato <mjrosato@linux.ibm.com>; Alex Williamson
> <alex.williamson@redhat.com>; xen-devel@lists.xenproject.org; qemu-block@nongnu.org; qemu-
> s390x@nongnu.org
> Subject: [PATCH v4 09/32] qdev: Make qdev_get_prop_ptr() get Object* arg
>
> Make the code more generic and not specific to TYPE_DEVICE.
>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Cornelia Huck <cohuck@redhat.com> #s390 parts
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Xen parts...
Acked-by: Paul Durrant <paul@xen.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* RE: [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set()
2020-12-11 22:05 ` [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set() Eduardo Habkost
@ 2020-12-14 7:46 ` Paul Durrant
2020-12-14 10:46 ` Cornelia Huck
2020-12-14 14:55 ` Igor Mammedov
2 siblings, 0 replies; 69+ messages in thread
From: Paul Durrant @ 2020-12-14 7:46 UTC (permalink / raw)
To: 'Eduardo Habkost', qemu-devel
Cc: 'Matthew Rosato', 'David Hildenbrand',
'Mark Cave-Ayland', 'Stefano Stabellini',
xen-devel, qemu-block, 'Stefan Berger',
'Markus Armbruster', 'Halil Pasic',
'Christian Borntraeger', 'Anthony Perard',
'Marc-André Lureau',
'Philippe Mathieu-Daudé', 'Artyom Tarasenko',
'Thomas Huth', 'Alex Williamson',
'Igor Mammedov', 'John Snow',
'Richard Henderson', 'Kevin Wolf',
'Daniel P. Berrange', 'Cornelia Huck', qemu-s390x,
'Max Reitz', 'Paolo Bonzini',
'Stefan Berger'
> -----Original Message-----
> From: Eduardo Habkost <ehabkost@redhat.com>
> Sent: 11 December 2020 22:05
> To: qemu-devel@nongnu.org
> Cc: Markus Armbruster <armbru@redhat.com>; Igor Mammedov <imammedo@redhat.com>; Stefan Berger
> <stefanb@linux.ibm.com>; Marc-André Lureau <marcandre.lureau@redhat.com>; Daniel P. Berrange
> <berrange@redhat.com>; Philippe Mathieu-Daudé <philmd@redhat.com>; John Snow <jsnow@redhat.com>; Kevin
> Wolf <kwolf@redhat.com>; Eric Blake <eblake@redhat.com>; Paolo Bonzini <pbonzini@redhat.com>; Stefan
> Berger <stefanb@linux.vnet.ibm.com>; Stefano Stabellini <sstabellini@kernel.org>; Anthony Perard
> <anthony.perard@citrix.com>; Paul Durrant <paul@xen.org>; Max Reitz <mreitz@redhat.com>; Cornelia Huck
> <cohuck@redhat.com>; Halil Pasic <pasic@linux.ibm.com>; Christian Borntraeger
> <borntraeger@de.ibm.com>; Richard Henderson <rth@twiddle.net>; David Hildenbrand <david@redhat.com>;
> Thomas Huth <thuth@redhat.com>; Matthew Rosato <mjrosato@linux.ibm.com>; Alex Williamson
> <alex.williamson@redhat.com>; Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>; Artyom Tarasenko
> <atar4qemu@gmail.com>; xen-devel@lists.xenproject.org; qemu-block@nongnu.org; qemu-s390x@nongnu.org
> Subject: [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set()
>
> Every single qdev property setter function manually checks
> dev->realized. We can just check dev->realized inside
> qdev_property_set() instead.
>
> The check is being added as a separate function
> (qdev_prop_allow_set()) because it will become a callback later.
>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Xen parts...
Acked-by: Paul Durrant <paul@xen.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* RE: [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr()
2020-12-11 22:05 ` [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr() Eduardo Habkost
@ 2020-12-14 7:47 ` Paul Durrant
2020-12-14 10:56 ` Cornelia Huck
2020-12-14 15:13 ` Igor Mammedov
2 siblings, 0 replies; 69+ messages in thread
From: Paul Durrant @ 2020-12-14 7:47 UTC (permalink / raw)
To: 'Eduardo Habkost', qemu-devel
Cc: 'Matthew Rosato', 'David Hildenbrand',
'Stefano Stabellini', xen-devel, qemu-block,
'Stefan Berger', 'Markus Armbruster',
'Halil Pasic', 'Christian Borntraeger',
'Anthony Perard', 'Marc-André Lureau',
'Philippe Mathieu-Daudé', 'Thomas Huth',
'Alex Williamson', 'Igor Mammedov',
'John Snow', 'Richard Henderson',
'Kevin Wolf', 'Daniel P. Berrange',
'Cornelia Huck', qemu-s390x, 'Max Reitz',
'Paolo Bonzini', 'Stefan Berger'
> -----Original Message-----
> From: Eduardo Habkost <ehabkost@redhat.com>
> Sent: 11 December 2020 22:05
> To: qemu-devel@nongnu.org
> Cc: Markus Armbruster <armbru@redhat.com>; Igor Mammedov <imammedo@redhat.com>; Stefan Berger
> <stefanb@linux.ibm.com>; Marc-André Lureau <marcandre.lureau@redhat.com>; Daniel P. Berrange
> <berrange@redhat.com>; Philippe Mathieu-Daudé <philmd@redhat.com>; John Snow <jsnow@redhat.com>; Kevin
> Wolf <kwolf@redhat.com>; Eric Blake <eblake@redhat.com>; Paolo Bonzini <pbonzini@redhat.com>; Stefan
> Berger <stefanb@linux.vnet.ibm.com>; Stefano Stabellini <sstabellini@kernel.org>; Anthony Perard
> <anthony.perard@citrix.com>; Paul Durrant <paul@xen.org>; Max Reitz <mreitz@redhat.com>; Cornelia Huck
> <cohuck@redhat.com>; Halil Pasic <pasic@linux.ibm.com>; Christian Borntraeger
> <borntraeger@de.ibm.com>; Richard Henderson <rth@twiddle.net>; David Hildenbrand <david@redhat.com>;
> Thomas Huth <thuth@redhat.com>; Matthew Rosato <mjrosato@linux.ibm.com>; Alex Williamson
> <alex.williamson@redhat.com>; xen-devel@lists.xenproject.org; qemu-block@nongnu.org; qemu-
> s390x@nongnu.org
> Subject: [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr()
>
> The function will be moved to common QOM code, as it is not
> specific to TYPE_DEVICE anymore.
>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Xen parts...
Acked-by: Paul Durrant <paul@xen.org>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 18/32] qdev: Get just property name at error_set_from_qdev_prop_error()
2020-12-11 22:05 ` [PATCH v4 18/32] qdev: Get just property name at error_set_from_qdev_prop_error() Eduardo Habkost
@ 2020-12-14 10:41 ` Cornelia Huck
2020-12-14 14:44 ` Igor Mammedov
1 sibling, 0 replies; 69+ messages in thread
From: Cornelia Huck @ 2020-12-14 10:41 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Thomas Huth, Daniel P. Berrange, David Hildenbrand,
John Snow, qemu-devel, Markus Armbruster, Halil Pasic,
Christian Borntraeger, qemu-s390x, Paolo Bonzini,
Marc-André Lureau, Igor Mammedov, Richard Henderson,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:15 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Replace `Property *prop` parameter with `char *name`, to reduce
> dependency of getter and setter functions on the Property struct
> (which will be changed in following patches).
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> This is a new patch added in series v2
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: Halil Pasic <pasic@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: Thomas Huth <thuth@redhat.com>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: qemu-devel@nongnu.org
> Cc: qemu-s390x@nongnu.org
> ---
> include/hw/qdev-properties.h | 2 +-
> hw/core/qdev-properties-system.c | 12 ++++++------
> hw/core/qdev-properties.c | 8 ++++----
> hw/s390x/css.c | 2 +-
> 4 files changed, 12 insertions(+), 12 deletions(-)
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set()
2020-12-11 22:05 ` [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set() Eduardo Habkost
2020-12-14 7:46 ` Paul Durrant
@ 2020-12-14 10:46 ` Cornelia Huck
2020-12-14 14:55 ` Igor Mammedov
2 siblings, 0 replies; 69+ messages in thread
From: Cornelia Huck @ 2020-12-14 10:46 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Matthew Rosato, Paul Durrant, Mark Cave-Ayland, qemu-devel,
Stefano Stabellini, xen-devel, qemu-block, Stefan Berger,
David Hildenbrand, Markus Armbruster, Halil Pasic,
Christian Borntraeger, Anthony Perard, Marc-André Lureau,
Philippe Mathieu-Daudé, Artyom Tarasenko, Thomas Huth,
Alex Williamson, Igor Mammedov, John Snow, Richard Henderson,
Kevin Wolf, Daniel P. Berrange, qemu-s390x, Max Reitz,
Paolo Bonzini, Stefan Berger
On Fri, 11 Dec 2020 17:05:20 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Every single qdev property setter function manually checks
> dev->realized. We can just check dev->realized inside
> qdev_property_set() instead.
>
> The check is being added as a separate function
> (qdev_prop_allow_set()) because it will become a callback later.
>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Changes v1 -> v2:
> * Removed unused variable at xen_block_set_vdev()
> * Redone patch after changes in the previous patches in the
> series
> ---
> Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Anthony Perard <anthony.perard@citrix.com>
> Cc: Paul Durrant <paul@xen.org>
> Cc: Kevin Wolf <kwolf@redhat.com>
> Cc: Max Reitz <mreitz@redhat.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: Halil Pasic <pasic@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Thomas Huth <thuth@redhat.com>
> Cc: Matthew Rosato <mjrosato@linux.ibm.com>
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Cc: Artyom Tarasenko <atar4qemu@gmail.com>
> Cc: qemu-devel@nongnu.org
> Cc: xen-devel@lists.xenproject.org
> Cc: qemu-block@nongnu.org
> Cc: qemu-s390x@nongnu.org
> ---
> backends/tpm/tpm_util.c | 6 --
> hw/block/xen-block.c | 6 --
> hw/core/qdev-properties-system.c | 70 ----------------------
> hw/core/qdev-properties.c | 100 ++++++-------------------------
> hw/s390x/css.c | 6 --
> hw/s390x/s390-pci-bus.c | 6 --
> hw/vfio/pci-quirks.c | 6 --
> target/sparc/cpu.c | 6 --
> 8 files changed, 18 insertions(+), 188 deletions(-)
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr()
2020-12-11 22:05 ` [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr() Eduardo Habkost
2020-12-14 7:47 ` Paul Durrant
@ 2020-12-14 10:56 ` Cornelia Huck
2020-12-14 15:13 ` Igor Mammedov
2 siblings, 0 replies; 69+ messages in thread
From: Cornelia Huck @ 2020-12-14 10:56 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Matthew Rosato, Paul Durrant, qemu-devel, Stefano Stabellini,
xen-devel, qemu-block, Stefan Berger, David Hildenbrand,
Markus Armbruster, Halil Pasic, Christian Borntraeger,
Anthony Perard, Marc-André Lureau,
Philippe Mathieu-Daudé, Thomas Huth, Alex Williamson,
Igor Mammedov, John Snow, Richard Henderson, Kevin Wolf,
Daniel P. Berrange, qemu-s390x, Max Reitz, Paolo Bonzini,
Stefan Berger
On Fri, 11 Dec 2020 17:05:27 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> The function will be moved to common QOM code, as it is not
> specific to TYPE_DEVICE anymore.
>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Changes v1 -> v2:
> * Rename to object_field_prop_ptr() instead of object_static_prop_ptr()
> ---
> Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Anthony Perard <anthony.perard@citrix.com>
> Cc: Paul Durrant <paul@xen.org>
> Cc: Kevin Wolf <kwolf@redhat.com>
> Cc: Max Reitz <mreitz@redhat.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: Halil Pasic <pasic@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Thomas Huth <thuth@redhat.com>
> Cc: Matthew Rosato <mjrosato@linux.ibm.com>
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Cc: qemu-devel@nongnu.org
> Cc: xen-devel@lists.xenproject.org
> Cc: qemu-block@nongnu.org
> Cc: qemu-s390x@nongnu.org
> ---
> include/hw/qdev-properties.h | 2 +-
> backends/tpm/tpm_util.c | 6 ++--
> hw/block/xen-block.c | 4 +--
> hw/core/qdev-properties-system.c | 50 +++++++++++++-------------
> hw/core/qdev-properties.c | 60 ++++++++++++++++----------------
> hw/s390x/css.c | 4 +--
> hw/s390x/s390-pci-bus.c | 4 +--
> hw/vfio/pci-quirks.c | 4 +--
> 8 files changed, 67 insertions(+), 67 deletions(-)
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 14/32] qdev: Move UUID property to qdev-properties-system.c
2020-12-11 22:05 ` [PATCH v4 14/32] qdev: Move UUID property to qdev-properties-system.c Eduardo Habkost
@ 2020-12-14 14:18 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 14:18 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:11 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Only softmmu code uses DEFINE_PROP_UUID, and it currently depends
> on error_set_from_qdev_prop_error(). Move it to
> qdev-properties-system.c to get out of our way when refactoring
> the qdev property system.
>
> We can eventually move it back to the core property system later,
> after removing usage of error_set_from_qdev_prop_error().
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> This is a new patch added in series v2
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> hw/core/qdev-properties-system.c | 57 ++++++++++++++++++++++++++++++++
> hw/core/qdev-properties.c | 57 --------------------------------
> 2 files changed, 57 insertions(+), 57 deletions(-)
>
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 5796ed2619..7a9a1d6404 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -21,6 +21,7 @@
> #include "qemu/ctype.h"
> #include "qemu/cutils.h"
> #include "qemu/units.h"
> +#include "qemu/uuid.h"
> #include "qemu/error-report.h"
> #include "qdev-prop-internal.h"
>
> @@ -1106,3 +1107,59 @@ const PropertyInfo qdev_prop_pcie_link_width = {
> .set = set_prop_pcielinkwidth,
> .set_default_value = qdev_propinfo_set_default_value_enum,
> };
> +
> +/* --- UUID --- */
> +
> +static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
> + Error **errp)
> +{
> + Property *prop = opaque;
> + QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
> + char buffer[UUID_FMT_LEN + 1];
> + char *p = buffer;
> +
> + qemu_uuid_unparse(uuid, buffer);
> +
> + visit_type_str(v, name, &p, errp);
> +}
> +
> +#define UUID_VALUE_AUTO "auto"
> +
> +static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
> + Error **errp)
> +{
> + DeviceState *dev = DEVICE(obj);
> + Property *prop = opaque;
> + QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
> + char *str;
> +
> + if (dev->realized) {
> + qdev_prop_set_after_realize(dev, name, errp);
> + return;
> + }
> +
> + if (!visit_type_str(v, name, &str, errp)) {
> + return;
> + }
> +
> + if (!strcmp(str, UUID_VALUE_AUTO)) {
> + qemu_uuid_generate(uuid);
> + } else if (qemu_uuid_parse(str, uuid) < 0) {
> + error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
> + }
> + g_free(str);
> +}
> +
> +static void set_default_uuid_auto(ObjectProperty *op, const Property *prop)
> +{
> + object_property_set_default_str(op, UUID_VALUE_AUTO);
> +}
> +
> +const PropertyInfo qdev_prop_uuid = {
> + .name = "str",
> + .description = "UUID (aka GUID) or \"" UUID_VALUE_AUTO
> + "\" for random value (default)",
> + .get = get_uuid,
> + .set = set_uuid,
> + .set_default_value = set_default_uuid_auto,
> +};
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index 765e916c23..a2eaa43831 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -6,7 +6,6 @@
> #include "qemu/ctype.h"
> #include "qemu/error-report.h"
> #include "qapi/visitor.h"
> -#include "qemu/uuid.h"
> #include "qemu/units.h"
> #include "qemu/cutils.h"
> #include "qdev-prop-internal.h"
> @@ -544,62 +543,6 @@ const PropertyInfo qdev_prop_size32 = {
> .set_default_value = qdev_propinfo_set_default_value_uint,
> };
>
> -/* --- UUID --- */
> -
> -static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
> - Error **errp)
> -{
> - Property *prop = opaque;
> - QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
> - char buffer[UUID_FMT_LEN + 1];
> - char *p = buffer;
> -
> - qemu_uuid_unparse(uuid, buffer);
> -
> - visit_type_str(v, name, &p, errp);
> -}
> -
> -#define UUID_VALUE_AUTO "auto"
> -
> -static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
> - Error **errp)
> -{
> - DeviceState *dev = DEVICE(obj);
> - Property *prop = opaque;
> - QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
> - char *str;
> -
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> - if (!visit_type_str(v, name, &str, errp)) {
> - return;
> - }
> -
> - if (!strcmp(str, UUID_VALUE_AUTO)) {
> - qemu_uuid_generate(uuid);
> - } else if (qemu_uuid_parse(str, uuid) < 0) {
> - error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
> - }
> - g_free(str);
> -}
> -
> -static void set_default_uuid_auto(ObjectProperty *op, const Property *prop)
> -{
> - object_property_set_default_str(op, UUID_VALUE_AUTO);
> -}
> -
> -const PropertyInfo qdev_prop_uuid = {
> - .name = "str",
> - .description = "UUID (aka GUID) or \"" UUID_VALUE_AUTO
> - "\" for random value (default)",
> - .get = get_uuid,
> - .set = set_uuid,
> - .set_default_value = set_default_uuid_auto,
> -};
> -
> /* --- support for array properties --- */
>
> /* Used as an opaque for the object properties we add for each
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h
2020-12-11 22:05 ` [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h Eduardo Habkost
@ 2020-12-14 14:25 ` Igor Mammedov
2020-12-14 17:40 ` Eduardo Habkost
2020-12-15 14:40 ` Igor Mammedov
1 sibling, 1 reply; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 14:25 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:12 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Move the property types and property macros implemented in
> qdev-properties-system.c to a new qdev-properties-system.h
> header.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Changes v1 -> v2:
> * Move UUID property type too, as it was moved to
> qdev-properties-system.c in the previous patch
> ---
> audio/audio.h | 1 +
> include/hw/block/block.h | 1 +
> include/hw/qdev-properties-system.h | 84 +++++++++++++++++++++++++++++
> include/hw/qdev-properties.h | 75 --------------------------
> include/net/net.h | 1 +
> hw/acpi/vmgenid.c | 1 +
> hw/arm/pxa2xx.c | 1 +
> hw/arm/strongarm.c | 1 +
> hw/block/fdc.c | 1 +
> hw/block/m25p80.c | 1 +
> hw/block/nand.c | 1 +
> hw/block/onenand.c | 1 +
> hw/block/pflash_cfi01.c | 1 +
> hw/block/pflash_cfi02.c | 1 +
> hw/block/vhost-user-blk.c | 1 +
> hw/char/avr_usart.c | 1 +
> hw/char/bcm2835_aux.c | 1 +
> hw/char/cadence_uart.c | 1 +
> hw/char/cmsdk-apb-uart.c | 1 +
> hw/char/debugcon.c | 1 +
> hw/char/digic-uart.c | 1 +
> hw/char/escc.c | 1 +
> hw/char/etraxfs_ser.c | 1 +
> hw/char/exynos4210_uart.c | 1 +
> hw/char/grlib_apbuart.c | 1 +
> hw/char/ibex_uart.c | 1 +
> hw/char/imx_serial.c | 1 +
> hw/char/ipoctal232.c | 1 +
> hw/char/lm32_juart.c | 1 +
> hw/char/lm32_uart.c | 1 +
> hw/char/mcf_uart.c | 1 +
> hw/char/milkymist-uart.c | 1 +
> hw/char/nrf51_uart.c | 1 +
> hw/char/parallel.c | 1 +
> hw/char/pl011.c | 1 +
> hw/char/renesas_sci.c | 1 +
> hw/char/sclpconsole-lm.c | 1 +
> hw/char/sclpconsole.c | 1 +
> hw/char/serial-pci-multi.c | 1 +
> hw/char/serial.c | 1 +
> hw/char/spapr_vty.c | 1 +
> hw/char/stm32f2xx_usart.c | 1 +
> hw/char/terminal3270.c | 1 +
> hw/char/virtio-console.c | 1 +
> hw/char/xilinx_uartlite.c | 1 +
> hw/core/qdev-properties-system.c | 1 +
> hw/hyperv/vmbus.c | 1 +
> hw/i386/kvm/i8254.c | 1 +
> hw/ide/qdev.c | 1 +
> hw/ipmi/ipmi_bmc_extern.c | 1 +
> hw/ipmi/ipmi_bmc_sim.c | 1 +
> hw/misc/allwinner-sid.c | 1 +
> hw/misc/ivshmem.c | 1 +
> hw/misc/mac_via.c | 1 +
> hw/misc/sifive_u_otp.c | 1 +
> hw/net/rocker/rocker.c | 1 +
> hw/nvram/eeprom_at24c.c | 1 +
> hw/nvram/spapr_nvram.c | 1 +
> hw/pci-bridge/gen_pcie_root_port.c | 1 +
> hw/pci/pci.c | 1 +
> hw/ppc/pnv_pnor.c | 1 +
> hw/rdma/vmw/pvrdma_main.c | 1 +
> hw/rtc/mc146818rtc.c | 1 +
> hw/scsi/scsi-disk.c | 1 +
> hw/scsi/scsi-generic.c | 1 +
> hw/scsi/vhost-user-scsi.c | 1 +
> hw/sd/sd.c | 1 +
> hw/usb/ccid-card-passthru.c | 1 +
> hw/usb/dev-serial.c | 1 +
> hw/usb/redirect.c | 1 +
> hw/vfio/pci.c | 1 +
> hw/virtio/vhost-user-fs.c | 1 +
> hw/virtio/vhost-user-vsock.c | 1 +
> hw/virtio/virtio-iommu-pci.c | 1 +
> hw/xen/xen_pt.c | 1 +
> migration/migration.c | 1 +
> 76 files changed, 158 insertions(+), 75 deletions(-)
> create mode 100644 include/hw/qdev-properties-system.h
>
> diff --git a/audio/audio.h b/audio/audio.h
> index b883ebfb1f..21fe3226ae 100644
> --- a/audio/audio.h
> +++ b/audio/audio.h
> @@ -28,6 +28,7 @@
> #include "qemu/queue.h"
> #include "qapi/qapi-types-audio.h"
> #include "hw/qdev-properties.h"
it's already included into new header
so maybe s/old/new/ here and in other such places?
> +#include "hw/qdev-properties-system.h"
>
> typedef void (*audio_callback_fn) (void *opaque, int avail);
>
> diff --git a/include/hw/block/block.h b/include/hw/block/block.h
> index 1e8b6253dd..c172cbe65f 100644
> --- a/include/hw/block/block.h
> +++ b/include/hw/block/block.h
> @@ -13,6 +13,7 @@
>
> #include "exec/hwaddr.h"
> #include "qapi/qapi-types-block-core.h"
> +#include "hw/qdev-properties-system.h"
what for it is included here?
>
> /* Configuration */
>
> diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properties-system.h
> new file mode 100644
> index 0000000000..29529dc999
> --- /dev/null
> +++ b/include/hw/qdev-properties-system.h
> @@ -0,0 +1,84 @@
> +#ifndef HW_QDEV_PROPERTIES_SYSTEM_H
> +#define HW_QDEV_PROPERTIES_SYSTEM_H
> +
> +#include "hw/qdev-properties.h"
> +
> +extern const PropertyInfo qdev_prop_chr;
> +extern const PropertyInfo qdev_prop_macaddr;
> +extern const PropertyInfo qdev_prop_reserved_region;
> +extern const PropertyInfo qdev_prop_multifd_compression;
> +extern const PropertyInfo qdev_prop_losttickpolicy;
> +extern const PropertyInfo qdev_prop_blockdev_on_error;
> +extern const PropertyInfo qdev_prop_bios_chs_trans;
> +extern const PropertyInfo qdev_prop_fdc_drive_type;
> +extern const PropertyInfo qdev_prop_drive;
> +extern const PropertyInfo qdev_prop_drive_iothread;
> +extern const PropertyInfo qdev_prop_netdev;
> +extern const PropertyInfo qdev_prop_pci_devfn;
> +extern const PropertyInfo qdev_prop_blocksize;
> +extern const PropertyInfo qdev_prop_pci_host_devaddr;
> +extern const PropertyInfo qdev_prop_uuid;
> +extern const PropertyInfo qdev_prop_audiodev;
> +extern const PropertyInfo qdev_prop_off_auto_pcibar;
> +extern const PropertyInfo qdev_prop_pcie_link_speed;
> +extern const PropertyInfo qdev_prop_pcie_link_width;
> +
> +#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t)
> +
> +#define DEFINE_PROP_CHR(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharBackend)
> +#define DEFINE_PROP_NETDEV(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NICPeers)
> +#define DEFINE_PROP_DRIVE(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockBackend *)
> +#define DEFINE_PROP_DRIVE_IOTHREAD(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_drive_iothread, BlockBackend *)
> +#define DEFINE_PROP_MACADDR(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
> +#define DEFINE_PROP_RESERVED_REGION(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_reserved_region, ReservedRegion)
> +#define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \
> + MultiFDCompression)
> +#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
> + LostTickPolicy)
> +#define DEFINE_PROP_BLOCKDEV_ON_ERROR(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_blockdev_on_error, \
> + BlockdevOnError)
> +#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int)
> +#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f) \
> + DEFINE_PROP_UNSIGNED(_n, _s, _f, 0, qdev_prop_blocksize, uint32_t)
> +#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress)
> +#define DEFINE_PROP_OFF_AUTO_PCIBAR(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_off_auto_pcibar, \
> + OffAutoPCIBAR)
> +#define DEFINE_PROP_PCIE_LINK_SPEED(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_speed, \
> + PCIExpLinkSpeed)
> +#define DEFINE_PROP_PCIE_LINK_WIDTH(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_width, \
> + PCIExpLinkWidth)
> +
> +#define DEFINE_PROP_UUID(_name, _state, _field) { \
> + .name = (_name), \
> + .info = &qdev_prop_uuid, \
> + .offset = offsetof(_state, _field) \
> + + type_check(QemuUUID, typeof_field(_state, _field)), \
> + .set_default = true, \
> + }
> +#define DEFINE_PROP_AUDIODEV(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, QEMUSoundCard)
> +
> +#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) { \
> + .name = (_name), \
> + .info = &qdev_prop_uuid, \
> + .offset = offsetof(_state, _field) \
> + + type_check(QemuUUID, typeof_field(_state, _field)), \
> + }
> +
> +
> +#endif
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index 530286e869..d35d4aae84 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -55,30 +55,11 @@ extern const PropertyInfo qdev_prop_uint64;
> extern const PropertyInfo qdev_prop_int64;
> extern const PropertyInfo qdev_prop_size;
> extern const PropertyInfo qdev_prop_string;
> -extern const PropertyInfo qdev_prop_chr;
> extern const PropertyInfo qdev_prop_tpm;
> -extern const PropertyInfo qdev_prop_macaddr;
> -extern const PropertyInfo qdev_prop_reserved_region;
> extern const PropertyInfo qdev_prop_on_off_auto;
> -extern const PropertyInfo qdev_prop_multifd_compression;
> -extern const PropertyInfo qdev_prop_losttickpolicy;
> -extern const PropertyInfo qdev_prop_blockdev_on_error;
> -extern const PropertyInfo qdev_prop_bios_chs_trans;
> -extern const PropertyInfo qdev_prop_fdc_drive_type;
> -extern const PropertyInfo qdev_prop_drive;
> -extern const PropertyInfo qdev_prop_drive_iothread;
> -extern const PropertyInfo qdev_prop_netdev;
> -extern const PropertyInfo qdev_prop_pci_devfn;
> extern const PropertyInfo qdev_prop_size32;
> -extern const PropertyInfo qdev_prop_blocksize;
> -extern const PropertyInfo qdev_prop_pci_host_devaddr;
> -extern const PropertyInfo qdev_prop_uuid;
> extern const PropertyInfo qdev_prop_arraylen;
> -extern const PropertyInfo qdev_prop_audiodev;
> extern const PropertyInfo qdev_prop_link;
> -extern const PropertyInfo qdev_prop_off_auto_pcibar;
> -extern const PropertyInfo qdev_prop_pcie_link_speed;
> -extern const PropertyInfo qdev_prop_pcie_link_width;
>
> #define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
> .name = (_name), \
> @@ -209,68 +190,12 @@ extern const PropertyInfo qdev_prop_pcie_link_width;
> DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_int64, int64_t)
> #define DEFINE_PROP_SIZE(_n, _s, _f, _d) \
> DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size, uint64_t)
> -#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t)
> -
> -#define DEFINE_PROP_CHR(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharBackend)
> #define DEFINE_PROP_STRING(_n, _s, _f) \
> DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
> -#define DEFINE_PROP_NETDEV(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NICPeers)
> -#define DEFINE_PROP_DRIVE(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockBackend *)
> -#define DEFINE_PROP_DRIVE_IOTHREAD(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_drive_iothread, BlockBackend *)
> -#define DEFINE_PROP_MACADDR(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
> -#define DEFINE_PROP_RESERVED_REGION(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_reserved_region, ReservedRegion)
> #define DEFINE_PROP_ON_OFF_AUTO(_n, _s, _f, _d) \
> DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_on_off_auto, OnOffAuto)
> -#define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \
> - MultiFDCompression)
> -#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
> - LostTickPolicy)
> -#define DEFINE_PROP_BLOCKDEV_ON_ERROR(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_blockdev_on_error, \
> - BlockdevOnError)
> -#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int)
> #define DEFINE_PROP_SIZE32(_n, _s, _f, _d) \
> DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size32, uint32_t)
> -#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f) \
> - DEFINE_PROP_UNSIGNED(_n, _s, _f, 0, qdev_prop_blocksize, uint32_t)
> -#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress)
> -#define DEFINE_PROP_OFF_AUTO_PCIBAR(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_off_auto_pcibar, \
> - OffAutoPCIBAR)
> -#define DEFINE_PROP_PCIE_LINK_SPEED(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_speed, \
> - PCIExpLinkSpeed)
> -#define DEFINE_PROP_PCIE_LINK_WIDTH(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_width, \
> - PCIExpLinkWidth)
> -
> -#define DEFINE_PROP_UUID(_name, _state, _field) { \
> - .name = (_name), \
> - .info = &qdev_prop_uuid, \
> - .offset = offsetof(_state, _field) \
> - + type_check(QemuUUID, typeof_field(_state, _field)), \
> - .set_default = true, \
> - }
> -#define DEFINE_PROP_AUDIODEV(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, QEMUSoundCard)
> -
> -#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) { \
> - .name = (_name), \
> - .info = &qdev_prop_uuid, \
> - .offset = offsetof(_state, _field) \
> - + type_check(QemuUUID, typeof_field(_state, _field)), \
> - }
>
> #define DEFINE_PROP_END_OF_LIST() \
> {}
> diff --git a/include/net/net.h b/include/net/net.h
> index 778fc787ca..919facaad2 100644
> --- a/include/net/net.h
> +++ b/include/net/net.h
> @@ -4,6 +4,7 @@
> #include "qemu/queue.h"
> #include "qapi/qapi-types-net.h"
> #include "net/queue.h"
> +#include "hw/qdev-properties-system.h"
>
> #define MAC_FMT "%02X:%02X:%02X:%02X:%02X:%02X"
> #define MAC_ARG(x) ((uint8_t *)(x))[0], ((uint8_t *)(x))[1], \
> diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c
> index 2c8152d508..6c92fdae49 100644
> --- a/hw/acpi/vmgenid.c
> +++ b/hw/acpi/vmgenid.c
> @@ -19,6 +19,7 @@
> #include "hw/acpi/vmgenid.h"
> #include "hw/nvram/fw_cfg.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "sysemu/reset.h"
>
> diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
> index 1a98f3bd5c..fdc4955e95 100644
> --- a/hw/arm/pxa2xx.c
> +++ b/hw/arm/pxa2xx.c
> @@ -21,6 +21,7 @@
> #include "hw/i2c/i2c.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/ssi/ssi.h"
> #include "hw/sd/sd.h"
> #include "chardev/char-fe.h"
> diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
> index ca7c385f31..c7ca54bcea 100644
> --- a/hw/arm/strongarm.c
> +++ b/hw/arm/strongarm.c
> @@ -33,6 +33,7 @@
> #include "hw/boards.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "strongarm.h"
> diff --git a/hw/block/fdc.c b/hw/block/fdc.c
> index 4c2c35e223..3636874432 100644
> --- a/hw/block/fdc.c
> +++ b/hw/block/fdc.c
> @@ -36,6 +36,7 @@
> #include "hw/irq.h"
> #include "hw/isa/isa.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "hw/block/block.h"
> diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
> index d09a811767..93bd1821ff 100644
> --- a/hw/block/m25p80.c
> +++ b/hw/block/m25p80.c
> @@ -25,6 +25,7 @@
> #include "qemu/units.h"
> #include "sysemu/block-backend.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/ssi/ssi.h"
> #include "migration/vmstate.h"
> #include "qemu/bitops.h"
> diff --git a/hw/block/nand.c b/hw/block/nand.c
> index 1d7a48a2ec..1c098db897 100644
> --- a/hw/block/nand.c
> +++ b/hw/block/nand.c
> @@ -21,6 +21,7 @@
> #include "qemu/osdep.h"
> #include "hw/hw.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/block/flash.h"
> #include "sysemu/block-backend.h"
> #include "migration/vmstate.h"
> diff --git a/hw/block/onenand.c b/hw/block/onenand.c
> index 5ff7be86bb..579a73d7f7 100644
> --- a/hw/block/onenand.c
> +++ b/hw/block/onenand.c
> @@ -24,6 +24,7 @@
> #include "hw/block/flash.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "exec/memory.h"
> #include "hw/sysbus.h"
> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
> index daae965860..ccf326793d 100644
> --- a/hw/block/pflash_cfi01.c
> +++ b/hw/block/pflash_cfi01.c
> @@ -40,6 +40,7 @@
> #include "hw/block/block.h"
> #include "hw/block/flash.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "qapi/error.h"
> #include "qemu/error-report.h"
> diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
> index 1b3d94e047..2ad2f6baea 100644
> --- a/hw/block/pflash_cfi02.c
> +++ b/hw/block/pflash_cfi02.c
> @@ -36,6 +36,7 @@
> #include "hw/block/block.h"
> #include "hw/block/flash.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qapi/error.h"
> #include "qemu/error-report.h"
> #include "qemu/bitmap.h"
> diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
> index 2dd3d93ca0..da4fbf9084 100644
> --- a/hw/block/vhost-user-blk.c
> +++ b/hw/block/vhost-user-blk.c
> @@ -22,6 +22,7 @@
> #include "qemu/cutils.h"
> #include "hw/qdev-core.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/vhost.h"
> #include "hw/virtio/vhost-user-blk.h"
> #include "hw/virtio/virtio.h"
> diff --git a/hw/char/avr_usart.c b/hw/char/avr_usart.c
> index fbe2a112b7..5bcf9db0b7 100644
> --- a/hw/char/avr_usart.c
> +++ b/hw/char/avr_usart.c
> @@ -24,6 +24,7 @@
> #include "qemu/log.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> static int avr_usart_can_receive(void *opaque)
> {
> diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c
> index dade2ab5fd..96410b1ff8 100644
> --- a/hw/char/bcm2835_aux.c
> +++ b/hw/char/bcm2835_aux.c
> @@ -24,6 +24,7 @@
> #include "hw/char/bcm2835_aux.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
> diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
> index e196906c92..c603e14012 100644
> --- a/hw/char/cadence_uart.c
> +++ b/hw/char/cadence_uart.c
> @@ -32,6 +32,7 @@
> #include "hw/char/cadence_uart.h"
> #include "hw/irq.h"
> #include "hw/qdev-clock.h"
> +#include "hw/qdev-properties-system.h"
> #include "trace.h"
>
> #ifdef CADENCE_UART_ERR_DEBUG
> diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c
> index 626b68f2ec..ba2cbbee3d 100644
> --- a/hw/char/cmsdk-apb-uart.c
> +++ b/hw/char/cmsdk-apb-uart.c
> @@ -27,6 +27,7 @@
> #include "chardev/char-serial.h"
> #include "hw/char/cmsdk-apb-uart.h"
> #include "hw/irq.h"
> +#include "hw/qdev-properties-system.h"
>
> REG32(DATA, 0)
> REG32(STATE, 4)
> diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c
> index 2a063ad72c..fdb04fee09 100644
> --- a/hw/char/debugcon.c
> +++ b/hw/char/debugcon.c
> @@ -30,6 +30,7 @@
> #include "chardev/char-fe.h"
> #include "hw/isa/isa.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qom/object.h"
>
> #define TYPE_ISA_DEBUGCON_DEVICE "isa-debugcon"
> diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c
> index e130cb4692..00e5df5517 100644
> --- a/hw/char/digic-uart.c
> +++ b/hw/char/digic-uart.c
> @@ -35,6 +35,7 @@
>
> #include "hw/char/digic-uart.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> enum {
> ST_RX_RDY = (1 << 0),
> diff --git a/hw/char/escc.c b/hw/char/escc.c
> index 7d16ee8688..52e7978287 100644
> --- a/hw/char/escc.c
> +++ b/hw/char/escc.c
> @@ -25,6 +25,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "qemu/module.h"
> diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c
> index d9fba2ae6c..6bee3ee18e 100644
> --- a/hw/char/etraxfs_ser.c
> +++ b/hw/char/etraxfs_ser.c
> @@ -25,6 +25,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "chardev/char-fe.h"
> #include "qemu/log.h"
> diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
> index 96afe3580f..6361df2ad3 100644
> --- a/hw/char/exynos4210_uart.c
> +++ b/hw/char/exynos4210_uart.c
> @@ -32,6 +32,7 @@
> #include "hw/arm/exynos4210.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> #include "trace.h"
> #include "qom/object.h"
> diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
> index 3f80f6824e..82ff40a530 100644
> --- a/hw/char/grlib_apbuart.c
> +++ b/hw/char/grlib_apbuart.c
> @@ -25,6 +25,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sparc/grlib.h"
> #include "hw/sysbus.h"
> #include "qemu/module.h"
> diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c
> index cc49a35013..89f1182c9b 100644
> --- a/hw/char/ibex_uart.c
> +++ b/hw/char/ibex_uart.c
> @@ -30,6 +30,7 @@
> #include "hw/irq.h"
> #include "hw/qdev-clock.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
> diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c
> index 731b8fc64c..ee1375e26d 100644
> --- a/hw/char/imx_serial.c
> +++ b/hw/char/imx_serial.c
> @@ -22,6 +22,7 @@
> #include "hw/char/imx_serial.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
> diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c
> index ad000a39b9..3311e0872c 100644
> --- a/hw/char/ipoctal232.c
> +++ b/hw/char/ipoctal232.c
> @@ -12,6 +12,7 @@
> #include "hw/ipack/ipack.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/bitops.h"
> #include "qemu/module.h"
> diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c
> index aced357011..ce30279650 100644
> --- a/hw/char/lm32_juart.c
> +++ b/hw/char/lm32_juart.c
> @@ -26,6 +26,7 @@
>
> #include "hw/char/lm32_juart.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qom/object.h"
>
> enum {
> diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c
> index 2f58e2943b..d8e0331311 100644
> --- a/hw/char/lm32_uart.c
> +++ b/hw/char/lm32_uart.c
> @@ -25,6 +25,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "trace.h"
> diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c
> index e6814faffb..6fa4ac502c 100644
> --- a/hw/char/mcf_uart.c
> +++ b/hw/char/mcf_uart.c
> @@ -13,6 +13,7 @@
> #include "qapi/error.h"
> #include "hw/m68k/mcf.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "chardev/char-fe.h"
> #include "qom/object.h"
>
> diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c
> index a817c51eb5..cb1b3470ad 100644
> --- a/hw/char/milkymist-uart.c
> +++ b/hw/char/milkymist-uart.c
> @@ -24,6 +24,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "trace.h"
> diff --git a/hw/char/nrf51_uart.c b/hw/char/nrf51_uart.c
> index d1fef77acd..045ca5fa40 100644
> --- a/hw/char/nrf51_uart.c
> +++ b/hw/char/nrf51_uart.c
> @@ -18,6 +18,7 @@
> #include "hw/char/nrf51_uart.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "trace.h"
>
> diff --git a/hw/char/parallel.c b/hw/char/parallel.c
> index 8b418abf71..b45e67bfbb 100644
> --- a/hw/char/parallel.c
> +++ b/hw/char/parallel.c
> @@ -32,6 +32,7 @@
> #include "hw/irq.h"
> #include "hw/isa/isa.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "hw/char/parallel.h"
> #include "sysemu/reset.h"
> diff --git a/hw/char/pl011.c b/hw/char/pl011.c
> index ede16c781c..ea4a4e5235 100644
> --- a/hw/char/pl011.c
> +++ b/hw/char/pl011.c
> @@ -23,6 +23,7 @@
> #include "hw/irq.h"
> #include "hw/sysbus.h"
> #include "hw/qdev-clock.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "chardev/char-fe.h"
> #include "qemu/log.h"
> diff --git a/hw/char/renesas_sci.c b/hw/char/renesas_sci.c
> index 5d7c6e6523..1c63467290 100644
> --- a/hw/char/renesas_sci.c
> +++ b/hw/char/renesas_sci.c
> @@ -26,6 +26,7 @@
> #include "hw/irq.h"
> #include "hw/registerfields.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/char/renesas_sci.h"
> #include "migration/vmstate.h"
>
> diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c
> index 81f6d0ed4f..b9e9b2d453 100644
> --- a/hw/char/sclpconsole-lm.c
> +++ b/hw/char/sclpconsole-lm.c
> @@ -23,6 +23,7 @@
> #include "migration/vmstate.h"
> #include "hw/s390x/event-facility.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/s390x/ebcdic.h"
> #include "qom/object.h"
>
> diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c
> index aa72ab40b9..c36b572222 100644
> --- a/hw/char/sclpconsole.c
> +++ b/hw/char/sclpconsole.c
> @@ -20,6 +20,7 @@
> #include "hw/s390x/sclp.h"
> #include "migration/vmstate.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/s390x/event-facility.h"
> #include "chardev/char-fe.h"
> #include "qom/object.h"
> diff --git a/hw/char/serial-pci-multi.c b/hw/char/serial-pci-multi.c
> index 2cf3e44177..3a9f96c2d1 100644
> --- a/hw/char/serial-pci-multi.c
> +++ b/hw/char/serial-pci-multi.c
> @@ -33,6 +33,7 @@
> #include "hw/irq.h"
> #include "hw/pci/pci.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
>
> #define PCI_SERIAL_MAX_PORTS 4
> diff --git a/hw/char/serial.c b/hw/char/serial.c
> index 62c627f486..6e52539648 100644
> --- a/hw/char/serial.c
> +++ b/hw/char/serial.c
> @@ -36,6 +36,7 @@
> #include "qemu/error-report.h"
> #include "trace.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> #define UART_LCR_DLAB 0x80 /* Divisor latch access bit */
>
> diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c
> index e726d4d915..79eaa2fa52 100644
> --- a/hw/char/spapr_vty.c
> +++ b/hw/char/spapr_vty.c
> @@ -8,6 +8,7 @@
> #include "hw/ppc/spapr.h"
> #include "hw/ppc/spapr_vio.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qom/object.h"
>
> #define VTERM_BUFSIZE 16
> diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c
> index 0d661be6d3..8df0832424 100644
> --- a/hw/char/stm32f2xx_usart.c
> +++ b/hw/char/stm32f2xx_usart.c
> @@ -26,6 +26,7 @@
> #include "hw/char/stm32f2xx_usart.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
>
> diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c
> index d77981bb6d..a9a46c8ed3 100644
> --- a/hw/char/terminal3270.c
> +++ b/hw/char/terminal3270.c
> @@ -16,6 +16,7 @@
> #include "qemu/module.h"
> #include "chardev/char-fe.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/s390x/3270-ccw.h"
> #include "qom/object.h"
>
> diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
> index bc752cf90f..6b132caa29 100644
> --- a/hw/char/virtio-console.c
> +++ b/hw/char/virtio-console.c
> @@ -16,6 +16,7 @@
> #include "qemu/module.h"
> #include "trace.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/virtio-serial.h"
> #include "qapi/error.h"
> #include "qapi/qapi-events-char.h"
> diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c
> index 2e773ec4c4..99b9a6f851 100644
> --- a/hw/char/xilinx_uartlite.c
> +++ b/hw/char/xilinx_uartlite.c
> @@ -26,6 +26,7 @@
> #include "qemu/log.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "qemu/module.h"
> #include "chardev/char-fe.h"
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 7a9a1d6404..e2d523b27a 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -12,6 +12,7 @@
>
> #include "qemu/osdep.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qapi/error.h"
> #include "qapi/visitor.h"
> #include "qapi/qapi-types-block.h"
> diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c
> index 896e981f85..984caf898d 100644
> --- a/hw/hyperv/vmbus.c
> +++ b/hw/hyperv/vmbus.c
> @@ -13,6 +13,7 @@
> #include "qapi/error.h"
> #include "migration/vmstate.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/hyperv/hyperv.h"
> #include "hw/hyperv/vmbus.h"
> #include "hw/hyperv/vmbus-bridge.h"
> diff --git a/hw/i386/kvm/i8254.c b/hw/i386/kvm/i8254.c
> index 40d84734e7..c73254e886 100644
> --- a/hw/i386/kvm/i8254.c
> +++ b/hw/i386/kvm/i8254.c
> @@ -32,6 +32,7 @@
> #include "sysemu/runstate.h"
> #include "hw/timer/i8254.h"
> #include "hw/timer/i8254_internal.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/kvm.h"
> #include "qom/object.h"
>
> diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
> index 1086b7a327..8cd19fa5e9 100644
> --- a/hw/ide/qdev.c
> +++ b/hw/ide/qdev.c
> @@ -26,6 +26,7 @@
> #include "qemu/module.h"
> #include "hw/ide/internal.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "sysemu/blockdev.h"
> #include "hw/block/block.h"
> diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c
> index c3f3306e66..e141a5cd45 100644
> --- a/hw/ipmi/ipmi_bmc_extern.c
> +++ b/hw/ipmi/ipmi_bmc_extern.c
> @@ -35,6 +35,7 @@
> #include "chardev/char-fe.h"
> #include "hw/ipmi/ipmi.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qom/object.h"
>
> diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c
> index f78e92d3d5..55fb81fa5a 100644
> --- a/hw/ipmi/ipmi_bmc_sim.c
> +++ b/hw/ipmi/ipmi_bmc_sim.c
> @@ -30,6 +30,7 @@
> #include "qemu/module.h"
> #include "hw/loader.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
>
> #define IPMI_NETFN_CHASSIS 0x00
> diff --git a/hw/misc/allwinner-sid.c b/hw/misc/allwinner-sid.c
> index 196380c33a..6d61f55b1d 100644
> --- a/hw/misc/allwinner-sid.c
> +++ b/hw/misc/allwinner-sid.c
> @@ -26,6 +26,7 @@
> #include "qemu/guest-random.h"
> #include "qapi/error.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/misc/allwinner-sid.h"
> #include "trace.h"
>
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index e321e5cb69..0505b52c98 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -23,6 +23,7 @@
> #include "qemu/cutils.h"
> #include "hw/pci/pci.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/pci/msi.h"
> #include "hw/pci/msix.h"
> #include "sysemu/kvm.h"
> diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
> index 6db62dab7d..488d086a17 100644
> --- a/hw/misc/mac_via.c
> +++ b/hw/misc/mac_via.c
> @@ -28,6 +28,7 @@
> #include "qapi/error.h"
> #include "qemu/cutils.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "trace.h"
> #include "qemu/log.h"
> diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c
> index 60066375ab..4401787a5c 100644
> --- a/hw/misc/sifive_u_otp.c
> +++ b/hw/misc/sifive_u_otp.c
> @@ -21,6 +21,7 @@
> #include "qemu/osdep.h"
> #include "qapi/error.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
> diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c
> index 1af1e6fa2f..0fb8db1dee 100644
> --- a/hw/net/rocker/rocker.c
> +++ b/hw/net/rocker/rocker.c
> @@ -18,6 +18,7 @@
> #include "qemu/osdep.h"
> #include "hw/pci/pci.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "hw/pci/msix.h"
> #include "net/net.h"
> diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
> index 3e93dbbffb..af6f5dbb99 100644
> --- a/hw/nvram/eeprom_at24c.c
> +++ b/hw/nvram/eeprom_at24c.c
> @@ -13,6 +13,7 @@
> #include "qemu/module.h"
> #include "hw/i2c/i2c.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "qom/object.h"
>
> diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c
> index fc53a42572..9e51bc82ae 100644
> --- a/hw/nvram/spapr_nvram.c
> +++ b/hw/nvram/spapr_nvram.c
> @@ -39,6 +39,7 @@
> #include "hw/ppc/spapr.h"
> #include "hw/ppc/spapr_vio.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qom/object.h"
>
> struct SpaprNvram {
> diff --git a/hw/pci-bridge/gen_pcie_root_port.c b/hw/pci-bridge/gen_pcie_root_port.c
> index 8931afc049..ec9907917e 100644
> --- a/hw/pci-bridge/gen_pcie_root_port.c
> +++ b/hw/pci-bridge/gen_pcie_root_port.c
> @@ -16,6 +16,7 @@
> #include "hw/pci/msix.h"
> #include "hw/pci/pcie_port.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qom/object.h"
>
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index 9424231542..b09208f562 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -31,6 +31,7 @@
> #include "hw/pci/pci_bus.h"
> #include "hw/pci/pci_host.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/qemu-file-types.h"
> #include "migration/vmstate.h"
> #include "monitor/monitor.h"
> diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c
> index c365ee58b8..ef8dff03e0 100644
> --- a/hw/ppc/pnv_pnor.c
> +++ b/hw/ppc/pnv_pnor.c
> @@ -17,6 +17,7 @@
> #include "hw/loader.h"
> #include "hw/ppc/pnv_pnor.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> static uint64_t pnv_pnor_read(void *opaque, hwaddr addr, unsigned size)
> {
> diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c
> index 77b1235a3f..8593570332 100644
> --- a/hw/rdma/vmw/pvrdma_main.c
> +++ b/hw/rdma/vmw/pvrdma_main.c
> @@ -21,6 +21,7 @@
> #include "hw/pci/msi.h"
> #include "hw/pci/msix.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "cpu.h"
> #include "trace.h"
> #include "monitor/monitor.h"
> diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c
> index 7a38540cb9..5d0fcacd0c 100644
> --- a/hw/rtc/mc146818rtc.c
> +++ b/hw/rtc/mc146818rtc.c
> @@ -30,6 +30,7 @@
> #include "hw/acpi/aml-build.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qemu/timer.h"
> #include "sysemu/sysemu.h"
> #include "sysemu/replay.h"
> diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
> index 90841ad791..29504ea081 100644
> --- a/hw/scsi/scsi-disk.c
> +++ b/hw/scsi/scsi-disk.c
> @@ -34,6 +34,7 @@
> #include "sysemu/blockdev.h"
> #include "hw/block/block.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/dma.h"
> #include "sysemu/sysemu.h"
> #include "qemu/cutils.h"
> diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c
> index 2cb23ca891..9740f7e36a 100644
> --- a/hw/scsi/scsi-generic.c
> +++ b/hw/scsi/scsi-generic.c
> @@ -19,6 +19,7 @@
> #include "hw/scsi/scsi.h"
> #include "migration/qemu-file-types.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/scsi/emulation.h"
> #include "sysemu/block-backend.h"
> #include "trace.h"
> diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c
> index 7c0631656c..4666019442 100644
> --- a/hw/scsi/vhost-user-scsi.c
> +++ b/hw/scsi/vhost-user-scsi.c
> @@ -21,6 +21,7 @@
> #include "hw/fw-path-provider.h"
> #include "hw/qdev-core.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/vhost.h"
> #include "hw/virtio/vhost-backend.h"
> #include "hw/virtio/vhost-user-scsi.h"
> diff --git a/hw/sd/sd.c b/hw/sd/sd.c
> index 1842c03797..2aeab39c3f 100644
> --- a/hw/sd/sd.c
> +++ b/hw/sd/sd.c
> @@ -42,6 +42,7 @@
> #include "qapi/error.h"
> #include "qemu/bitmap.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qemu/error-report.h"
> #include "qemu/timer.h"
> #include "qemu/log.h"
> diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
> index e8e9d37e88..c27c602697 100644
> --- a/hw/usb/ccid-card-passthru.c
> +++ b/hw/usb/ccid-card-passthru.c
> @@ -14,6 +14,7 @@
> #include <libcacard.h>
> #include "chardev/char-fe.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/error-report.h"
> #include "qemu/module.h"
> diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
> index 19e1933f04..b58c4eb908 100644
> --- a/hw/usb/dev-serial.c
> +++ b/hw/usb/dev-serial.c
> @@ -14,6 +14,7 @@
> #include "qemu/error-report.h"
> #include "qemu/module.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/usb.h"
> #include "migration/vmstate.h"
> #include "desc.h"
> diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
> index 3238de6bb8..0b7e0e15f4 100644
> --- a/hw/usb/redirect.c
> +++ b/hw/usb/redirect.c
> @@ -42,6 +42,7 @@
> #include <usbredirfilter.h>
>
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/usb.h"
> #include "migration/qemu-file-types.h"
> #include "migration/vmstate.h"
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index 51dc373695..f74be78209 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -27,6 +27,7 @@
> #include "hw/pci/msix.h"
> #include "hw/pci/pci_bridge.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/error-report.h"
> #include "qemu/main-loop.h"
> diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c
> index 1bc5d03a00..ed036ad9c1 100644
> --- a/hw/virtio/vhost-user-fs.c
> +++ b/hw/virtio/vhost-user-fs.c
> @@ -16,6 +16,7 @@
> #include "standard-headers/linux/virtio_fs.h"
> #include "qapi/error.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/virtio-bus.h"
> #include "hw/virtio/virtio-access.h"
> #include "qemu/error-report.h"
> diff --git a/hw/virtio/vhost-user-vsock.c b/hw/virtio/vhost-user-vsock.c
> index 3534a39d62..a6f08c26b9 100644
> --- a/hw/virtio/vhost-user-vsock.c
> +++ b/hw/virtio/vhost-user-vsock.c
> @@ -13,6 +13,7 @@
> #include "qapi/error.h"
> #include "qemu/error-report.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/vhost-user-vsock.h"
>
> static const int user_feature_bits[] = {
> diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c
> index 378f63b210..770c286be7 100644
> --- a/hw/virtio/virtio-iommu-pci.c
> +++ b/hw/virtio/virtio-iommu-pci.c
> @@ -14,6 +14,7 @@
> #include "virtio-pci.h"
> #include "hw/virtio/virtio-iommu.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qapi/error.h"
> #include "hw/boards.h"
> #include "qom/object.h"
> diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
> index 6d359ee486..3cbd08b10e 100644
> --- a/hw/xen/xen_pt.c
> +++ b/hw/xen/xen_pt.c
> @@ -58,6 +58,7 @@
>
> #include "hw/pci/pci.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/xen/xen.h"
> #include "hw/i386/pc.h"
> #include "hw/xen/xen-legacy-backend.h"
> diff --git a/migration/migration.c b/migration/migration.c
> index e0dbde4091..cfbf46b77d 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -52,6 +52,7 @@
> #include "migration/colo.h"
> #include "hw/boards.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "monitor/monitor.h"
> #include "net/announce.h"
> #include "qemu/queue.h"
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 16/32] qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros
2020-12-11 22:05 ` [PATCH v4 16/32] qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros Eduardo Habkost
@ 2020-12-14 14:32 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 14:32 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:13 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Instead of duplicating the code that sets name, info, offset,
> and does type checking, make DEFINE_PROP accept a variable number
> of arguments and reuse it in all DEFINE_PROP_* macros.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> Changes v1 -> v2:
> * Redone after UUID property was moved
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> include/hw/qdev-properties-system.h | 19 ++---
> include/hw/qdev-properties.h | 114 ++++++++++------------------
> 2 files changed, 46 insertions(+), 87 deletions(-)
>
> diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properties-system.h
> index 29529dc999..0ac327ae60 100644
> --- a/include/hw/qdev-properties-system.h
> +++ b/include/hw/qdev-properties-system.h
> @@ -63,22 +63,15 @@ extern const PropertyInfo qdev_prop_pcie_link_width;
> DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_width, \
> PCIExpLinkWidth)
>
> -#define DEFINE_PROP_UUID(_name, _state, _field) { \
> - .name = (_name), \
> - .info = &qdev_prop_uuid, \
> - .offset = offsetof(_state, _field) \
> - + type_check(QemuUUID, typeof_field(_state, _field)), \
> - .set_default = true, \
> - }
> +#define DEFINE_PROP_UUID(_name, _state, _field) \
> + DEFINE_PROP(_name, _state, _field, qdev_prop_uuid, QemuUUID, \
> + .set_default = true)
> +
> #define DEFINE_PROP_AUDIODEV(_n, _s, _f) \
> DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, QEMUSoundCard)
>
> -#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) { \
> - .name = (_name), \
> - .info = &qdev_prop_uuid, \
> - .offset = offsetof(_state, _field) \
> - + type_check(QemuUUID, typeof_field(_state, _field)), \
> - }
> +#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) \
> + DEFINE_PROP(_name, _state, _field, qdev_prop_uuid, QemuUUID)
>
>
> #endif
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index d35d4aae84..1b58e4f922 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -61,73 +61,46 @@ extern const PropertyInfo qdev_prop_size32;
> extern const PropertyInfo qdev_prop_arraylen;
> extern const PropertyInfo qdev_prop_link;
>
> -#define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
> +#define DEFINE_PROP(_name, _state, _field, _prop, _type, ...) { \
> .name = (_name), \
> .info = &(_prop), \
> .offset = offsetof(_state, _field) \
> + type_check(_type, typeof_field(_state, _field)), \
> + __VA_ARGS__ \
> }
>
> -#define DEFINE_PROP_SIGNED(_name, _state, _field, _defval, _prop, _type) { \
> - .name = (_name), \
> - .info = &(_prop), \
> - .offset = offsetof(_state, _field) \
> - + type_check(_type,typeof_field(_state, _field)), \
> - .set_default = true, \
> - .defval.i = (_type)_defval, \
> - }
> +#define DEFINE_PROP_SIGNED(_name, _state, _field, _defval, _prop, _type) \
> + DEFINE_PROP(_name, _state, _field, _prop, _type, \
> + .set_default = true, \
> + .defval.i = (_type)_defval)
>
> -#define DEFINE_PROP_SIGNED_NODEFAULT(_name, _state, _field, _prop, _type) { \
> - .name = (_name), \
> - .info = &(_prop), \
> - .offset = offsetof(_state, _field) \
> - + type_check(_type, typeof_field(_state, _field)), \
> - }
> +#define DEFINE_PROP_SIGNED_NODEFAULT(_name, _state, _field, _prop, _type) \
> + DEFINE_PROP(_name, _state, _field, _prop, _type)
>
> -#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) { \
> - .name = (_name), \
> - .info = &(qdev_prop_bit), \
> - .bitnr = (_bit), \
> - .offset = offsetof(_state, _field) \
> - + type_check(uint32_t,typeof_field(_state, _field)), \
> - .set_default = true, \
> - .defval.u = (bool)_defval, \
> - }
> +#define DEFINE_PROP_BIT(_name, _state, _field, _bit, _defval) \
> + DEFINE_PROP(_name, _state, _field, qdev_prop_bit, uint32_t, \
> + .bitnr = (_bit), \
> + .set_default = true, \
> + .defval.u = (bool)_defval)
>
> -#define DEFINE_PROP_UNSIGNED(_name, _state, _field, _defval, _prop, _type) { \
> - .name = (_name), \
> - .info = &(_prop), \
> - .offset = offsetof(_state, _field) \
> - + type_check(_type, typeof_field(_state, _field)), \
> - .set_default = true, \
> - .defval.u = (_type)_defval, \
> - }
> +#define DEFINE_PROP_UNSIGNED(_name, _state, _field, _defval, _prop, _type) \
> + DEFINE_PROP(_name, _state, _field, _prop, _type, \
> + .set_default = true, \
> + .defval.u = (_type)_defval)
>
> -#define DEFINE_PROP_UNSIGNED_NODEFAULT(_name, _state, _field, _prop, _type) { \
> - .name = (_name), \
> - .info = &(_prop), \
> - .offset = offsetof(_state, _field) \
> - + type_check(_type, typeof_field(_state, _field)), \
> - }
> +#define DEFINE_PROP_UNSIGNED_NODEFAULT(_name, _state, _field, _prop, _type) \
> + DEFINE_PROP(_name, _state, _field, _prop, _type)
>
> -#define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) { \
> - .name = (_name), \
> - .info = &(qdev_prop_bit64), \
> - .bitnr = (_bit), \
> - .offset = offsetof(_state, _field) \
> - + type_check(uint64_t, typeof_field(_state, _field)), \
> - .set_default = true, \
> - .defval.u = (bool)_defval, \
> - }
> +#define DEFINE_PROP_BIT64(_name, _state, _field, _bit, _defval) \
> + DEFINE_PROP(_name, _state, _field, qdev_prop_bit64, uint64_t, \
> + .bitnr = (_bit), \
> + .set_default = true, \
> + .defval.u = (bool)_defval)
>
> -#define DEFINE_PROP_BOOL(_name, _state, _field, _defval) { \
> - .name = (_name), \
> - .info = &(qdev_prop_bool), \
> - .offset = offsetof(_state, _field) \
> - + type_check(bool, typeof_field(_state, _field)), \
> - .set_default = true, \
> - .defval.u = (bool)_defval, \
> - }
> +#define DEFINE_PROP_BOOL(_name, _state, _field, _defval) \
> + DEFINE_PROP(_name, _state, _field, qdev_prop_bool, bool, \
> + .set_default = true, \
> + .defval.u = (bool)_defval)
>
> #define PROP_ARRAY_LEN_PREFIX "len-"
>
> @@ -155,26 +128,19 @@ extern const PropertyInfo qdev_prop_link;
> * It is the responsibility of the device deinit code to free the
> * @_arrayfield memory.
> */
> -#define DEFINE_PROP_ARRAY(_name, _state, _field, \
> - _arrayfield, _arrayprop, _arraytype) { \
> - .name = (PROP_ARRAY_LEN_PREFIX _name), \
> - .info = &(qdev_prop_arraylen), \
> - .set_default = true, \
> - .defval.u = 0, \
> - .offset = offsetof(_state, _field) \
> - + type_check(uint32_t, typeof_field(_state, _field)), \
> - .arrayinfo = &(_arrayprop), \
> - .arrayfieldsize = sizeof(_arraytype), \
> - .arrayoffset = offsetof(_state, _arrayfield), \
> - }
> +#define DEFINE_PROP_ARRAY(_name, _state, _field, \
> + _arrayfield, _arrayprop, _arraytype) \
> + DEFINE_PROP((PROP_ARRAY_LEN_PREFIX _name), \
> + _state, _field, qdev_prop_arraylen, uint32_t, \
> + .set_default = true, \
> + .defval.u = 0, \
> + .arrayinfo = &(_arrayprop), \
> + .arrayfieldsize = sizeof(_arraytype), \
> + .arrayoffset = offsetof(_state, _arrayfield))
>
> -#define DEFINE_PROP_LINK(_name, _state, _field, _type, _ptr_type) { \
> - .name = (_name), \
> - .info = &(qdev_prop_link), \
> - .offset = offsetof(_state, _field) \
> - + type_check(_ptr_type, typeof_field(_state, _field)), \
> - .link_type = _type, \
> - }
> +#define DEFINE_PROP_LINK(_name, _state, _field, _type, _ptr_type) \
> + DEFINE_PROP(_name, _state, _field, qdev_prop_link, _ptr_type, \
> + .link_type = _type)
>
> #define DEFINE_PROP_UINT8(_n, _s, _f, _d) \
> DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_uint8, uint8_t)
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property
2020-12-11 22:05 ` [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property Eduardo Habkost
@ 2020-12-14 14:42 ` Igor Mammedov
2020-12-14 17:30 ` Eduardo Habkost
2020-12-15 11:52 ` Mark Cave-Ayland
1 sibling, 1 reply; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 14:42 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, Philippe Mathieu-Daudé,
Mark Cave-Ayland, qemu-devel, Markus Armbruster,
Marc-André Lureau, Paolo Bonzini, John Snow,
Artyom Tarasenko, Stefan Berger
On Fri, 11 Dec 2020 17:05:14 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Use the DEFINE_PROP macro (which will set extra fields in the
> struct) instead of initializing a Property struct manually.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> This is a new patch added in v2 of the series
> ---
> Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Cc: Artyom Tarasenko <atar4qemu@gmail.com>
> Cc: qemu-devel@nongnu.org
> ---
> target/sparc/cpu.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index 6a3299041f..92534bcd18 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -848,7 +848,8 @@ static Property sparc_cpu_properties[] = {
> qdev_prop_uint64, target_ulong),
> DEFINE_PROP_UINT32("fpu-version", SPARCCPU, env.def.fpu_version, 0),
> DEFINE_PROP_UINT32("mmu-version", SPARCCPU, env.def.mmu_version, 0),
> - { .name = "nwindows", .info = &qdev_prop_nwindows },
> + DEFINE_PROP("nwindows", SPARCCPU, env.def.nwindows,
^^^^
stray whitespace
> + qdev_prop_nwindows, uint32_t),
> DEFINE_PROP_END_OF_LIST()
> };
>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 18/32] qdev: Get just property name at error_set_from_qdev_prop_error()
2020-12-11 22:05 ` [PATCH v4 18/32] qdev: Get just property name at error_set_from_qdev_prop_error() Eduardo Habkost
2020-12-14 10:41 ` Cornelia Huck
@ 2020-12-14 14:44 ` Igor Mammedov
1 sibling, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 14:44 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Thomas Huth, Daniel P. Berrange, David Hildenbrand,
Philippe Mathieu-Daudé, Cornelia Huck, qemu-devel,
Markus Armbruster, Halil Pasic, Christian Borntraeger, qemu-s390x,
Marc-André Lureau, Paolo Bonzini, Stefan Berger, John Snow,
Richard Henderson
On Fri, 11 Dec 2020 17:05:15 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Replace `Property *prop` parameter with `char *name`, to reduce
> dependency of getter and setter functions on the Property struct
> (which will be changed in following patches).
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> This is a new patch added in series v2
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: Halil Pasic <pasic@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: Thomas Huth <thuth@redhat.com>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: qemu-devel@nongnu.org
> Cc: qemu-s390x@nongnu.org
> ---
> include/hw/qdev-properties.h | 2 +-
> hw/core/qdev-properties-system.c | 12 ++++++------
> hw/core/qdev-properties.c | 8 ++++----
> hw/s390x/css.c | 2 +-
> 4 files changed, 12 insertions(+), 12 deletions(-)
>
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index 1b58e4f922..476737b9da 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -201,7 +201,7 @@ const GlobalProperty *qdev_find_global_prop(Object *obj,
> int qdev_prop_check_globals(void);
> void qdev_prop_set_globals(DeviceState *dev);
> void error_set_from_qdev_prop_error(Error **errp, int ret, Object *obj,
> - Property *prop, const char *value);
> + const char *name, const char *value);
>
> /**
> * qdev_property_add_static:
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index e2d523b27a..9cf9bcb39d 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -354,7 +354,7 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
> return;
>
> inval:
> - error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
> + error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
> g_free(str);
> }
>
> @@ -442,7 +442,7 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
> peers_ptr->queues = queues;
>
> out:
> - error_set_from_qdev_prop_error(errp, err, obj, prop, str);
> + error_set_from_qdev_prop_error(errp, err, obj, name, str);
> g_free(str);
> }
>
> @@ -494,7 +494,7 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
> card->state = state;
>
> out:
> - error_set_from_qdev_prop_error(errp, err, obj, prop, str);
> + error_set_from_qdev_prop_error(errp, err, obj, name, str);
> g_free(str);
> }
>
> @@ -792,7 +792,7 @@ static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
> return;
>
> invalid:
> - error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
> + error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
> g_free(str);
> }
>
> @@ -916,7 +916,7 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
> return;
>
> inval:
> - error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
> + error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
> g_free(str);
> }
>
> @@ -1146,7 +1146,7 @@ static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
> if (!strcmp(str, UUID_VALUE_AUTO)) {
> qemu_uuid_generate(uuid);
> } else if (qemu_uuid_parse(str, uuid) < 0) {
> - error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
> + error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
> }
> g_free(str);
> }
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index a2eaa43831..7495798a66 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -679,21 +679,21 @@ static Property *qdev_prop_find(DeviceState *dev, const char *name)
> }
>
> void error_set_from_qdev_prop_error(Error **errp, int ret, Object *obj,
> - Property *prop, const char *value)
> + const char *name, const char *value)
> {
> switch (ret) {
> case -EEXIST:
> error_setg(errp, "Property '%s.%s' can't take value '%s', it's in use",
> - object_get_typename(obj), prop->name, value);
> + object_get_typename(obj), name, value);
> break;
> default:
> case -EINVAL:
> error_setg(errp, QERR_PROPERTY_VALUE_BAD,
> - object_get_typename(obj), prop->name, value);
> + object_get_typename(obj), name, value);
> break;
> case -ENOENT:
> error_setg(errp, "Property '%s.%s' can't find value '%s'",
> - object_get_typename(obj), prop->name, value);
> + object_get_typename(obj), name, value);
> break;
> case 0:
> break;
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 38fd46b9a9..7a44320d12 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -2390,7 +2390,7 @@ static void set_css_devid(Object *obj, Visitor *v, const char *name,
>
> num = sscanf(str, "%2x.%1x%n.%4x%n", &cssid, &ssid, &n1, &devid, &n2);
> if (num != 3 || (n2 - n1) != 5 || strlen(str) != n2) {
> - error_set_from_qdev_prop_error(errp, EINVAL, obj, prop, str);
> + error_set_from_qdev_prop_error(errp, EINVAL, obj, name, str);
> goto out;
> }
> if ((cssid > MAX_CSSID) || (ssid > MAX_SSID)) {
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 19/32] qdev: Avoid using prop->name unnecessarily
2020-12-11 22:05 ` [PATCH v4 19/32] qdev: Avoid using prop->name unnecessarily Eduardo Habkost
@ 2020-12-14 14:45 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 14:45 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, Stefan Berger, John Snow,
qemu-devel, Markus Armbruster, Paolo Bonzini,
Marc-André Lureau, Philippe Mathieu-Daudé,
Stefan Berger
On Fri, 11 Dec 2020 17:05:16 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> We already get the property name as argument to the property
> getter and setters, we don't need to use prop->name. This will
> make it easier to remove the Property.name field in the future.
>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> This is a new patch added in series v2
> ---
> Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> backends/tpm/tpm_util.c | 2 +-
> hw/core/qdev-properties-system.c | 14 +++++++-------
> hw/core/qdev-properties.c | 4 ++--
> 3 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c
> index 3973105658..a5d997e7dc 100644
> --- a/backends/tpm/tpm_util.c
> +++ b/backends/tpm/tpm_util.c
> @@ -63,7 +63,7 @@ static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
> s = qemu_find_tpm_be(str);
> if (s == NULL) {
> error_setg(errp, "Property '%s.%s' can't find value '%s'",
> - object_get_typename(obj), prop->name, str);
> + object_get_typename(obj), name, str);
> } else if (tpm_backend_init(s, TPM_IF(obj), errp) == 0) {
> *be = s; /* weak reference, avoid cyclic ref */
> }
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 9cf9bcb39d..42529c3b65 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -141,7 +141,7 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
> }
> if (!blk) {
> error_setg(errp, "Property '%s.%s' can't find value '%s'",
> - object_get_typename(OBJECT(dev)), prop->name, str);
> + object_get_typename(OBJECT(dev)), name, str);
> goto fail;
> }
> if (blk_attach_dev(blk, dev) < 0) {
> @@ -262,10 +262,10 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
> s = qemu_chr_find(str);
> if (s == NULL) {
> error_setg(errp, "Property '%s.%s' can't find value '%s'",
> - object_get_typename(obj), prop->name, str);
> + object_get_typename(obj), name, str);
> } else if (!qemu_chr_fe_init(be, s, errp)) {
> error_prepend(errp, "Property '%s.%s' can't take value '%s': ",
> - object_get_typename(obj), prop->name, str);
> + object_get_typename(obj), name, str);
> }
> g_free(str);
> }
> @@ -966,7 +966,7 @@ static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
> abort();
> }
>
> - visit_type_enum(v, prop->name, &speed, prop->info->enum_table, errp);
> + visit_type_enum(v, name, &speed, prop->info->enum_table, errp);
> }
>
> static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
> @@ -982,7 +982,7 @@ static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
> return;
> }
>
> - if (!visit_type_enum(v, prop->name, &speed, prop->info->enum_table,
> + if (!visit_type_enum(v, name, &speed, prop->info->enum_table,
> errp)) {
> return;
> }
> @@ -1051,7 +1051,7 @@ static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
> abort();
> }
>
> - visit_type_enum(v, prop->name, &width, prop->info->enum_table, errp);
> + visit_type_enum(v, name, &width, prop->info->enum_table, errp);
> }
>
> static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
> @@ -1067,7 +1067,7 @@ static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
> return;
> }
>
> - if (!visit_type_enum(v, prop->name, &width, prop->info->enum_table,
> + if (!visit_type_enum(v, name, &width, prop->info->enum_table,
> errp)) {
> return;
> }
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index 7495798a66..50734a1cd4 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -50,7 +50,7 @@ void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
> Property *prop = opaque;
> int *ptr = qdev_get_prop_ptr(obj, prop);
>
> - visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
> + visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
> }
>
> void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
> @@ -65,7 +65,7 @@ void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
> return;
> }
>
> - visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
> + visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
> }
>
> void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 21/32] qdev: Add name argument to PropertyInfo.create method
2020-12-11 22:05 ` [PATCH v4 21/32] qdev: Add name argument to PropertyInfo.create method Eduardo Habkost
@ 2020-12-14 14:47 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 14:47 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:18 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> This will make it easier to remove the Property.name field in the
> future.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> This is a new patch added in series v2
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> include/hw/qdev-properties.h | 2 +-
> hw/core/qdev-properties.c | 7 ++++---
> 2 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index 476737b9da..ab9c538ba4 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -34,7 +34,7 @@ struct PropertyInfo {
> const QEnumLookup *enum_table;
> int (*print)(Object *obj, Property *prop, char *dest, size_t len);
> void (*set_default_value)(ObjectProperty *op, const Property *prop);
> - void (*create)(ObjectClass *oc, Property *prop);
> + void (*create)(ObjectClass *oc, const char *name, Property *prop);
> ObjectPropertyAccessor *get;
> ObjectPropertyAccessor *set;
> ObjectPropertyRelease *release;
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index 457c7fe4ba..c68a20695d 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -851,9 +851,10 @@ const PropertyInfo qdev_prop_size = {
>
> /* --- object link property --- */
>
> -static void create_link_property(ObjectClass *oc, Property *prop)
> +static void create_link_property(ObjectClass *oc, const char *name,
> + Property *prop)
> {
> - object_class_property_add_link(oc, prop->name, prop->link_type,
> + object_class_property_add_link(oc, name, prop->link_type,
> prop->offset,
> qdev_prop_allow_set_link_before_realize,
> OBJ_PROP_LINK_STRONG);
> @@ -893,7 +894,7 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
> ObjectClass *oc = OBJECT_CLASS(klass);
>
> if (prop->info->create) {
> - prop->info->create(oc, prop);
> + prop->info->create(oc, name, prop);
> } else {
> ObjectProperty *op;
>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set()
2020-12-11 22:05 ` [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set() Eduardo Habkost
2020-12-14 7:46 ` Paul Durrant
2020-12-14 10:46 ` Cornelia Huck
@ 2020-12-14 14:55 ` Igor Mammedov
2020-12-14 17:24 ` Eduardo Habkost
2 siblings, 1 reply; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 14:55 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Matthew Rosato, Paul Durrant, Mark Cave-Ayland, qemu-devel,
Stefano Stabellini, qemu-block, Stefan Berger, David Hildenbrand,
Markus Armbruster, Halil Pasic, Christian Borntraeger,
Anthony Perard, Marc-André Lureau,
Philippe Mathieu-Daudé, Artyom Tarasenko, Thomas Huth,
Alex Williamson, xen-devel, John Snow, Richard Henderson,
Kevin Wolf, Daniel P. Berrange, Cornelia Huck, qemu-s390x,
Max Reitz, Paolo Bonzini, Stefan Berger
On Fri, 11 Dec 2020 17:05:20 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Every single qdev property setter function manually checks
> dev->realized. We can just check dev->realized inside
> qdev_property_set() instead.
>
> The check is being added as a separate function
> (qdev_prop_allow_set()) because it will become a callback later.
is callback added within this series?
and I'd add here what's the purpose of it.
>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Changes v1 -> v2:
> * Removed unused variable at xen_block_set_vdev()
> * Redone patch after changes in the previous patches in the
> series
> ---
> Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Anthony Perard <anthony.perard@citrix.com>
> Cc: Paul Durrant <paul@xen.org>
> Cc: Kevin Wolf <kwolf@redhat.com>
> Cc: Max Reitz <mreitz@redhat.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: Halil Pasic <pasic@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Thomas Huth <thuth@redhat.com>
> Cc: Matthew Rosato <mjrosato@linux.ibm.com>
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Cc: Artyom Tarasenko <atar4qemu@gmail.com>
> Cc: qemu-devel@nongnu.org
> Cc: xen-devel@lists.xenproject.org
> Cc: qemu-block@nongnu.org
> Cc: qemu-s390x@nongnu.org
> ---
> backends/tpm/tpm_util.c | 6 --
> hw/block/xen-block.c | 6 --
> hw/core/qdev-properties-system.c | 70 ----------------------
> hw/core/qdev-properties.c | 100 ++++++-------------------------
> hw/s390x/css.c | 6 --
> hw/s390x/s390-pci-bus.c | 6 --
> hw/vfio/pci-quirks.c | 6 --
> target/sparc/cpu.c | 6 --
> 8 files changed, 18 insertions(+), 188 deletions(-)
>
> diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c
> index a5d997e7dc..39b45fa46d 100644
> --- a/backends/tpm/tpm_util.c
> +++ b/backends/tpm/tpm_util.c
> @@ -46,16 +46,10 @@ static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
> static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> TPMBackend *s, **be = qdev_get_prop_ptr(obj, prop);
> char *str;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
> index 905e4acd97..bd1aef63a7 100644
> --- a/hw/block/xen-block.c
> +++ b/hw/block/xen-block.c
> @@ -395,17 +395,11 @@ static int vbd_name_to_disk(const char *name, const char **endp,
> static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
> char *str, *p;
> const char *end;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 42529c3b65..f31aea3de1 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -94,11 +94,6 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
> bool blk_created = false;
> int ret;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> @@ -230,17 +225,11 @@ static void get_chr(Object *obj, Visitor *v, const char *name, void *opaque,
> static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> CharBackend *be = qdev_get_prop_ptr(obj, prop);
> Chardev *s;
> char *str;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> @@ -311,18 +300,12 @@ static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
> static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> MACAddr *mac = qdev_get_prop_ptr(obj, prop);
> int i, pos;
> char *str;
> const char *p;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> @@ -390,7 +373,6 @@ static void get_netdev(Object *obj, Visitor *v, const char *name,
> static void set_netdev(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
> NetClientState **ncs = peers_ptr->ncs;
> @@ -398,11 +380,6 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
> int queues, err = 0, i = 0;
> char *str;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> @@ -469,18 +446,12 @@ static void get_audiodev(Object *obj, Visitor *v, const char* name,
> static void set_audiodev(Object *obj, Visitor *v, const char* name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
> AudioState *state;
> int err = 0;
> char *str;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> @@ -582,11 +553,6 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
> uint64_t value;
> Error *local_err = NULL;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_size(v, name, &value, errp)) {
> return;
> }
> @@ -686,7 +652,6 @@ static void get_reserved_region(Object *obj, Visitor *v, const char *name,
> static void set_reserved_region(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
> Error *local_err = NULL;
> @@ -694,11 +659,6 @@ static void set_reserved_region(Object *obj, Visitor *v, const char *name,
> char *str;
> int ret;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_str(v, name, &str, &local_err);
> if (local_err) {
> error_propagate(errp, local_err);
> @@ -754,17 +714,11 @@ const PropertyInfo qdev_prop_reserved_region = {
> static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> int32_t value, *ptr = qdev_get_prop_ptr(obj, prop);
> unsigned int slot, fn, n;
> char *str;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, NULL)) {
> if (!visit_type_int32(v, name, &value, errp)) {
> return;
> @@ -848,7 +802,6 @@ static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
> static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
> char *str, *p;
> @@ -857,11 +810,6 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
> unsigned long dom = 0, bus = 0;
> unsigned int slot = 0, func = 0;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> @@ -972,16 +920,10 @@ static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
> static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
> int speed;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_enum(v, name, &speed, prop->info->enum_table,
> errp)) {
> return;
> @@ -1057,16 +999,10 @@ static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
> static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
> int width;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_enum(v, name, &width, prop->info->enum_table,
> errp)) {
> return;
> @@ -1129,16 +1065,10 @@ static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
> static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
> char *str;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index b924f13d58..92f48ecbf2 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -24,6 +24,19 @@ void qdev_prop_set_after_realize(DeviceState *dev, const char *name,
> }
> }
>
> +/* returns: true if property is allowed to be set, false otherwise */
> +static bool qdev_prop_allow_set(Object *obj, const char *name,
> + Error **errp)
> +{
> + DeviceState *dev = DEVICE(obj);
> +
> + if (dev->realized) {
> + qdev_prop_set_after_realize(dev, name, errp);
> + return false;
> + }
> + return true;
> +}
> +
> void qdev_prop_allow_set_link_before_realize(const Object *obj,
> const char *name,
> Object *val, Error **errp)
> @@ -65,6 +78,11 @@ static void field_prop_set(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> +
> + if (!qdev_prop_allow_set(obj, name, errp)) {
> + return;
> + }
> +
> return prop->info->set(obj, v, name, opaque, errp);
> }
>
> @@ -90,15 +108,9 @@ void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
> void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> int *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
> }
>
> @@ -148,15 +160,9 @@ static void prop_get_bit(Object *obj, Visitor *v, const char *name,
> static void prop_set_bit(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> bool value;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_bool(v, name, &value, errp)) {
> return;
> }
> @@ -208,15 +214,9 @@ static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
> static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> bool value;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_bool(v, name, &value, errp)) {
> return;
> }
> @@ -245,15 +245,9 @@ static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
> static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> bool *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_bool(v, name, ptr, errp);
> }
>
> @@ -278,15 +272,9 @@ static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
> static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_uint8(v, name, ptr, errp);
> }
>
> @@ -323,15 +311,9 @@ static void get_uint16(Object *obj, Visitor *v, const char *name,
> static void set_uint16(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_uint16(v, name, ptr, errp);
> }
>
> @@ -356,15 +338,9 @@ static void get_uint32(Object *obj, Visitor *v, const char *name,
> static void set_uint32(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_uint32(v, name, ptr, errp);
> }
>
> @@ -380,15 +356,9 @@ void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
> static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> int32_t *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_int32(v, name, ptr, errp);
> }
>
> @@ -420,15 +390,9 @@ static void get_uint64(Object *obj, Visitor *v, const char *name,
> static void set_uint64(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_uint64(v, name, ptr, errp);
> }
>
> @@ -444,15 +408,9 @@ static void get_int64(Object *obj, Visitor *v, const char *name,
> static void set_int64(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> int64_t *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_int64(v, name, ptr, errp);
> }
>
> @@ -495,16 +453,10 @@ static void get_string(Object *obj, Visitor *v, const char *name,
> static void set_string(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> char **ptr = qdev_get_prop_ptr(obj, prop);
> char *str;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> @@ -545,16 +497,10 @@ void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
> static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
> uint64_t value;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_size(v, name, &value, errp)) {
> return;
> }
> @@ -621,10 +567,6 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
> const char *arrayname;
> int i;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> if (*alenptr) {
> error_setg(errp, "array size property %s may not be set more than once",
> name);
> @@ -864,15 +806,9 @@ static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
> static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> visit_type_size(v, name, ptr, errp);
> }
>
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 7a44320d12..496e2c5801 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -2372,18 +2372,12 @@ static void get_css_devid(Object *obj, Visitor *v, const char *name,
> static void set_css_devid(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
> char *str;
> int num, n1, n2;
> unsigned int cssid, ssid, devid;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_str(v, name, &str, errp)) {
> return;
> }
> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
> index 8b6be1197b..30511f620e 100644
> --- a/hw/s390x/s390-pci-bus.c
> +++ b/hw/s390x/s390-pci-bus.c
> @@ -1338,16 +1338,10 @@ static void s390_pci_get_fid(Object *obj, Visitor *v, const char *name,
> static void s390_pci_set_fid(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> S390PCIBusDevice *zpci = S390_PCI_DEVICE(obj);
> Property *prop = opaque;
> uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_uint32(v, name, ptr, errp)) {
> return;
> }
> diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c
> index 53569925a2..802979635c 100644
> --- a/hw/vfio/pci-quirks.c
> +++ b/hw/vfio/pci-quirks.c
> @@ -1498,15 +1498,9 @@ static void set_nv_gpudirect_clique_id(Object *obj, Visitor *v,
> const char *name, void *opaque,
> Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> uint8_t value, *ptr = qdev_get_prop_ptr(obj, prop);
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_uint8(v, name, &value, errp)) {
> return;
> }
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index 92534bcd18..b730146bbe 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -798,17 +798,11 @@ static void sparc_get_nwindows(Object *obj, Visitor *v, const char *name,
> static void sparc_set_nwindows(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> - DeviceState *dev = DEVICE(obj);
> const int64_t min = MIN_NWINDOWS;
> const int64_t max = MAX_NWINDOWS;
> SPARCCPU *cpu = SPARC_CPU(obj);
> int64_t value;
>
> - if (dev->realized) {
> - qdev_prop_set_after_realize(dev, name, errp);
> - return;
> - }
> -
> if (!visit_type_int(v, name, &value, errp)) {
> return;
> }
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 24/32] qdev: Make PropertyInfo.create return ObjectProperty*
2020-12-11 22:05 ` [PATCH v4 24/32] qdev: Make PropertyInfo.create return ObjectProperty* Eduardo Habkost
@ 2020-12-14 14:57 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 14:57 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:21 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Returning ObjectProperty* will be useful for new property
> registration code that will add additional callbacks
> to ObjectProperty after registering it.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> Changes v1 -> v2:
> * Redone patch on top of additional changes in series v2
> * Commit message reword
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> include/hw/qdev-properties.h | 3 ++-
> hw/core/qdev-properties.c | 12 ++++++------
> 2 files changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index ab9c538ba4..aae882317a 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -34,7 +34,8 @@ struct PropertyInfo {
> const QEnumLookup *enum_table;
> int (*print)(Object *obj, Property *prop, char *dest, size_t len);
> void (*set_default_value)(ObjectProperty *op, const Property *prop);
> - void (*create)(ObjectClass *oc, const char *name, Property *prop);
> + ObjectProperty *(*create)(ObjectClass *oc, const char *name,
> + Property *prop);
> ObjectPropertyAccessor *get;
> ObjectPropertyAccessor *set;
> ObjectPropertyRelease *release;
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index 92f48ecbf2..3bb05e7d0d 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -821,13 +821,13 @@ const PropertyInfo qdev_prop_size = {
>
> /* --- object link property --- */
>
> -static void create_link_property(ObjectClass *oc, const char *name,
> - Property *prop)
> +static ObjectProperty *create_link_property(ObjectClass *oc, const char *name,
> + Property *prop)
> {
> - object_class_property_add_link(oc, name, prop->link_type,
> - prop->offset,
> - qdev_prop_allow_set_link_before_realize,
> - OBJ_PROP_LINK_STRONG);
> + return object_class_property_add_link(oc, name, prop->link_type,
> + prop->offset,
> + qdev_prop_allow_set_link_before_realize,
> + OBJ_PROP_LINK_STRONG);
> }
>
> const PropertyInfo qdev_prop_link = {
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 25/32] qdev: Make qdev_class_add_property() more flexible
2020-12-11 22:05 ` [PATCH v4 25/32] qdev: Make qdev_class_add_property() more flexible Eduardo Habkost
@ 2020-12-14 15:00 ` Igor Mammedov
2020-12-14 18:28 ` Eduardo Habkost
0 siblings, 1 reply; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 15:00 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:22 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Support Property.set_default and PropertyInfo.description even if
> PropertyInfo.create is set.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Changes v1 -> v2:
> * Patch redone after changes in the previous patches in the
> series
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> hw/core/qdev-properties.c | 17 +++++++++--------
> 1 file changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index 3bb05e7d0d..fcda0c8f4b 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -863,24 +863,25 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
> Property *prop)
> {
> ObjectClass *oc = OBJECT_CLASS(klass);
> + ObjectProperty *op;
>
> if (prop->info->create) {
> - prop->info->create(oc, name, prop);
> + op = prop->info->create(oc, name, prop);
> } else {
> - ObjectProperty *op;
> -
> op = object_class_property_add(oc,
> name, prop->info->name,
> field_prop_getter(prop->info),
> field_prop_setter(prop->info),
> prop->info->release,
> prop);
> - if (prop->set_default) {
> - prop->info->set_default_value(op, prop);
> - }
> }
> - object_class_property_set_description(oc, name,
> - prop->info->description);
> + if (prop->set_default) {
> + prop->info->set_default_value(op, prop);
> + }
> + if (prop->info->description) {
before that, null description wasn't allow, why relax rule now?
> + object_class_property_set_description(oc, name,
> + prop->info->description);
> + }
> }
>
> /**
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 31/32] qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen()
2020-12-11 22:05 ` [PATCH v4 31/32] qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen() Eduardo Habkost
@ 2020-12-14 15:11 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 15:11 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:28 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> We're just doing pointer math with the device pointer, we can
> simply use obj instead.
>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> hw/core/qdev-properties.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index 3d648b088d..9d25b49fc1 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -559,10 +559,9 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
> * array-length field in the device struct, we have to create the
> * array itself and dynamically add the corresponding properties.
> */
> - DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> uint32_t *alenptr = object_field_prop_ptr(obj, prop);
> - void **arrayptr = (void *)dev + prop->arrayoffset;
> + void **arrayptr = (void *)obj + prop->arrayoffset;
> void *eltptr;
> const char *arrayname;
> int i;
> @@ -602,7 +601,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
> * they get the right answer despite the array element not actually
> * being inside the device struct.
> */
> - arrayprop->prop.offset = eltptr - (void *)dev;
> + arrayprop->prop.offset = eltptr - (void *)obj;
> assert(object_field_prop_ptr(obj, &arrayprop->prop) == eltptr);
> object_property_add(obj, propname,
> arrayprop->prop.info->name,
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr()
2020-12-11 22:05 ` [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr() Eduardo Habkost
2020-12-14 7:47 ` Paul Durrant
2020-12-14 10:56 ` Cornelia Huck
@ 2020-12-14 15:13 ` Igor Mammedov
2 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-14 15:13 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Matthew Rosato, Paul Durrant, qemu-devel, Stefano Stabellini,
qemu-block, Stefan Berger, David Hildenbrand, Markus Armbruster,
Halil Pasic, Christian Borntraeger, Anthony Perard,
Marc-André Lureau, Philippe Mathieu-Daudé, Thomas Huth,
qemu-s390x, xen-devel, John Snow, Richard Henderson, Kevin Wolf,
Daniel P. Berrange, Cornelia Huck, Alex Williamson, Max Reitz,
Paolo Bonzini, Stefan Berger
On Fri, 11 Dec 2020 17:05:27 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> The function will be moved to common QOM code, as it is not
> specific to TYPE_DEVICE anymore.
>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> Changes v1 -> v2:
> * Rename to object_field_prop_ptr() instead of object_static_prop_ptr()
> ---
> Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>
> Cc: Anthony Perard <anthony.perard@citrix.com>
> Cc: Paul Durrant <paul@xen.org>
> Cc: Kevin Wolf <kwolf@redhat.com>
> Cc: Max Reitz <mreitz@redhat.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: Cornelia Huck <cohuck@redhat.com>
> Cc: Halil Pasic <pasic@linux.ibm.com>
> Cc: Christian Borntraeger <borntraeger@de.ibm.com>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: David Hildenbrand <david@redhat.com>
> Cc: Thomas Huth <thuth@redhat.com>
> Cc: Matthew Rosato <mjrosato@linux.ibm.com>
> Cc: Alex Williamson <alex.williamson@redhat.com>
> Cc: qemu-devel@nongnu.org
> Cc: xen-devel@lists.xenproject.org
> Cc: qemu-block@nongnu.org
> Cc: qemu-s390x@nongnu.org
> ---
> include/hw/qdev-properties.h | 2 +-
> backends/tpm/tpm_util.c | 6 ++--
> hw/block/xen-block.c | 4 +--
> hw/core/qdev-properties-system.c | 50 +++++++++++++-------------
> hw/core/qdev-properties.c | 60 ++++++++++++++++----------------
> hw/s390x/css.c | 4 +--
> hw/s390x/s390-pci-bus.c | 4 +--
> hw/vfio/pci-quirks.c | 4 +--
> 8 files changed, 67 insertions(+), 67 deletions(-)
>
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index 90222822f1..97bb9494ae 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -193,7 +193,7 @@ void qdev_prop_set_macaddr(DeviceState *dev, const char *name,
> const uint8_t *value);
> void qdev_prop_set_enum(DeviceState *dev, const char *name, int value);
>
> -void *qdev_get_prop_ptr(Object *obj, Property *prop);
> +void *object_field_prop_ptr(Object *obj, Property *prop);
>
> void qdev_prop_register_global(GlobalProperty *prop);
> const GlobalProperty *qdev_find_global_prop(Object *obj,
> diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c
> index 39b45fa46d..a6e6d3e72f 100644
> --- a/backends/tpm/tpm_util.c
> +++ b/backends/tpm/tpm_util.c
> @@ -35,7 +35,7 @@
> static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - TPMBackend **be = qdev_get_prop_ptr(obj, opaque);
> + TPMBackend **be = object_field_prop_ptr(obj, opaque);
> char *p;
>
> p = g_strdup(*be ? (*be)->id : "");
> @@ -47,7 +47,7 @@ static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - TPMBackend *s, **be = qdev_get_prop_ptr(obj, prop);
> + TPMBackend *s, **be = object_field_prop_ptr(obj, prop);
> char *str;
>
> if (!visit_type_str(v, name, &str, errp)) {
> @@ -67,7 +67,7 @@ static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
> static void release_tpm(Object *obj, const char *name, void *opaque)
> {
> Property *prop = opaque;
> - TPMBackend **be = qdev_get_prop_ptr(obj, prop);
> + TPMBackend **be = object_field_prop_ptr(obj, prop);
>
> if (*be) {
> tpm_backend_reset(*be);
> diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c
> index bd1aef63a7..718d886e5c 100644
> --- a/hw/block/xen-block.c
> +++ b/hw/block/xen-block.c
> @@ -336,7 +336,7 @@ static void xen_block_get_vdev(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
> + XenBlockVdev *vdev = object_field_prop_ptr(obj, prop);
> char *str;
>
> switch (vdev->type) {
> @@ -396,7 +396,7 @@ static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - XenBlockVdev *vdev = qdev_get_prop_ptr(obj, prop);
> + XenBlockVdev *vdev = object_field_prop_ptr(obj, prop);
> char *str, *p;
> const char *end;
>
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 590c5f3d97..e6d378a34e 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -62,7 +62,7 @@ static void get_drive(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - void **ptr = qdev_get_prop_ptr(obj, prop);
> + void **ptr = object_field_prop_ptr(obj, prop);
> const char *value;
> char *p;
>
> @@ -88,7 +88,7 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
> {
> DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> - void **ptr = qdev_get_prop_ptr(obj, prop);
> + void **ptr = object_field_prop_ptr(obj, prop);
> char *str;
> BlockBackend *blk;
> bool blk_created = false;
> @@ -181,7 +181,7 @@ static void release_drive(Object *obj, const char *name, void *opaque)
> {
> DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> - BlockBackend **ptr = qdev_get_prop_ptr(obj, prop);
> + BlockBackend **ptr = object_field_prop_ptr(obj, prop);
>
> if (*ptr) {
> AioContext *ctx = blk_get_aio_context(*ptr);
> @@ -214,7 +214,7 @@ const PropertyInfo qdev_prop_drive_iothread = {
> static void get_chr(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> - CharBackend *be = qdev_get_prop_ptr(obj, opaque);
> + CharBackend *be = object_field_prop_ptr(obj, opaque);
> char *p;
>
> p = g_strdup(be->chr && be->chr->label ? be->chr->label : "");
> @@ -226,7 +226,7 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - CharBackend *be = qdev_get_prop_ptr(obj, prop);
> + CharBackend *be = object_field_prop_ptr(obj, prop);
> Chardev *s;
> char *str;
>
> @@ -262,7 +262,7 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
> static void release_chr(Object *obj, const char *name, void *opaque)
> {
> Property *prop = opaque;
> - CharBackend *be = qdev_get_prop_ptr(obj, prop);
> + CharBackend *be = object_field_prop_ptr(obj, prop);
>
> qemu_chr_fe_deinit(be, false);
> }
> @@ -286,7 +286,7 @@ static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - MACAddr *mac = qdev_get_prop_ptr(obj, prop);
> + MACAddr *mac = object_field_prop_ptr(obj, prop);
> char buffer[2 * 6 + 5 + 1];
> char *p = buffer;
>
> @@ -301,7 +301,7 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - MACAddr *mac = qdev_get_prop_ptr(obj, prop);
> + MACAddr *mac = object_field_prop_ptr(obj, prop);
> int i, pos;
> char *str;
> const char *p;
> @@ -363,7 +363,7 @@ static void get_netdev(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
> + NICPeers *peers_ptr = object_field_prop_ptr(obj, prop);
> char *p = g_strdup(peers_ptr->ncs[0] ? peers_ptr->ncs[0]->name : "");
>
> visit_type_str(v, name, &p, errp);
> @@ -374,7 +374,7 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - NICPeers *peers_ptr = qdev_get_prop_ptr(obj, prop);
> + NICPeers *peers_ptr = object_field_prop_ptr(obj, prop);
> NetClientState **ncs = peers_ptr->ncs;
> NetClientState *peers[MAX_QUEUE_NUM];
> int queues, err = 0, i = 0;
> @@ -436,7 +436,7 @@ static void get_audiodev(Object *obj, Visitor *v, const char* name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
> + QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
> char *p = g_strdup(audio_get_id(card));
>
> visit_type_str(v, name, &p, errp);
> @@ -447,7 +447,7 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - QEMUSoundCard *card = qdev_get_prop_ptr(obj, prop);
> + QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
> AudioState *state;
> int err = 0;
> char *str;
> @@ -549,7 +549,7 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
> {
> DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> - uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint32_t *ptr = object_field_prop_ptr(obj, prop);
> uint64_t value;
> Error *local_err = NULL;
>
> @@ -637,7 +637,7 @@ static void get_reserved_region(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
> + ReservedRegion *rr = object_field_prop_ptr(obj, prop);
> char buffer[64];
> char *p = buffer;
> int rc;
> @@ -653,7 +653,7 @@ static void set_reserved_region(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - ReservedRegion *rr = qdev_get_prop_ptr(obj, prop);
> + ReservedRegion *rr = object_field_prop_ptr(obj, prop);
> Error *local_err = NULL;
> const char *endptr;
> char *str;
> @@ -715,7 +715,7 @@ static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - int32_t value, *ptr = qdev_get_prop_ptr(obj, prop);
> + int32_t value, *ptr = object_field_prop_ptr(obj, prop);
> unsigned int slot, fn, n;
> char *str;
>
> @@ -753,7 +753,7 @@ invalid:
> static int print_pci_devfn(Object *obj, Property *prop, char *dest,
> size_t len)
> {
> - int32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + int32_t *ptr = object_field_prop_ptr(obj, prop);
>
> if (*ptr == -1) {
> return snprintf(dest, len, "<unset>");
> @@ -777,7 +777,7 @@ static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
> + PCIHostDeviceAddress *addr = object_field_prop_ptr(obj, prop);
> char buffer[] = "ffff:ff:ff.f";
> char *p = buffer;
> int rc = 0;
> @@ -803,7 +803,7 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - PCIHostDeviceAddress *addr = qdev_get_prop_ptr(obj, prop);
> + PCIHostDeviceAddress *addr = object_field_prop_ptr(obj, prop);
> char *str, *p;
> char *e;
> unsigned long val;
> @@ -893,7 +893,7 @@ static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
> + PCIExpLinkSpeed *p = object_field_prop_ptr(obj, prop);
> int speed;
>
> switch (*p) {
> @@ -921,7 +921,7 @@ static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - PCIExpLinkSpeed *p = qdev_get_prop_ptr(obj, prop);
> + PCIExpLinkSpeed *p = object_field_prop_ptr(obj, prop);
> int speed;
>
> if (!visit_type_enum(v, name, &speed, prop->info->enum_table,
> @@ -963,7 +963,7 @@ static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
> + PCIExpLinkWidth *p = object_field_prop_ptr(obj, prop);
> int width;
>
> switch (*p) {
> @@ -1000,7 +1000,7 @@ static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - PCIExpLinkWidth *p = qdev_get_prop_ptr(obj, prop);
> + PCIExpLinkWidth *p = object_field_prop_ptr(obj, prop);
> int width;
>
> if (!visit_type_enum(v, name, &width, prop->info->enum_table,
> @@ -1051,7 +1051,7 @@ static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
> + QemuUUID *uuid = object_field_prop_ptr(obj, prop);
> char buffer[UUID_FMT_LEN + 1];
> char *p = buffer;
>
> @@ -1066,7 +1066,7 @@ static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - QemuUUID *uuid = qdev_get_prop_ptr(obj, prop);
> + QemuUUID *uuid = object_field_prop_ptr(obj, prop);
> char *str;
>
> if (!visit_type_str(v, name, &str, errp)) {
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index c1dd4ae71b..3d648b088d 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -50,7 +50,7 @@ void qdev_prop_allow_set_link_before_realize(const Object *obj,
> }
> }
>
> -void *qdev_get_prop_ptr(Object *obj, Property *prop)
> +void *object_field_prop_ptr(Object *obj, Property *prop)
> {
> void *ptr = obj;
> ptr += prop->offset;
> @@ -100,7 +100,7 @@ void field_prop_get_enum(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - int *ptr = qdev_get_prop_ptr(obj, prop);
> + int *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
> }
> @@ -109,7 +109,7 @@ void field_prop_set_enum(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - int *ptr = qdev_get_prop_ptr(obj, prop);
> + int *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
> }
> @@ -138,7 +138,7 @@ static uint32_t qdev_get_prop_mask(Property *prop)
>
> static void bit_prop_set(Object *obj, Property *props, bool val)
> {
> - uint32_t *p = qdev_get_prop_ptr(obj, props);
> + uint32_t *p = object_field_prop_ptr(obj, props);
> uint32_t mask = qdev_get_prop_mask(props);
> if (val) {
> *p |= mask;
> @@ -151,7 +151,7 @@ static void prop_get_bit(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint32_t *p = qdev_get_prop_ptr(obj, prop);
> + uint32_t *p = object_field_prop_ptr(obj, prop);
> bool value = (*p & qdev_get_prop_mask(prop)) != 0;
>
> visit_type_bool(v, name, &value, errp);
> @@ -192,7 +192,7 @@ static uint64_t qdev_get_prop_mask64(Property *prop)
>
> static void bit64_prop_set(Object *obj, Property *props, bool val)
> {
> - uint64_t *p = qdev_get_prop_ptr(obj, props);
> + uint64_t *p = object_field_prop_ptr(obj, props);
> uint64_t mask = qdev_get_prop_mask64(props);
> if (val) {
> *p |= mask;
> @@ -205,7 +205,7 @@ static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint64_t *p = qdev_get_prop_ptr(obj, prop);
> + uint64_t *p = object_field_prop_ptr(obj, prop);
> bool value = (*p & qdev_get_prop_mask64(prop)) != 0;
>
> visit_type_bool(v, name, &value, errp);
> @@ -237,7 +237,7 @@ static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - bool *ptr = qdev_get_prop_ptr(obj, prop);
> + bool *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_bool(v, name, ptr, errp);
> }
> @@ -246,7 +246,7 @@ static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - bool *ptr = qdev_get_prop_ptr(obj, prop);
> + bool *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_bool(v, name, ptr, errp);
> }
> @@ -264,7 +264,7 @@ static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint8_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint8(v, name, ptr, errp);
> }
> @@ -273,7 +273,7 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint8_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint8(v, name, ptr, errp);
> }
> @@ -303,7 +303,7 @@ static void get_uint16(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint16_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint16(v, name, ptr, errp);
> }
> @@ -312,7 +312,7 @@ static void set_uint16(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint16_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint16_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint16(v, name, ptr, errp);
> }
> @@ -330,7 +330,7 @@ static void get_uint32(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint32_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint32(v, name, ptr, errp);
> }
> @@ -339,7 +339,7 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint32_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint32(v, name, ptr, errp);
> }
> @@ -348,7 +348,7 @@ void field_prop_get_int32(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - int32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + int32_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_int32(v, name, ptr, errp);
> }
> @@ -357,7 +357,7 @@ static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - int32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + int32_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_int32(v, name, ptr, errp);
> }
> @@ -382,7 +382,7 @@ static void get_uint64(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint64_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint64(v, name, ptr, errp);
> }
> @@ -391,7 +391,7 @@ static void set_uint64(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint64_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint64(v, name, ptr, errp);
> }
> @@ -400,7 +400,7 @@ static void get_int64(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - int64_t *ptr = qdev_get_prop_ptr(obj, prop);
> + int64_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_int64(v, name, ptr, errp);
> }
> @@ -409,7 +409,7 @@ static void set_int64(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - int64_t *ptr = qdev_get_prop_ptr(obj, prop);
> + int64_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_int64(v, name, ptr, errp);
> }
> @@ -433,14 +433,14 @@ const PropertyInfo prop_info_int64 = {
> static void release_string(Object *obj, const char *name, void *opaque)
> {
> Property *prop = opaque;
> - g_free(*(char **)qdev_get_prop_ptr(obj, prop));
> + g_free(*(char **)object_field_prop_ptr(obj, prop));
> }
>
> static void get_string(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - char **ptr = qdev_get_prop_ptr(obj, prop);
> + char **ptr = object_field_prop_ptr(obj, prop);
>
> if (!*ptr) {
> char *str = (char *)"";
> @@ -454,7 +454,7 @@ static void set_string(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - char **ptr = qdev_get_prop_ptr(obj, prop);
> + char **ptr = object_field_prop_ptr(obj, prop);
> char *str;
>
> if (!visit_type_str(v, name, &str, errp)) {
> @@ -488,7 +488,7 @@ void field_prop_get_size32(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint32_t *ptr = object_field_prop_ptr(obj, prop);
> uint64_t value = *ptr;
>
> visit_type_size(v, name, &value, errp);
> @@ -498,7 +498,7 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint32_t *ptr = object_field_prop_ptr(obj, prop);
> uint64_t value;
>
> if (!visit_type_size(v, name, &value, errp)) {
> @@ -561,7 +561,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
> */
> DeviceState *dev = DEVICE(obj);
> Property *prop = opaque;
> - uint32_t *alenptr = qdev_get_prop_ptr(obj, prop);
> + uint32_t *alenptr = object_field_prop_ptr(obj, prop);
> void **arrayptr = (void *)dev + prop->arrayoffset;
> void *eltptr;
> const char *arrayname;
> @@ -603,7 +603,7 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
> * being inside the device struct.
> */
> arrayprop->prop.offset = eltptr - (void *)dev;
> - assert(qdev_get_prop_ptr(obj, &arrayprop->prop) == eltptr);
> + assert(object_field_prop_ptr(obj, &arrayprop->prop) == eltptr);
> object_property_add(obj, propname,
> arrayprop->prop.info->name,
> field_prop_getter(arrayprop->prop.info),
> @@ -798,7 +798,7 @@ static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint64_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_size(v, name, ptr, errp);
> }
> @@ -807,7 +807,7 @@ static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
> Error **errp)
> {
> Property *prop = opaque;
> - uint64_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint64_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_size(v, name, ptr, errp);
> }
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 496e2c5801..fe47751df4 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -2344,7 +2344,7 @@ static void get_css_devid(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
> + CssDevId *dev_id = object_field_prop_ptr(obj, prop);
> char buffer[] = "xx.x.xxxx";
> char *p = buffer;
> int r;
> @@ -2373,7 +2373,7 @@ static void set_css_devid(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - CssDevId *dev_id = qdev_get_prop_ptr(obj, prop);
> + CssDevId *dev_id = object_field_prop_ptr(obj, prop);
> char *str;
> int num, n1, n2;
> unsigned int cssid, ssid, devid;
> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
> index 30511f620e..dd138dae94 100644
> --- a/hw/s390x/s390-pci-bus.c
> +++ b/hw/s390x/s390-pci-bus.c
> @@ -1330,7 +1330,7 @@ static void s390_pci_get_fid(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> Property *prop = opaque;
> - uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint32_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint32(v, name, ptr, errp);
> }
> @@ -1340,7 +1340,7 @@ static void s390_pci_set_fid(Object *obj, Visitor *v, const char *name,
> {
> S390PCIBusDevice *zpci = S390_PCI_DEVICE(obj);
> Property *prop = opaque;
> - uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint32_t *ptr = object_field_prop_ptr(obj, prop);
>
> if (!visit_type_uint32(v, name, ptr, errp)) {
> return;
> diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c
> index 802979635c..fc8d63c850 100644
> --- a/hw/vfio/pci-quirks.c
> +++ b/hw/vfio/pci-quirks.c
> @@ -1489,7 +1489,7 @@ static void get_nv_gpudirect_clique_id(Object *obj, Visitor *v,
> Error **errp)
> {
> Property *prop = opaque;
> - uint8_t *ptr = qdev_get_prop_ptr(obj, prop);
> + uint8_t *ptr = object_field_prop_ptr(obj, prop);
>
> visit_type_uint8(v, name, ptr, errp);
> }
> @@ -1499,7 +1499,7 @@ static void set_nv_gpudirect_clique_id(Object *obj, Visitor *v,
> Error **errp)
> {
> Property *prop = opaque;
> - uint8_t value, *ptr = qdev_get_prop_ptr(obj, prop);
> + uint8_t value, *ptr = object_field_prop_ptr(obj, prop);
>
> if (!visit_type_uint8(v, name, &value, errp)) {
> return;
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set()
2020-12-14 14:55 ` Igor Mammedov
@ 2020-12-14 17:24 ` Eduardo Habkost
2020-12-15 14:24 ` Igor Mammedov
0 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-14 17:24 UTC (permalink / raw)
To: Igor Mammedov
Cc: Matthew Rosato, Paul Durrant, Mark Cave-Ayland, qemu-devel,
Stefano Stabellini, qemu-block, Stefan Berger, David Hildenbrand,
Markus Armbruster, Halil Pasic, Christian Borntraeger,
Anthony Perard, Marc-André Lureau,
Philippe Mathieu-Daudé, Artyom Tarasenko, Thomas Huth,
Alex Williamson, xen-devel, John Snow, Richard Henderson,
Kevin Wolf, Daniel P. Berrange, Cornelia Huck, qemu-s390x,
Max Reitz, Paolo Bonzini, Stefan Berger
On Mon, Dec 14, 2020 at 03:55:30PM +0100, Igor Mammedov wrote:
> On Fri, 11 Dec 2020 17:05:20 -0500
> Eduardo Habkost <ehabkost@redhat.com> wrote:
>
> > Every single qdev property setter function manually checks
> > dev->realized. We can just check dev->realized inside
> > qdev_property_set() instead.
> >
> > The check is being added as a separate function
> > (qdev_prop_allow_set()) because it will become a callback later.
>
> is callback added within this series?
> and I'd add here what's the purpose of it.
It will be added in part 2 of the series. See v3:
https://lore.kernel.org/qemu-devel/20201112214350.872250-35-ehabkost@redhat.com/
I don't know what else I could say about its purpose, in addition
to what I wrote above, and the comment below[1].
If you are just curious about the callback and confused because
it is not anywhere in this series, I can just remove the
paragraph above from the commit message. Would that be enough?
>
[...]
> > +/* returns: true if property is allowed to be set, false otherwise */
[1] ^^^
> > +static bool qdev_prop_allow_set(Object *obj, const char *name,
> > + Error **errp)
> > +{
> > + DeviceState *dev = DEVICE(obj);
> > +
> > + if (dev->realized) {
> > + qdev_prop_set_after_realize(dev, name, errp);
> > + return false;
> > + }
> > + return true;
> > +}
> > +
--
Eduardo
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property
2020-12-14 14:42 ` Igor Mammedov
@ 2020-12-14 17:30 ` Eduardo Habkost
2020-12-15 14:39 ` Igor Mammedov
0 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-14 17:30 UTC (permalink / raw)
To: Igor Mammedov
Cc: Kevin Wolf, Daniel P. Berrange, Philippe Mathieu-Daudé,
Mark Cave-Ayland, qemu-devel, Markus Armbruster,
Marc-André Lureau, Paolo Bonzini, John Snow,
Artyom Tarasenko, Stefan Berger
On Mon, Dec 14, 2020 at 03:42:48PM +0100, Igor Mammedov wrote:
> On Fri, 11 Dec 2020 17:05:14 -0500
> Eduardo Habkost <ehabkost@redhat.com> wrote:
>
> > Use the DEFINE_PROP macro (which will set extra fields in the
> > struct) instead of initializing a Property struct manually.
> >
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> > ---
> > This is a new patch added in v2 of the series
> > ---
> > Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> > Cc: Artyom Tarasenko <atar4qemu@gmail.com>
> > Cc: qemu-devel@nongnu.org
> > ---
> > target/sparc/cpu.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> > index 6a3299041f..92534bcd18 100644
> > --- a/target/sparc/cpu.c
> > +++ b/target/sparc/cpu.c
> > @@ -848,7 +848,8 @@ static Property sparc_cpu_properties[] = {
> > qdev_prop_uint64, target_ulong),
> > DEFINE_PROP_UINT32("fpu-version", SPARCCPU, env.def.fpu_version, 0),
> > DEFINE_PROP_UINT32("mmu-version", SPARCCPU, env.def.mmu_version, 0),
> > - { .name = "nwindows", .info = &qdev_prop_nwindows },
> > + DEFINE_PROP("nwindows", SPARCCPU, env.def.nwindows,
> ^^^^
> stray whitespace
I was trying to keep it aligned to the other entries (not visible in diff
context), but I agree it's just confusing. I will fix this while committing.
--
Eduardo
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h
2020-12-14 14:25 ` Igor Mammedov
@ 2020-12-14 17:40 ` Eduardo Habkost
0 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-14 17:40 UTC (permalink / raw)
To: Igor Mammedov
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Mon, Dec 14, 2020 at 03:25:41PM +0100, Igor Mammedov wrote:
> On Fri, 11 Dec 2020 17:05:12 -0500
> Eduardo Habkost <ehabkost@redhat.com> wrote:
>
> > Move the property types and property macros implemented in
> > qdev-properties-system.c to a new qdev-properties-system.h
> > header.
> >
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> > ---
> > Changes v1 -> v2:
> > * Move UUID property type too, as it was moved to
> > qdev-properties-system.c in the previous patch
> > ---
[...]
> > diff --git a/audio/audio.h b/audio/audio.h
> > index b883ebfb1f..21fe3226ae 100644
> > --- a/audio/audio.h
> > +++ b/audio/audio.h
> > @@ -28,6 +28,7 @@
> > #include "qemu/queue.h"
> > #include "qapi/qapi-types-audio.h"
> > #include "hw/qdev-properties.h"
> it's already included into new header
> so maybe s/old/new/ here and in other such places?
There's no guarantee that qdev-system-properties.h will always
depend on qdev-properties.h. If a file depends on definitions
from qdev-properties.h, it should include qdev-properties.h
explicitly.
>
> > +#include "hw/qdev-properties-system.h"
> >
> > typedef void (*audio_callback_fn) (void *opaque, int avail);
> >
> > diff --git a/include/hw/block/block.h b/include/hw/block/block.h
> > index 1e8b6253dd..c172cbe65f 100644
> > --- a/include/hw/block/block.h
> > +++ b/include/hw/block/block.h
> > @@ -13,6 +13,7 @@
> >
> > #include "exec/hwaddr.h"
> > #include "qapi/qapi-types-block-core.h"
> > +#include "hw/qdev-properties-system.h"
>
> what for it is included here?
hw/block/block.h has references to DEFINE_PROP_BLOCKSIZE,
DEFINE_PROP_DRIVE, and others.
>
[...]
--
Eduardo
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 25/32] qdev: Make qdev_class_add_property() more flexible
2020-12-14 15:00 ` Igor Mammedov
@ 2020-12-14 18:28 ` Eduardo Habkost
2020-12-15 14:25 ` Igor Mammedov
0 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-14 18:28 UTC (permalink / raw)
To: Igor Mammedov
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Mon, Dec 14, 2020 at 04:00:59PM +0100, Igor Mammedov wrote:
> On Fri, 11 Dec 2020 17:05:22 -0500
> Eduardo Habkost <ehabkost@redhat.com> wrote:
>
> > Support Property.set_default and PropertyInfo.description even if
> > PropertyInfo.create is set.
> >
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> > ---
> > Changes v1 -> v2:
> > * Patch redone after changes in the previous patches in the
> > series
> > ---
> > Cc: Paolo Bonzini <pbonzini@redhat.com>
> > Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> > Cc: Eduardo Habkost <ehabkost@redhat.com>
> > Cc: qemu-devel@nongnu.org
> > ---
> > hw/core/qdev-properties.c | 17 +++++++++--------
> > 1 file changed, 9 insertions(+), 8 deletions(-)
> >
> > diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> > index 3bb05e7d0d..fcda0c8f4b 100644
> > --- a/hw/core/qdev-properties.c
> > +++ b/hw/core/qdev-properties.c
> > @@ -863,24 +863,25 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
> > Property *prop)
> > {
> > ObjectClass *oc = OBJECT_CLASS(klass);
> > + ObjectProperty *op;
> >
> > if (prop->info->create) {
> > - prop->info->create(oc, name, prop);
> > + op = prop->info->create(oc, name, prop);
> > } else {
> > - ObjectProperty *op;
> > -
> > op = object_class_property_add(oc,
> > name, prop->info->name,
> > field_prop_getter(prop->info),
> > field_prop_setter(prop->info),
> > prop->info->release,
> > prop);
> > - if (prop->set_default) {
> > - prop->info->set_default_value(op, prop);
> > - }
> > }
> > - object_class_property_set_description(oc, name,
> > - prop->info->description);
> > + if (prop->set_default) {
> > + prop->info->set_default_value(op, prop);
> > + }
>
> > + if (prop->info->description) {
> before that, null description wasn't allow, why relax rule now?
NULL description was already allowed before, because
object_class_property_set_description(..., NULL) works.
This means the conditional I've added above is completely
unnecessary. I will fix this in the next version. Thanks!
>
> > + object_class_property_set_description(oc, name,
> > + prop->info->description);
> > + }
> > }
> >
> > /**
>
--
Eduardo
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 00/32] qdev property code cleanup
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
` (31 preceding siblings ...)
2020-12-11 22:05 ` [PATCH v4 32/32] tests: Add unit test for qdev array properties Eduardo Habkost
@ 2020-12-14 19:42 ` Eduardo Habkost
2020-12-15 15:40 ` Eduardo Habkost
32 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-14 19:42 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, Dec 11, 2020 at 05:04:57PM -0500, Eduardo Habkost wrote:
> This code contains the first 32 patches from the series:
>
> Subject: [PATCH v3 00/53] Make qdev static property API usable by any QOM type
> https://lore.kernel.org/qemu-devel/20201112214350.872250-1-ehabkost@redhat.com
>
> I'm submitting this separately so we can merge the qdev-specific
> cleanup while we discuss our long term plans for QOM properties.
>
> Eduardo Habkost (32):
> cs4231: Get rid of empty property array
> cpu: Move cpu_common_props to hw/core/cpu.c
> qdev: Move property code to qdev-properties.[ch]
> qdev: Check dev->realized at set_size()
> sparc: Check dev->realized at sparc_set_nwindows()
> qdev: Don't use dev->id on set_size32() error message
> qdev: Make PropertyInfo.print method get Object* argument
> qdev: Make bit_prop_set() get Object* argument
> qdev: Make qdev_get_prop_ptr() get Object* arg
> qdev: Make qdev_find_global_prop() get Object* argument
> qdev: Make check_prop_still_unset() get Object* argument
> qdev: Make error_set_from_qdev_prop_error() get Object* argument
> qdev: Make qdev_propinfo_get_uint16() static
> qdev: Move UUID property to qdev-properties-system.c
I'm queueing patches 1-14 (above) on machine-next.
> qdev: Move softmmu properties to qdev-properties-system.h
> qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros
> sparc: Use DEFINE_PROP for nwindows property
> qdev: Get just property name at error_set_from_qdev_prop_error()
> qdev: Avoid using prop->name unnecessarily
> qdev: Add name parameter to qdev_class_add_property()
> qdev: Add name argument to PropertyInfo.create method
> qdev: Wrap getters and setters in separate helpers
> qdev: Move dev->realized check to qdev_property_set()
> qdev: Make PropertyInfo.create return ObjectProperty*
> qdev: Make qdev_class_add_property() more flexible
> qdev: Separate generic and device-specific property registration
> qdev: Rename qdev_propinfo_* to field_prop_*
> qdev: Move qdev_prop_tpm declaration to tpm_prop.h
> qdev: Rename qdev_prop_* to prop_info_*
> qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr()
> qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen()
> tests: Add unit test for qdev array properties
>
--
Eduardo
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 01/32] cs4231: Get rid of empty property array
2020-12-11 22:04 ` [PATCH v4 01/32] cs4231: Get rid of empty property array Eduardo Habkost
@ 2020-12-15 8:22 ` Gerd Hoffmann
0 siblings, 0 replies; 69+ messages in thread
From: Gerd Hoffmann @ 2020-12-15 8:22 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Igor Mammedov, Philippe Mathieu-Daudé, Stefan Berger
On Fri, Dec 11, 2020 at 05:04:58PM -0500, Eduardo Habkost wrote:
> An empty props array is unnecessary, we can just not call
> device_class_set_props().
>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: qemu-devel@nongnu.org
Patch added to audio queue.
thanks,
Gerd
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 05/32] sparc: Check dev->realized at sparc_set_nwindows()
2020-12-11 22:05 ` [PATCH v4 05/32] sparc: Check dev->realized at sparc_set_nwindows() Eduardo Habkost
@ 2020-12-15 11:45 ` Mark Cave-Ayland
0 siblings, 0 replies; 69+ messages in thread
From: Mark Cave-Ayland @ 2020-12-15 11:45 UTC (permalink / raw)
To: Eduardo Habkost, qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, Igor Mammedov,
Philippe Mathieu-Daudé, Markus Armbruster, Paolo Bonzini,
Marc-André Lureau, John Snow, Artyom Tarasenko,
Stefan Berger
On 11/12/2020 22:05, Eduardo Habkost wrote:
> sparc_set_nwindows() is one of the very few property setters that
> don't check dev->realized, and there's no reason for it to be
> special. Check dev->realized like the other setters.
>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Cc: Artyom Tarasenko <atar4qemu@gmail.com>
> Cc: qemu-devel@nongnu.org
> ---
> target/sparc/cpu.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index 701e794eac..6a3299041f 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -798,11 +798,17 @@ static void sparc_get_nwindows(Object *obj, Visitor *v, const char *name,
> static void sparc_set_nwindows(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> + DeviceState *dev = DEVICE(obj);
> const int64_t min = MIN_NWINDOWS;
> const int64_t max = MAX_NWINDOWS;
> SPARCCPU *cpu = SPARC_CPU(obj);
> int64_t value;
>
> + if (dev->realized) {
> + qdev_prop_set_after_realize(dev, name, errp);
> + return;
> + }
> +
> if (!visit_type_int(v, name, &value, errp)) {
> return;
> }
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
ATB,
Mark.
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property
2020-12-11 22:05 ` [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property Eduardo Habkost
2020-12-14 14:42 ` Igor Mammedov
@ 2020-12-15 11:52 ` Mark Cave-Ayland
1 sibling, 0 replies; 69+ messages in thread
From: Mark Cave-Ayland @ 2020-12-15 11:52 UTC (permalink / raw)
To: Eduardo Habkost, qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, Igor Mammedov,
Philippe Mathieu-Daudé, Markus Armbruster, Paolo Bonzini,
Marc-André Lureau, John Snow, Artyom Tarasenko,
Stefan Berger
On 11/12/2020 22:05, Eduardo Habkost wrote:
> Use the DEFINE_PROP macro (which will set extra fields in the
> struct) instead of initializing a Property struct manually.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> This is a new patch added in v2 of the series
> ---
> Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Cc: Artyom Tarasenko <atar4qemu@gmail.com>
> Cc: qemu-devel@nongnu.org
> ---
> target/sparc/cpu.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index 6a3299041f..92534bcd18 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -848,7 +848,8 @@ static Property sparc_cpu_properties[] = {
> qdev_prop_uint64, target_ulong),
> DEFINE_PROP_UINT32("fpu-version", SPARCCPU, env.def.fpu_version, 0),
> DEFINE_PROP_UINT32("mmu-version", SPARCCPU, env.def.mmu_version, 0),
> - { .name = "nwindows", .info = &qdev_prop_nwindows },
> + DEFINE_PROP("nwindows", SPARCCPU, env.def.nwindows,
> + qdev_prop_nwindows, uint32_t),
> DEFINE_PROP_END_OF_LIST()
> };
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
FWIW as my bandwidth can be intermittent at times, I'm generally happy to give an
implicit go-ahead for merging the QOM/QDEV improvements since IMO the benefits far
outweigh any potential problems. So if you don't hear from me then I'm happy for you
to assume that any SPARC-related changes in this area are implicitly okay to merge :)
ATB,
Mark.
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set()
2020-12-14 17:24 ` Eduardo Habkost
@ 2020-12-15 14:24 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-15 14:24 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Matthew Rosato, Paul Durrant, Mark Cave-Ayland, qemu-devel,
Stefano Stabellini, qemu-block, Stefan Berger, David Hildenbrand,
Markus Armbruster, Halil Pasic, Christian Borntraeger,
Anthony Perard, Marc-André Lureau,
Philippe Mathieu-Daudé, Artyom Tarasenko, Thomas Huth,
Alex Williamson, xen-devel, John Snow, Richard Henderson,
Kevin Wolf, Daniel P. Berrange, Cornelia Huck, qemu-s390x,
Max Reitz, Paolo Bonzini, Stefan Berger
On Mon, 14 Dec 2020 12:24:18 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> On Mon, Dec 14, 2020 at 03:55:30PM +0100, Igor Mammedov wrote:
> > On Fri, 11 Dec 2020 17:05:20 -0500
> > Eduardo Habkost <ehabkost@redhat.com> wrote:
> >
> > > Every single qdev property setter function manually checks
> > > dev->realized. We can just check dev->realized inside
> > > qdev_property_set() instead.
> > >
> > > The check is being added as a separate function
> > > (qdev_prop_allow_set()) because it will become a callback later.
> >
> > is callback added within this series?
> > and I'd add here what's the purpose of it.
>
> It will be added in part 2 of the series. See v3:
> https://lore.kernel.org/qemu-devel/20201112214350.872250-35-ehabkost@redhat.com/
>
> I don't know what else I could say about its purpose, in addition
> to what I wrote above, and the comment below[1].
>
> If you are just curious about the callback and confused because
> it is not anywhere in this series, I can just remove the
> paragraph above from the commit message. Would that be enough?
lets remove it for now to avoid confusion
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
>
> >
> [...]
> > > +/* returns: true if property is allowed to be set, false otherwise */
>
> [1] ^^^
>
> > > +static bool qdev_prop_allow_set(Object *obj, const char *name,
> > > + Error **errp)
> > > +{
> > > + DeviceState *dev = DEVICE(obj);
> > > +
> > > + if (dev->realized) {
> > > + qdev_prop_set_after_realize(dev, name, errp);
> > > + return false;
> > > + }
> > > + return true;
> > > +}
> > > +
>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 25/32] qdev: Make qdev_class_add_property() more flexible
2020-12-14 18:28 ` Eduardo Habkost
@ 2020-12-15 14:25 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-15 14:25 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Mon, 14 Dec 2020 13:28:10 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> On Mon, Dec 14, 2020 at 04:00:59PM +0100, Igor Mammedov wrote:
> > On Fri, 11 Dec 2020 17:05:22 -0500
> > Eduardo Habkost <ehabkost@redhat.com> wrote:
> >
> > > Support Property.set_default and PropertyInfo.description even if
> > > PropertyInfo.create is set.
> > >
> > > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> > > ---
> > > Changes v1 -> v2:
> > > * Patch redone after changes in the previous patches in the
> > > series
> > > ---
> > > Cc: Paolo Bonzini <pbonzini@redhat.com>
> > > Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> > > Cc: Eduardo Habkost <ehabkost@redhat.com>
> > > Cc: qemu-devel@nongnu.org
> > > ---
> > > hw/core/qdev-properties.c | 17 +++++++++--------
> > > 1 file changed, 9 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> > > index 3bb05e7d0d..fcda0c8f4b 100644
> > > --- a/hw/core/qdev-properties.c
> > > +++ b/hw/core/qdev-properties.c
> > > @@ -863,24 +863,25 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
> > > Property *prop)
> > > {
> > > ObjectClass *oc = OBJECT_CLASS(klass);
> > > + ObjectProperty *op;
> > >
> > > if (prop->info->create) {
> > > - prop->info->create(oc, name, prop);
> > > + op = prop->info->create(oc, name, prop);
> > > } else {
> > > - ObjectProperty *op;
> > > -
> > > op = object_class_property_add(oc,
> > > name, prop->info->name,
> > > field_prop_getter(prop->info),
> > > field_prop_setter(prop->info),
> > > prop->info->release,
> > > prop);
> > > - if (prop->set_default) {
> > > - prop->info->set_default_value(op, prop);
> > > - }
> > > }
> > > - object_class_property_set_description(oc, name,
> > > - prop->info->description);
> > > + if (prop->set_default) {
> > > + prop->info->set_default_value(op, prop);
> > > + }
> >
> > > + if (prop->info->description) {
> > before that, null description wasn't allow, why relax rule now?
>
> NULL description was already allowed before, because
> object_class_property_set_description(..., NULL) works.
>
> This means the conditional I've added above is completely
> unnecessary. I will fix this in the next version. Thanks!
ok, either way
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
>
> >
> > > + object_class_property_set_description(oc, name,
> > > + prop->info->description);
> > > + }
> > > }
> > >
> > > /**
> >
>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 26/32] qdev: Separate generic and device-specific property registration
2020-12-11 22:05 ` [PATCH v4 26/32] qdev: Separate generic and device-specific property registration Eduardo Habkost
@ 2020-12-15 14:33 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-15 14:33 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, Philippe Mathieu-Daudé,
qemu-devel, Markus Armbruster, Marc-André Lureau,
Paolo Bonzini, John Snow, Stefan Berger
On Fri, 11 Dec 2020 17:05:23 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> qdev_class_add_property() and qdev_property_add_static() will
> have code that's specific for device types.
>
> object_class_property_add_field_static() and
> object_property_add_field() will be generic and part of the QOM
> field property API. Note that the new functions have a `name`
> parameter because the plan is to eventually get rid of the
> Property.name field.
>
> The declarations for the new functions are being added to
> qdev-properties-internal.h, but they will be moved to a QOM
> header later.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> ---
> Changes v2 -> v3:
> * Re-added array-based array registration function, named
> as object_class_add_field_properties()
> * Renamed object_class_property_add_field() to
> object_class_property_add_field_static(), to indicate that
> the function expect the Property argument to have static life
> time.
> * Keep all new functions as internal API by now,
> until we decide what's going to be the preferred API for
> registering class field properties.
>
> Changes v1 -> v2:
> * Patch redone after changes in previous patches in the series
> * Rename new functions to object*_property_add_field()
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> hw/core/qdev-prop-internal.h | 42 ++++++++++++++++++++++++++++++++++++
> hw/core/qdev-properties.c | 37 ++++++++++++++++++++++++-------
> 2 files changed, 71 insertions(+), 8 deletions(-)
>
> diff --git a/hw/core/qdev-prop-internal.h b/hw/core/qdev-prop-internal.h
> index d7b77844fe..6f17ddf271 100644
> --- a/hw/core/qdev-prop-internal.h
> +++ b/hw/core/qdev-prop-internal.h
> @@ -25,4 +25,46 @@ void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
> void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp);
>
> +/**
> + * object_property_add_field: Add a field property to an object instance
> + * @obj: object instance
> + * @name: property name
> + * @prop: property definition
> + *
> + * This function should not be used in new code. Please add class properties
> + * instead, using object_class_add_field().
> + */
> +ObjectProperty *
> +object_property_add_field(Object *obj, const char *name,
> + Property *prop);
> +
> +/**
> + * object_class_property_add_field_static: Add a field property to object class
> + * @oc: object class
> + * @name: property name
> + * @prop: property definition
> + *
> + * Add a field property to an object class. A field property is
> + * a property that will change a field at a specific offset of the
> + * object instance struct.
> + *
> + * *@prop must have static life time.
> + */
> +ObjectProperty *
> +object_class_property_add_field_static(ObjectClass *oc, const char *name,
> + Property *prop);
> +
> +/**
> + * object_class_add_field_properties: Add field properties from array to a class
> + * @oc: object class
> + * @props: array of property definitions
> + *
> + * Register an array of field properties to a class, using
> + * object_class_property_add_field_static() for each array element.
> + *
> + * The array at @props must end with DEFINE_PROP_END_OF_LIST(), and
> + * must have static life time.
> + */
> +void object_class_add_field_properties(ObjectClass *oc, Property *props);
since it uses object_class_property_add_field_static() may be add _static suffix here as well?
> +
> #endif
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index fcda0c8f4b..8436b60ec4 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -835,20 +835,21 @@ const PropertyInfo qdev_prop_link = {
> .create = create_link_property,
> };
>
> -void qdev_property_add_static(DeviceState *dev, Property *prop)
> +ObjectProperty *
> +object_property_add_field(Object *obj, const char *name,
> + Property *prop)
> {
> - Object *obj = OBJECT(dev);
> ObjectProperty *op;
>
> assert(!prop->info->create);
>
> - op = object_property_add(obj, prop->name, prop->info->name,
> + op = object_property_add(obj, name, prop->info->name,
> field_prop_getter(prop->info),
> field_prop_setter(prop->info),
> prop->info->release,
> prop);
>
> - object_property_set_description(obj, prop->name,
> + object_property_set_description(obj, name,
> prop->info->description);
>
> if (prop->set_default) {
> @@ -857,12 +858,14 @@ void qdev_property_add_static(DeviceState *dev, Property *prop)
> op->init(obj, op);
> }
> }
> +
> + return op;
> }
>
> -static void qdev_class_add_property(DeviceClass *klass, const char *name,
> - Property *prop)
> +ObjectProperty *
> +object_class_property_add_field_static(ObjectClass *oc, const char *name,
> + Property *prop)
> {
> - ObjectClass *oc = OBJECT_CLASS(klass);
> ObjectProperty *op;
>
> if (prop->info->create) {
> @@ -882,6 +885,22 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
> object_class_property_set_description(oc, name,
> prop->info->description);
> }
> + return op;
> +}
> +
> +void object_class_add_field_properties(ObjectClass *oc, Property *props)
> +{
> + Property *prop;
> +
> + for (prop = props; prop && prop->name; prop++) {
> + object_class_property_add_field_static(oc, prop->name, prop);
> + }
> +}
> +
> +
> +void qdev_property_add_static(DeviceState *dev, Property *prop)
> +{
> + object_property_add_field(OBJECT(dev), prop->name, prop);
> }
>
> /**
> @@ -932,13 +951,15 @@ static void qdev_class_add_legacy_property(DeviceClass *dc, Property *prop)
>
> void device_class_set_props(DeviceClass *dc, Property *props)
> {
> + ObjectClass *oc = OBJECT_CLASS(dc);
> Property *prop;
>
> dc->props_ = props;
> for (prop = props; prop && prop->name; prop++) {
> qdev_class_add_legacy_property(dc, prop);
> - qdev_class_add_property(dc, prop->name, prop);
> }
> +
> + object_class_add_field_properties(oc, props);
> }
>
> void qdev_alias_all_properties(DeviceState *target, Object *source)
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 27/32] qdev: Rename qdev_propinfo_* to field_prop_*
2020-12-11 22:05 ` [PATCH v4 27/32] qdev: Rename qdev_propinfo_* to field_prop_* Eduardo Habkost
@ 2020-12-15 14:35 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-15 14:35 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:24 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> These functions will be moved to be part of QOM, so rename them.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> Changes v2:
> * Rename to field_prop_* instead of object_propinfo_*
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> hw/core/qdev-prop-internal.h | 28 +++++++--------
> hw/core/qdev-properties-system.c | 48 ++++++++++++-------------
> hw/core/qdev-properties.c | 62 ++++++++++++++++----------------
> 3 files changed, 69 insertions(+), 69 deletions(-)
>
> diff --git a/hw/core/qdev-prop-internal.h b/hw/core/qdev-prop-internal.h
> index 6f17ddf271..740a5e530b 100644
> --- a/hw/core/qdev-prop-internal.h
> +++ b/hw/core/qdev-prop-internal.h
> @@ -8,22 +8,22 @@
> #ifndef HW_CORE_QDEV_PROP_INTERNAL_H
> #define HW_CORE_QDEV_PROP_INTERNAL_H
>
> -void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
> - void *opaque, Error **errp);
> -void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
> - void *opaque, Error **errp);
> +void field_prop_get_enum(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp);
> +void field_prop_set_enum(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp);
>
> -void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
> - const Property *prop);
> -void qdev_propinfo_set_default_value_int(ObjectProperty *op,
> - const Property *prop);
> -void qdev_propinfo_set_default_value_uint(ObjectProperty *op,
> - const Property *prop);
> +void field_prop_set_default_value_enum(ObjectProperty *op,
> + const Property *prop);
> +void field_prop_set_default_value_int(ObjectProperty *op,
> + const Property *prop);
> +void field_prop_set_default_value_uint(ObjectProperty *op,
> + const Property *prop);
>
> -void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
> - void *opaque, Error **errp);
> -void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
> - void *opaque, Error **errp);
> +void field_prop_get_int32(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp);
> +void field_prop_get_size32(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp);
>
> /**
> * object_property_add_field: Add a field property to an object instance
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index f31aea3de1..590c5f3d97 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -537,9 +537,9 @@ QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int));
> const PropertyInfo qdev_prop_losttickpolicy = {
> .name = "LostTickPolicy",
> .enum_table = &LostTickPolicy_lookup,
> - .get = qdev_propinfo_get_enum,
> - .set = qdev_propinfo_set_enum,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .get = field_prop_get_enum,
> + .set = field_prop_set_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* --- blocksize --- */
> @@ -568,9 +568,9 @@ const PropertyInfo qdev_prop_blocksize = {
> .name = "size",
> .description = "A power of two between " MIN_BLOCK_SIZE_STR
> " and " MAX_BLOCK_SIZE_STR,
> - .get = qdev_propinfo_get_size32,
> + .get = field_prop_get_size32,
> .set = set_blocksize,
> - .set_default_value = qdev_propinfo_set_default_value_uint,
> + .set_default_value = field_prop_set_default_value_uint,
> };
>
> /* --- Block device error handling policy --- */
> @@ -582,9 +582,9 @@ const PropertyInfo qdev_prop_blockdev_on_error = {
> .description = "Error handling policy, "
> "report/ignore/enospc/stop/auto",
> .enum_table = &BlockdevOnError_lookup,
> - .get = qdev_propinfo_get_enum,
> - .set = qdev_propinfo_set_enum,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .get = field_prop_get_enum,
> + .set = field_prop_set_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* --- BIOS CHS translation */
> @@ -596,9 +596,9 @@ const PropertyInfo qdev_prop_bios_chs_trans = {
> .description = "Logical CHS translation algorithm, "
> "auto/none/lba/large/rechs",
> .enum_table = &BiosAtaTranslation_lookup,
> - .get = qdev_propinfo_get_enum,
> - .set = qdev_propinfo_set_enum,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .get = field_prop_get_enum,
> + .set = field_prop_set_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* --- FDC default drive types */
> @@ -608,9 +608,9 @@ const PropertyInfo qdev_prop_fdc_drive_type = {
> .description = "FDC drive type, "
> "144/288/120/none/auto",
> .enum_table = &FloppyDriveType_lookup,
> - .get = qdev_propinfo_get_enum,
> - .set = qdev_propinfo_set_enum,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .get = field_prop_get_enum,
> + .set = field_prop_set_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* --- MultiFDCompression --- */
> @@ -620,9 +620,9 @@ const PropertyInfo qdev_prop_multifd_compression = {
> .description = "multifd_compression values, "
> "none/zlib/zstd",
> .enum_table = &MultiFDCompression_lookup,
> - .get = qdev_propinfo_get_enum,
> - .set = qdev_propinfo_set_enum,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .get = field_prop_get_enum,
> + .set = field_prop_set_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* --- Reserved Region --- */
> @@ -766,9 +766,9 @@ const PropertyInfo qdev_prop_pci_devfn = {
> .name = "int32",
> .description = "Slot and optional function number, example: 06.0 or 06",
> .print = print_pci_devfn,
> - .get = qdev_propinfo_get_int32,
> + .get = field_prop_get_int32,
> .set = set_pci_devfn,
> - .set_default_value = qdev_propinfo_set_default_value_int,
> + .set_default_value = field_prop_set_default_value_int,
> };
>
> /* --- pci host address --- */
> @@ -882,9 +882,9 @@ const PropertyInfo qdev_prop_off_auto_pcibar = {
> .name = "OffAutoPCIBAR",
> .description = "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
> .enum_table = &OffAutoPCIBAR_lookup,
> - .get = qdev_propinfo_get_enum,
> - .set = qdev_propinfo_set_enum,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .get = field_prop_get_enum,
> + .set = field_prop_set_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* --- PCIELinkSpeed 2_5/5/8/16 -- */
> @@ -954,7 +954,7 @@ const PropertyInfo qdev_prop_pcie_link_speed = {
> .enum_table = &PCIELinkSpeed_lookup,
> .get = get_prop_pcielinkspeed,
> .set = set_prop_pcielinkspeed,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* --- PCIELinkWidth 1/2/4/8/12/16/32 -- */
> @@ -1042,7 +1042,7 @@ const PropertyInfo qdev_prop_pcie_link_width = {
> .enum_table = &PCIELinkWidth_lookup,
> .get = get_prop_pcielinkwidth,
> .set = set_prop_pcielinkwidth,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* --- UUID --- */
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index 8436b60ec4..d2f565f552 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -96,8 +96,8 @@ static ObjectPropertyAccessor *field_prop_setter(const PropertyInfo *info)
> return info->set ? field_prop_set : NULL;
> }
>
> -void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
> - void *opaque, Error **errp)
> +void field_prop_get_enum(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp)
> {
> Property *prop = opaque;
> int *ptr = qdev_get_prop_ptr(obj, prop);
> @@ -105,8 +105,8 @@ void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
> visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
> }
>
> -void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
> - void *opaque, Error **errp)
> +void field_prop_set_enum(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp)
> {
> Property *prop = opaque;
> int *ptr = qdev_get_prop_ptr(obj, prop);
> @@ -114,8 +114,8 @@ void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
> visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
> }
>
> -void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
> - const Property *prop)
> +void field_prop_set_default_value_enum(ObjectProperty *op,
> + const Property *prop)
> {
> object_property_set_default_str(op,
> qapi_enum_lookup(prop->info->enum_table, prop->defval.i));
> @@ -123,9 +123,9 @@ void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
>
> const PropertyInfo qdev_prop_enum = {
> .name = "enum",
> - .get = qdev_propinfo_get_enum,
> - .set = qdev_propinfo_set_enum,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .get = field_prop_get_enum,
> + .set = field_prop_set_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* Bit */
> @@ -278,14 +278,14 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
> visit_type_uint8(v, name, ptr, errp);
> }
>
> -void qdev_propinfo_set_default_value_int(ObjectProperty *op,
> - const Property *prop)
> +void field_prop_set_default_value_int(ObjectProperty *op,
> + const Property *prop)
> {
> object_property_set_default_int(op, prop->defval.i);
> }
>
> -void qdev_propinfo_set_default_value_uint(ObjectProperty *op,
> - const Property *prop)
> +void field_prop_set_default_value_uint(ObjectProperty *op,
> + const Property *prop)
> {
> object_property_set_default_uint(op, prop->defval.u);
> }
> @@ -294,7 +294,7 @@ const PropertyInfo qdev_prop_uint8 = {
> .name = "uint8",
> .get = get_uint8,
> .set = set_uint8,
> - .set_default_value = qdev_propinfo_set_default_value_uint,
> + .set_default_value = field_prop_set_default_value_uint,
> };
>
> /* --- 16bit integer --- */
> @@ -321,7 +321,7 @@ const PropertyInfo qdev_prop_uint16 = {
> .name = "uint16",
> .get = get_uint16,
> .set = set_uint16,
> - .set_default_value = qdev_propinfo_set_default_value_uint,
> + .set_default_value = field_prop_set_default_value_uint,
> };
>
> /* --- 32bit integer --- */
> @@ -344,8 +344,8 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
> visit_type_uint32(v, name, ptr, errp);
> }
>
> -void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
> - void *opaque, Error **errp)
> +void field_prop_get_int32(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp)
> {
> Property *prop = opaque;
> int32_t *ptr = qdev_get_prop_ptr(obj, prop);
> @@ -366,14 +366,14 @@ const PropertyInfo qdev_prop_uint32 = {
> .name = "uint32",
> .get = get_uint32,
> .set = set_uint32,
> - .set_default_value = qdev_propinfo_set_default_value_uint,
> + .set_default_value = field_prop_set_default_value_uint,
> };
>
> const PropertyInfo qdev_prop_int32 = {
> .name = "int32",
> - .get = qdev_propinfo_get_int32,
> + .get = field_prop_get_int32,
> .set = set_int32,
> - .set_default_value = qdev_propinfo_set_default_value_int,
> + .set_default_value = field_prop_set_default_value_int,
> };
>
> /* --- 64bit integer --- */
> @@ -418,14 +418,14 @@ const PropertyInfo qdev_prop_uint64 = {
> .name = "uint64",
> .get = get_uint64,
> .set = set_uint64,
> - .set_default_value = qdev_propinfo_set_default_value_uint,
> + .set_default_value = field_prop_set_default_value_uint,
> };
>
> const PropertyInfo qdev_prop_int64 = {
> .name = "int64",
> .get = get_int64,
> .set = set_int64,
> - .set_default_value = qdev_propinfo_set_default_value_int,
> + .set_default_value = field_prop_set_default_value_int,
> };
>
> /* --- string --- */
> @@ -477,15 +477,15 @@ const PropertyInfo qdev_prop_on_off_auto = {
> .name = "OnOffAuto",
> .description = "on/off/auto",
> .enum_table = &OnOffAuto_lookup,
> - .get = qdev_propinfo_get_enum,
> - .set = qdev_propinfo_set_enum,
> - .set_default_value = qdev_propinfo_set_default_value_enum,
> + .get = field_prop_get_enum,
> + .set = field_prop_set_enum,
> + .set_default_value = field_prop_set_default_value_enum,
> };
>
> /* --- 32bit unsigned int 'size' type --- */
>
> -void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
> - void *opaque, Error **errp)
> +void field_prop_get_size32(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp)
> {
> Property *prop = opaque;
> uint32_t *ptr = qdev_get_prop_ptr(obj, prop);
> @@ -518,9 +518,9 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
>
> const PropertyInfo qdev_prop_size32 = {
> .name = "size",
> - .get = qdev_propinfo_get_size32,
> + .get = field_prop_get_size32,
> .set = set_size32,
> - .set_default_value = qdev_propinfo_set_default_value_uint,
> + .set_default_value = field_prop_set_default_value_uint,
> };
>
> /* --- support for array properties --- */
> @@ -617,7 +617,7 @@ const PropertyInfo qdev_prop_arraylen = {
> .name = "uint32",
> .get = get_uint32,
> .set = set_prop_arraylen,
> - .set_default_value = qdev_propinfo_set_default_value_uint,
> + .set_default_value = field_prop_set_default_value_uint,
> };
>
> /* --- public helpers --- */
> @@ -816,7 +816,7 @@ const PropertyInfo qdev_prop_size = {
> .name = "size",
> .get = get_size,
> .set = set_size,
> - .set_default_value = qdev_propinfo_set_default_value_uint,
> + .set_default_value = field_prop_set_default_value_uint,
> };
>
> /* --- object link property --- */
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 28/32] qdev: Move qdev_prop_tpm declaration to tpm_prop.h
2020-12-11 22:05 ` [PATCH v4 28/32] qdev: Move qdev_prop_tpm declaration to tpm_prop.h Eduardo Habkost
@ 2020-12-15 14:36 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-15 14:36 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, Stefan Berger, John Snow,
qemu-devel, Markus Armbruster, Paolo Bonzini,
Marc-André Lureau, Philippe Mathieu-Daudé,
Stefan Berger
On Fri, 11 Dec 2020 17:05:25 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Move the variable declaration close to the macro that uses it.
>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> Cc: Stefan Berger <stefanb@linux.vnet.ibm.com>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> hw/tpm/tpm_prop.h | 2 ++
> include/hw/qdev-properties.h | 1 -
> 2 files changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/hw/tpm/tpm_prop.h b/hw/tpm/tpm_prop.h
> index d19e40c112..bbd4225d66 100644
> --- a/hw/tpm/tpm_prop.h
> +++ b/hw/tpm/tpm_prop.h
> @@ -25,6 +25,8 @@
> #include "sysemu/tpm_backend.h"
> #include "hw/qdev-properties.h"
>
> +extern const PropertyInfo qdev_prop_tpm;
> +
> #define DEFINE_PROP_TPMBE(_n, _s, _f) \
> DEFINE_PROP(_n, _s, _f, qdev_prop_tpm, TPMBackend *)
>
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index aae882317a..68e544708b 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -56,7 +56,6 @@ extern const PropertyInfo qdev_prop_uint64;
> extern const PropertyInfo qdev_prop_int64;
> extern const PropertyInfo qdev_prop_size;
> extern const PropertyInfo qdev_prop_string;
> -extern const PropertyInfo qdev_prop_tpm;
> extern const PropertyInfo qdev_prop_on_off_auto;
> extern const PropertyInfo qdev_prop_size32;
> extern const PropertyInfo qdev_prop_arraylen;
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property
2020-12-14 17:30 ` Eduardo Habkost
@ 2020-12-15 14:39 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-15 14:39 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Mark Cave-Ayland,
qemu-devel, Markus Armbruster, Paolo Bonzini,
Marc-André Lureau, Philippe Mathieu-Daudé,
Artyom Tarasenko, Stefan Berger
On Mon, 14 Dec 2020 12:30:13 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> On Mon, Dec 14, 2020 at 03:42:48PM +0100, Igor Mammedov wrote:
> > On Fri, 11 Dec 2020 17:05:14 -0500
> > Eduardo Habkost <ehabkost@redhat.com> wrote:
> >
> > > Use the DEFINE_PROP macro (which will set extra fields in the
> > > struct) instead of initializing a Property struct manually.
> > >
> > > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> > > ---
> > > This is a new patch added in v2 of the series
> > > ---
> > > Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> > > Cc: Artyom Tarasenko <atar4qemu@gmail.com>
> > > Cc: qemu-devel@nongnu.org
> > > ---
> > > target/sparc/cpu.c | 3 ++-
> > > 1 file changed, 2 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> > > index 6a3299041f..92534bcd18 100644
> > > --- a/target/sparc/cpu.c
> > > +++ b/target/sparc/cpu.c
> > > @@ -848,7 +848,8 @@ static Property sparc_cpu_properties[] = {
> > > qdev_prop_uint64, target_ulong),
> > > DEFINE_PROP_UINT32("fpu-version", SPARCCPU, env.def.fpu_version, 0),
> > > DEFINE_PROP_UINT32("mmu-version", SPARCCPU, env.def.mmu_version, 0),
> > > - { .name = "nwindows", .info = &qdev_prop_nwindows },
> > > + DEFINE_PROP("nwindows", SPARCCPU, env.def.nwindows,
> > ^^^^
> > stray whitespace
>
> I was trying to keep it aligned to the other entries (not visible in diff
> context), but I agree it's just confusing. I will fix this while committing.
>
With that
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h
2020-12-11 22:05 ` [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h Eduardo Habkost
2020-12-14 14:25 ` Igor Mammedov
@ 2020-12-15 14:40 ` Igor Mammedov
1 sibling, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-15 14:40 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, Philippe Mathieu-Daudé,
qemu-devel, Markus Armbruster, Marc-André Lureau,
Paolo Bonzini, John Snow, Stefan Berger
On Fri, 11 Dec 2020 17:05:12 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> Move the property types and property macros implemented in
> qdev-properties-system.c to a new qdev-properties-system.h
> header.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> Changes v1 -> v2:
> * Move UUID property type too, as it was moved to
> qdev-properties-system.c in the previous patch
> ---
> audio/audio.h | 1 +
> include/hw/block/block.h | 1 +
> include/hw/qdev-properties-system.h | 84 +++++++++++++++++++++++++++++
> include/hw/qdev-properties.h | 75 --------------------------
> include/net/net.h | 1 +
> hw/acpi/vmgenid.c | 1 +
> hw/arm/pxa2xx.c | 1 +
> hw/arm/strongarm.c | 1 +
> hw/block/fdc.c | 1 +
> hw/block/m25p80.c | 1 +
> hw/block/nand.c | 1 +
> hw/block/onenand.c | 1 +
> hw/block/pflash_cfi01.c | 1 +
> hw/block/pflash_cfi02.c | 1 +
> hw/block/vhost-user-blk.c | 1 +
> hw/char/avr_usart.c | 1 +
> hw/char/bcm2835_aux.c | 1 +
> hw/char/cadence_uart.c | 1 +
> hw/char/cmsdk-apb-uart.c | 1 +
> hw/char/debugcon.c | 1 +
> hw/char/digic-uart.c | 1 +
> hw/char/escc.c | 1 +
> hw/char/etraxfs_ser.c | 1 +
> hw/char/exynos4210_uart.c | 1 +
> hw/char/grlib_apbuart.c | 1 +
> hw/char/ibex_uart.c | 1 +
> hw/char/imx_serial.c | 1 +
> hw/char/ipoctal232.c | 1 +
> hw/char/lm32_juart.c | 1 +
> hw/char/lm32_uart.c | 1 +
> hw/char/mcf_uart.c | 1 +
> hw/char/milkymist-uart.c | 1 +
> hw/char/nrf51_uart.c | 1 +
> hw/char/parallel.c | 1 +
> hw/char/pl011.c | 1 +
> hw/char/renesas_sci.c | 1 +
> hw/char/sclpconsole-lm.c | 1 +
> hw/char/sclpconsole.c | 1 +
> hw/char/serial-pci-multi.c | 1 +
> hw/char/serial.c | 1 +
> hw/char/spapr_vty.c | 1 +
> hw/char/stm32f2xx_usart.c | 1 +
> hw/char/terminal3270.c | 1 +
> hw/char/virtio-console.c | 1 +
> hw/char/xilinx_uartlite.c | 1 +
> hw/core/qdev-properties-system.c | 1 +
> hw/hyperv/vmbus.c | 1 +
> hw/i386/kvm/i8254.c | 1 +
> hw/ide/qdev.c | 1 +
> hw/ipmi/ipmi_bmc_extern.c | 1 +
> hw/ipmi/ipmi_bmc_sim.c | 1 +
> hw/misc/allwinner-sid.c | 1 +
> hw/misc/ivshmem.c | 1 +
> hw/misc/mac_via.c | 1 +
> hw/misc/sifive_u_otp.c | 1 +
> hw/net/rocker/rocker.c | 1 +
> hw/nvram/eeprom_at24c.c | 1 +
> hw/nvram/spapr_nvram.c | 1 +
> hw/pci-bridge/gen_pcie_root_port.c | 1 +
> hw/pci/pci.c | 1 +
> hw/ppc/pnv_pnor.c | 1 +
> hw/rdma/vmw/pvrdma_main.c | 1 +
> hw/rtc/mc146818rtc.c | 1 +
> hw/scsi/scsi-disk.c | 1 +
> hw/scsi/scsi-generic.c | 1 +
> hw/scsi/vhost-user-scsi.c | 1 +
> hw/sd/sd.c | 1 +
> hw/usb/ccid-card-passthru.c | 1 +
> hw/usb/dev-serial.c | 1 +
> hw/usb/redirect.c | 1 +
> hw/vfio/pci.c | 1 +
> hw/virtio/vhost-user-fs.c | 1 +
> hw/virtio/vhost-user-vsock.c | 1 +
> hw/virtio/virtio-iommu-pci.c | 1 +
> hw/xen/xen_pt.c | 1 +
> migration/migration.c | 1 +
> 76 files changed, 158 insertions(+), 75 deletions(-)
> create mode 100644 include/hw/qdev-properties-system.h
>
> diff --git a/audio/audio.h b/audio/audio.h
> index b883ebfb1f..21fe3226ae 100644
> --- a/audio/audio.h
> +++ b/audio/audio.h
> @@ -28,6 +28,7 @@
> #include "qemu/queue.h"
> #include "qapi/qapi-types-audio.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> typedef void (*audio_callback_fn) (void *opaque, int avail);
>
> diff --git a/include/hw/block/block.h b/include/hw/block/block.h
> index 1e8b6253dd..c172cbe65f 100644
> --- a/include/hw/block/block.h
> +++ b/include/hw/block/block.h
> @@ -13,6 +13,7 @@
>
> #include "exec/hwaddr.h"
> #include "qapi/qapi-types-block-core.h"
> +#include "hw/qdev-properties-system.h"
>
> /* Configuration */
>
> diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properties-system.h
> new file mode 100644
> index 0000000000..29529dc999
> --- /dev/null
> +++ b/include/hw/qdev-properties-system.h
> @@ -0,0 +1,84 @@
> +#ifndef HW_QDEV_PROPERTIES_SYSTEM_H
> +#define HW_QDEV_PROPERTIES_SYSTEM_H
> +
> +#include "hw/qdev-properties.h"
> +
> +extern const PropertyInfo qdev_prop_chr;
> +extern const PropertyInfo qdev_prop_macaddr;
> +extern const PropertyInfo qdev_prop_reserved_region;
> +extern const PropertyInfo qdev_prop_multifd_compression;
> +extern const PropertyInfo qdev_prop_losttickpolicy;
> +extern const PropertyInfo qdev_prop_blockdev_on_error;
> +extern const PropertyInfo qdev_prop_bios_chs_trans;
> +extern const PropertyInfo qdev_prop_fdc_drive_type;
> +extern const PropertyInfo qdev_prop_drive;
> +extern const PropertyInfo qdev_prop_drive_iothread;
> +extern const PropertyInfo qdev_prop_netdev;
> +extern const PropertyInfo qdev_prop_pci_devfn;
> +extern const PropertyInfo qdev_prop_blocksize;
> +extern const PropertyInfo qdev_prop_pci_host_devaddr;
> +extern const PropertyInfo qdev_prop_uuid;
> +extern const PropertyInfo qdev_prop_audiodev;
> +extern const PropertyInfo qdev_prop_off_auto_pcibar;
> +extern const PropertyInfo qdev_prop_pcie_link_speed;
> +extern const PropertyInfo qdev_prop_pcie_link_width;
> +
> +#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t)
> +
> +#define DEFINE_PROP_CHR(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharBackend)
> +#define DEFINE_PROP_NETDEV(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NICPeers)
> +#define DEFINE_PROP_DRIVE(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockBackend *)
> +#define DEFINE_PROP_DRIVE_IOTHREAD(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_drive_iothread, BlockBackend *)
> +#define DEFINE_PROP_MACADDR(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
> +#define DEFINE_PROP_RESERVED_REGION(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_reserved_region, ReservedRegion)
> +#define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \
> + MultiFDCompression)
> +#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
> + LostTickPolicy)
> +#define DEFINE_PROP_BLOCKDEV_ON_ERROR(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_blockdev_on_error, \
> + BlockdevOnError)
> +#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int)
> +#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f) \
> + DEFINE_PROP_UNSIGNED(_n, _s, _f, 0, qdev_prop_blocksize, uint32_t)
> +#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress)
> +#define DEFINE_PROP_OFF_AUTO_PCIBAR(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_off_auto_pcibar, \
> + OffAutoPCIBAR)
> +#define DEFINE_PROP_PCIE_LINK_SPEED(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_speed, \
> + PCIExpLinkSpeed)
> +#define DEFINE_PROP_PCIE_LINK_WIDTH(_n, _s, _f, _d) \
> + DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_width, \
> + PCIExpLinkWidth)
> +
> +#define DEFINE_PROP_UUID(_name, _state, _field) { \
> + .name = (_name), \
> + .info = &qdev_prop_uuid, \
> + .offset = offsetof(_state, _field) \
> + + type_check(QemuUUID, typeof_field(_state, _field)), \
> + .set_default = true, \
> + }
> +#define DEFINE_PROP_AUDIODEV(_n, _s, _f) \
> + DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, QEMUSoundCard)
> +
> +#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) { \
> + .name = (_name), \
> + .info = &qdev_prop_uuid, \
> + .offset = offsetof(_state, _field) \
> + + type_check(QemuUUID, typeof_field(_state, _field)), \
> + }
> +
> +
> +#endif
> diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
> index 530286e869..d35d4aae84 100644
> --- a/include/hw/qdev-properties.h
> +++ b/include/hw/qdev-properties.h
> @@ -55,30 +55,11 @@ extern const PropertyInfo qdev_prop_uint64;
> extern const PropertyInfo qdev_prop_int64;
> extern const PropertyInfo qdev_prop_size;
> extern const PropertyInfo qdev_prop_string;
> -extern const PropertyInfo qdev_prop_chr;
> extern const PropertyInfo qdev_prop_tpm;
> -extern const PropertyInfo qdev_prop_macaddr;
> -extern const PropertyInfo qdev_prop_reserved_region;
> extern const PropertyInfo qdev_prop_on_off_auto;
> -extern const PropertyInfo qdev_prop_multifd_compression;
> -extern const PropertyInfo qdev_prop_losttickpolicy;
> -extern const PropertyInfo qdev_prop_blockdev_on_error;
> -extern const PropertyInfo qdev_prop_bios_chs_trans;
> -extern const PropertyInfo qdev_prop_fdc_drive_type;
> -extern const PropertyInfo qdev_prop_drive;
> -extern const PropertyInfo qdev_prop_drive_iothread;
> -extern const PropertyInfo qdev_prop_netdev;
> -extern const PropertyInfo qdev_prop_pci_devfn;
> extern const PropertyInfo qdev_prop_size32;
> -extern const PropertyInfo qdev_prop_blocksize;
> -extern const PropertyInfo qdev_prop_pci_host_devaddr;
> -extern const PropertyInfo qdev_prop_uuid;
> extern const PropertyInfo qdev_prop_arraylen;
> -extern const PropertyInfo qdev_prop_audiodev;
> extern const PropertyInfo qdev_prop_link;
> -extern const PropertyInfo qdev_prop_off_auto_pcibar;
> -extern const PropertyInfo qdev_prop_pcie_link_speed;
> -extern const PropertyInfo qdev_prop_pcie_link_width;
>
> #define DEFINE_PROP(_name, _state, _field, _prop, _type) { \
> .name = (_name), \
> @@ -209,68 +190,12 @@ extern const PropertyInfo qdev_prop_pcie_link_width;
> DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_int64, int64_t)
> #define DEFINE_PROP_SIZE(_n, _s, _f, _d) \
> DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size, uint64_t)
> -#define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t)
> -
> -#define DEFINE_PROP_CHR(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_chr, CharBackend)
> #define DEFINE_PROP_STRING(_n, _s, _f) \
> DEFINE_PROP(_n, _s, _f, qdev_prop_string, char*)
> -#define DEFINE_PROP_NETDEV(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_netdev, NICPeers)
> -#define DEFINE_PROP_DRIVE(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_drive, BlockBackend *)
> -#define DEFINE_PROP_DRIVE_IOTHREAD(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_drive_iothread, BlockBackend *)
> -#define DEFINE_PROP_MACADDR(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_macaddr, MACAddr)
> -#define DEFINE_PROP_RESERVED_REGION(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_reserved_region, ReservedRegion)
> #define DEFINE_PROP_ON_OFF_AUTO(_n, _s, _f, _d) \
> DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_on_off_auto, OnOffAuto)
> -#define DEFINE_PROP_MULTIFD_COMPRESSION(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_multifd_compression, \
> - MultiFDCompression)
> -#define DEFINE_PROP_LOSTTICKPOLICY(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_losttickpolicy, \
> - LostTickPolicy)
> -#define DEFINE_PROP_BLOCKDEV_ON_ERROR(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_blockdev_on_error, \
> - BlockdevOnError)
> -#define DEFINE_PROP_BIOS_CHS_TRANS(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_bios_chs_trans, int)
> #define DEFINE_PROP_SIZE32(_n, _s, _f, _d) \
> DEFINE_PROP_UNSIGNED(_n, _s, _f, _d, qdev_prop_size32, uint32_t)
> -#define DEFINE_PROP_BLOCKSIZE(_n, _s, _f) \
> - DEFINE_PROP_UNSIGNED(_n, _s, _f, 0, qdev_prop_blocksize, uint32_t)
> -#define DEFINE_PROP_PCI_HOST_DEVADDR(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_pci_host_devaddr, PCIHostDeviceAddress)
> -#define DEFINE_PROP_OFF_AUTO_PCIBAR(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_off_auto_pcibar, \
> - OffAutoPCIBAR)
> -#define DEFINE_PROP_PCIE_LINK_SPEED(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_speed, \
> - PCIExpLinkSpeed)
> -#define DEFINE_PROP_PCIE_LINK_WIDTH(_n, _s, _f, _d) \
> - DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pcie_link_width, \
> - PCIExpLinkWidth)
> -
> -#define DEFINE_PROP_UUID(_name, _state, _field) { \
> - .name = (_name), \
> - .info = &qdev_prop_uuid, \
> - .offset = offsetof(_state, _field) \
> - + type_check(QemuUUID, typeof_field(_state, _field)), \
> - .set_default = true, \
> - }
> -#define DEFINE_PROP_AUDIODEV(_n, _s, _f) \
> - DEFINE_PROP(_n, _s, _f, qdev_prop_audiodev, QEMUSoundCard)
> -
> -#define DEFINE_PROP_UUID_NODEFAULT(_name, _state, _field) { \
> - .name = (_name), \
> - .info = &qdev_prop_uuid, \
> - .offset = offsetof(_state, _field) \
> - + type_check(QemuUUID, typeof_field(_state, _field)), \
> - }
>
> #define DEFINE_PROP_END_OF_LIST() \
> {}
> diff --git a/include/net/net.h b/include/net/net.h
> index 778fc787ca..919facaad2 100644
> --- a/include/net/net.h
> +++ b/include/net/net.h
> @@ -4,6 +4,7 @@
> #include "qemu/queue.h"
> #include "qapi/qapi-types-net.h"
> #include "net/queue.h"
> +#include "hw/qdev-properties-system.h"
>
> #define MAC_FMT "%02X:%02X:%02X:%02X:%02X:%02X"
> #define MAC_ARG(x) ((uint8_t *)(x))[0], ((uint8_t *)(x))[1], \
> diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c
> index 2c8152d508..6c92fdae49 100644
> --- a/hw/acpi/vmgenid.c
> +++ b/hw/acpi/vmgenid.c
> @@ -19,6 +19,7 @@
> #include "hw/acpi/vmgenid.h"
> #include "hw/nvram/fw_cfg.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "sysemu/reset.h"
>
> diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
> index 1a98f3bd5c..fdc4955e95 100644
> --- a/hw/arm/pxa2xx.c
> +++ b/hw/arm/pxa2xx.c
> @@ -21,6 +21,7 @@
> #include "hw/i2c/i2c.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/ssi/ssi.h"
> #include "hw/sd/sd.h"
> #include "chardev/char-fe.h"
> diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c
> index ca7c385f31..c7ca54bcea 100644
> --- a/hw/arm/strongarm.c
> +++ b/hw/arm/strongarm.c
> @@ -33,6 +33,7 @@
> #include "hw/boards.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "strongarm.h"
> diff --git a/hw/block/fdc.c b/hw/block/fdc.c
> index 4c2c35e223..3636874432 100644
> --- a/hw/block/fdc.c
> +++ b/hw/block/fdc.c
> @@ -36,6 +36,7 @@
> #include "hw/irq.h"
> #include "hw/isa/isa.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "hw/block/block.h"
> diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
> index d09a811767..93bd1821ff 100644
> --- a/hw/block/m25p80.c
> +++ b/hw/block/m25p80.c
> @@ -25,6 +25,7 @@
> #include "qemu/units.h"
> #include "sysemu/block-backend.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/ssi/ssi.h"
> #include "migration/vmstate.h"
> #include "qemu/bitops.h"
> diff --git a/hw/block/nand.c b/hw/block/nand.c
> index 1d7a48a2ec..1c098db897 100644
> --- a/hw/block/nand.c
> +++ b/hw/block/nand.c
> @@ -21,6 +21,7 @@
> #include "qemu/osdep.h"
> #include "hw/hw.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/block/flash.h"
> #include "sysemu/block-backend.h"
> #include "migration/vmstate.h"
> diff --git a/hw/block/onenand.c b/hw/block/onenand.c
> index 5ff7be86bb..579a73d7f7 100644
> --- a/hw/block/onenand.c
> +++ b/hw/block/onenand.c
> @@ -24,6 +24,7 @@
> #include "hw/block/flash.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "exec/memory.h"
> #include "hw/sysbus.h"
> diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c
> index daae965860..ccf326793d 100644
> --- a/hw/block/pflash_cfi01.c
> +++ b/hw/block/pflash_cfi01.c
> @@ -40,6 +40,7 @@
> #include "hw/block/block.h"
> #include "hw/block/flash.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "qapi/error.h"
> #include "qemu/error-report.h"
> diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c
> index 1b3d94e047..2ad2f6baea 100644
> --- a/hw/block/pflash_cfi02.c
> +++ b/hw/block/pflash_cfi02.c
> @@ -36,6 +36,7 @@
> #include "hw/block/block.h"
> #include "hw/block/flash.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qapi/error.h"
> #include "qemu/error-report.h"
> #include "qemu/bitmap.h"
> diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
> index 2dd3d93ca0..da4fbf9084 100644
> --- a/hw/block/vhost-user-blk.c
> +++ b/hw/block/vhost-user-blk.c
> @@ -22,6 +22,7 @@
> #include "qemu/cutils.h"
> #include "hw/qdev-core.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/vhost.h"
> #include "hw/virtio/vhost-user-blk.h"
> #include "hw/virtio/virtio.h"
> diff --git a/hw/char/avr_usart.c b/hw/char/avr_usart.c
> index fbe2a112b7..5bcf9db0b7 100644
> --- a/hw/char/avr_usart.c
> +++ b/hw/char/avr_usart.c
> @@ -24,6 +24,7 @@
> #include "qemu/log.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> static int avr_usart_can_receive(void *opaque)
> {
> diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c
> index dade2ab5fd..96410b1ff8 100644
> --- a/hw/char/bcm2835_aux.c
> +++ b/hw/char/bcm2835_aux.c
> @@ -24,6 +24,7 @@
> #include "hw/char/bcm2835_aux.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
> diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
> index e196906c92..c603e14012 100644
> --- a/hw/char/cadence_uart.c
> +++ b/hw/char/cadence_uart.c
> @@ -32,6 +32,7 @@
> #include "hw/char/cadence_uart.h"
> #include "hw/irq.h"
> #include "hw/qdev-clock.h"
> +#include "hw/qdev-properties-system.h"
> #include "trace.h"
>
> #ifdef CADENCE_UART_ERR_DEBUG
> diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c
> index 626b68f2ec..ba2cbbee3d 100644
> --- a/hw/char/cmsdk-apb-uart.c
> +++ b/hw/char/cmsdk-apb-uart.c
> @@ -27,6 +27,7 @@
> #include "chardev/char-serial.h"
> #include "hw/char/cmsdk-apb-uart.h"
> #include "hw/irq.h"
> +#include "hw/qdev-properties-system.h"
>
> REG32(DATA, 0)
> REG32(STATE, 4)
> diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c
> index 2a063ad72c..fdb04fee09 100644
> --- a/hw/char/debugcon.c
> +++ b/hw/char/debugcon.c
> @@ -30,6 +30,7 @@
> #include "chardev/char-fe.h"
> #include "hw/isa/isa.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qom/object.h"
>
> #define TYPE_ISA_DEBUGCON_DEVICE "isa-debugcon"
> diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c
> index e130cb4692..00e5df5517 100644
> --- a/hw/char/digic-uart.c
> +++ b/hw/char/digic-uart.c
> @@ -35,6 +35,7 @@
>
> #include "hw/char/digic-uart.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> enum {
> ST_RX_RDY = (1 << 0),
> diff --git a/hw/char/escc.c b/hw/char/escc.c
> index 7d16ee8688..52e7978287 100644
> --- a/hw/char/escc.c
> +++ b/hw/char/escc.c
> @@ -25,6 +25,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "qemu/module.h"
> diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c
> index d9fba2ae6c..6bee3ee18e 100644
> --- a/hw/char/etraxfs_ser.c
> +++ b/hw/char/etraxfs_ser.c
> @@ -25,6 +25,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "chardev/char-fe.h"
> #include "qemu/log.h"
> diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c
> index 96afe3580f..6361df2ad3 100644
> --- a/hw/char/exynos4210_uart.c
> +++ b/hw/char/exynos4210_uart.c
> @@ -32,6 +32,7 @@
> #include "hw/arm/exynos4210.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> #include "trace.h"
> #include "qom/object.h"
> diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
> index 3f80f6824e..82ff40a530 100644
> --- a/hw/char/grlib_apbuart.c
> +++ b/hw/char/grlib_apbuart.c
> @@ -25,6 +25,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sparc/grlib.h"
> #include "hw/sysbus.h"
> #include "qemu/module.h"
> diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c
> index cc49a35013..89f1182c9b 100644
> --- a/hw/char/ibex_uart.c
> +++ b/hw/char/ibex_uart.c
> @@ -30,6 +30,7 @@
> #include "hw/irq.h"
> #include "hw/qdev-clock.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
> diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c
> index 731b8fc64c..ee1375e26d 100644
> --- a/hw/char/imx_serial.c
> +++ b/hw/char/imx_serial.c
> @@ -22,6 +22,7 @@
> #include "hw/char/imx_serial.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
> diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c
> index ad000a39b9..3311e0872c 100644
> --- a/hw/char/ipoctal232.c
> +++ b/hw/char/ipoctal232.c
> @@ -12,6 +12,7 @@
> #include "hw/ipack/ipack.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/bitops.h"
> #include "qemu/module.h"
> diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c
> index aced357011..ce30279650 100644
> --- a/hw/char/lm32_juart.c
> +++ b/hw/char/lm32_juart.c
> @@ -26,6 +26,7 @@
>
> #include "hw/char/lm32_juart.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qom/object.h"
>
> enum {
> diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c
> index 2f58e2943b..d8e0331311 100644
> --- a/hw/char/lm32_uart.c
> +++ b/hw/char/lm32_uart.c
> @@ -25,6 +25,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "trace.h"
> diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c
> index e6814faffb..6fa4ac502c 100644
> --- a/hw/char/mcf_uart.c
> +++ b/hw/char/mcf_uart.c
> @@ -13,6 +13,7 @@
> #include "qapi/error.h"
> #include "hw/m68k/mcf.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "chardev/char-fe.h"
> #include "qom/object.h"
>
> diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c
> index a817c51eb5..cb1b3470ad 100644
> --- a/hw/char/milkymist-uart.c
> +++ b/hw/char/milkymist-uart.c
> @@ -24,6 +24,7 @@
> #include "qemu/osdep.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "migration/vmstate.h"
> #include "trace.h"
> diff --git a/hw/char/nrf51_uart.c b/hw/char/nrf51_uart.c
> index d1fef77acd..045ca5fa40 100644
> --- a/hw/char/nrf51_uart.c
> +++ b/hw/char/nrf51_uart.c
> @@ -18,6 +18,7 @@
> #include "hw/char/nrf51_uart.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "trace.h"
>
> diff --git a/hw/char/parallel.c b/hw/char/parallel.c
> index 8b418abf71..b45e67bfbb 100644
> --- a/hw/char/parallel.c
> +++ b/hw/char/parallel.c
> @@ -32,6 +32,7 @@
> #include "hw/irq.h"
> #include "hw/isa/isa.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "hw/char/parallel.h"
> #include "sysemu/reset.h"
> diff --git a/hw/char/pl011.c b/hw/char/pl011.c
> index ede16c781c..ea4a4e5235 100644
> --- a/hw/char/pl011.c
> +++ b/hw/char/pl011.c
> @@ -23,6 +23,7 @@
> #include "hw/irq.h"
> #include "hw/sysbus.h"
> #include "hw/qdev-clock.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "chardev/char-fe.h"
> #include "qemu/log.h"
> diff --git a/hw/char/renesas_sci.c b/hw/char/renesas_sci.c
> index 5d7c6e6523..1c63467290 100644
> --- a/hw/char/renesas_sci.c
> +++ b/hw/char/renesas_sci.c
> @@ -26,6 +26,7 @@
> #include "hw/irq.h"
> #include "hw/registerfields.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/char/renesas_sci.h"
> #include "migration/vmstate.h"
>
> diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c
> index 81f6d0ed4f..b9e9b2d453 100644
> --- a/hw/char/sclpconsole-lm.c
> +++ b/hw/char/sclpconsole-lm.c
> @@ -23,6 +23,7 @@
> #include "migration/vmstate.h"
> #include "hw/s390x/event-facility.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/s390x/ebcdic.h"
> #include "qom/object.h"
>
> diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c
> index aa72ab40b9..c36b572222 100644
> --- a/hw/char/sclpconsole.c
> +++ b/hw/char/sclpconsole.c
> @@ -20,6 +20,7 @@
> #include "hw/s390x/sclp.h"
> #include "migration/vmstate.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/s390x/event-facility.h"
> #include "chardev/char-fe.h"
> #include "qom/object.h"
> diff --git a/hw/char/serial-pci-multi.c b/hw/char/serial-pci-multi.c
> index 2cf3e44177..3a9f96c2d1 100644
> --- a/hw/char/serial-pci-multi.c
> +++ b/hw/char/serial-pci-multi.c
> @@ -33,6 +33,7 @@
> #include "hw/irq.h"
> #include "hw/pci/pci.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
>
> #define PCI_SERIAL_MAX_PORTS 4
> diff --git a/hw/char/serial.c b/hw/char/serial.c
> index 62c627f486..6e52539648 100644
> --- a/hw/char/serial.c
> +++ b/hw/char/serial.c
> @@ -36,6 +36,7 @@
> #include "qemu/error-report.h"
> #include "trace.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> #define UART_LCR_DLAB 0x80 /* Divisor latch access bit */
>
> diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c
> index e726d4d915..79eaa2fa52 100644
> --- a/hw/char/spapr_vty.c
> +++ b/hw/char/spapr_vty.c
> @@ -8,6 +8,7 @@
> #include "hw/ppc/spapr.h"
> #include "hw/ppc/spapr_vio.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qom/object.h"
>
> #define VTERM_BUFSIZE 16
> diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c
> index 0d661be6d3..8df0832424 100644
> --- a/hw/char/stm32f2xx_usart.c
> +++ b/hw/char/stm32f2xx_usart.c
> @@ -26,6 +26,7 @@
> #include "hw/char/stm32f2xx_usart.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
>
> diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c
> index d77981bb6d..a9a46c8ed3 100644
> --- a/hw/char/terminal3270.c
> +++ b/hw/char/terminal3270.c
> @@ -16,6 +16,7 @@
> #include "qemu/module.h"
> #include "chardev/char-fe.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/s390x/3270-ccw.h"
> #include "qom/object.h"
>
> diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c
> index bc752cf90f..6b132caa29 100644
> --- a/hw/char/virtio-console.c
> +++ b/hw/char/virtio-console.c
> @@ -16,6 +16,7 @@
> #include "qemu/module.h"
> #include "trace.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/virtio-serial.h"
> #include "qapi/error.h"
> #include "qapi/qapi-events-char.h"
> diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c
> index 2e773ec4c4..99b9a6f851 100644
> --- a/hw/char/xilinx_uartlite.c
> +++ b/hw/char/xilinx_uartlite.c
> @@ -26,6 +26,7 @@
> #include "qemu/log.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "qemu/module.h"
> #include "chardev/char-fe.h"
> diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
> index 7a9a1d6404..e2d523b27a 100644
> --- a/hw/core/qdev-properties-system.c
> +++ b/hw/core/qdev-properties-system.c
> @@ -12,6 +12,7 @@
>
> #include "qemu/osdep.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qapi/error.h"
> #include "qapi/visitor.h"
> #include "qapi/qapi-types-block.h"
> diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c
> index 896e981f85..984caf898d 100644
> --- a/hw/hyperv/vmbus.c
> +++ b/hw/hyperv/vmbus.c
> @@ -13,6 +13,7 @@
> #include "qapi/error.h"
> #include "migration/vmstate.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/hyperv/hyperv.h"
> #include "hw/hyperv/vmbus.h"
> #include "hw/hyperv/vmbus-bridge.h"
> diff --git a/hw/i386/kvm/i8254.c b/hw/i386/kvm/i8254.c
> index 40d84734e7..c73254e886 100644
> --- a/hw/i386/kvm/i8254.c
> +++ b/hw/i386/kvm/i8254.c
> @@ -32,6 +32,7 @@
> #include "sysemu/runstate.h"
> #include "hw/timer/i8254.h"
> #include "hw/timer/i8254_internal.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/kvm.h"
> #include "qom/object.h"
>
> diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
> index 1086b7a327..8cd19fa5e9 100644
> --- a/hw/ide/qdev.c
> +++ b/hw/ide/qdev.c
> @@ -26,6 +26,7 @@
> #include "qemu/module.h"
> #include "hw/ide/internal.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "sysemu/blockdev.h"
> #include "hw/block/block.h"
> diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c
> index c3f3306e66..e141a5cd45 100644
> --- a/hw/ipmi/ipmi_bmc_extern.c
> +++ b/hw/ipmi/ipmi_bmc_extern.c
> @@ -35,6 +35,7 @@
> #include "chardev/char-fe.h"
> #include "hw/ipmi/ipmi.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qom/object.h"
>
> diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c
> index f78e92d3d5..55fb81fa5a 100644
> --- a/hw/ipmi/ipmi_bmc_sim.c
> +++ b/hw/ipmi/ipmi_bmc_sim.c
> @@ -30,6 +30,7 @@
> #include "qemu/module.h"
> #include "hw/loader.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
>
> #define IPMI_NETFN_CHASSIS 0x00
> diff --git a/hw/misc/allwinner-sid.c b/hw/misc/allwinner-sid.c
> index 196380c33a..6d61f55b1d 100644
> --- a/hw/misc/allwinner-sid.c
> +++ b/hw/misc/allwinner-sid.c
> @@ -26,6 +26,7 @@
> #include "qemu/guest-random.h"
> #include "qapi/error.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/misc/allwinner-sid.h"
> #include "trace.h"
>
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index e321e5cb69..0505b52c98 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -23,6 +23,7 @@
> #include "qemu/cutils.h"
> #include "hw/pci/pci.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/pci/msi.h"
> #include "hw/pci/msix.h"
> #include "sysemu/kvm.h"
> diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
> index 6db62dab7d..488d086a17 100644
> --- a/hw/misc/mac_via.c
> +++ b/hw/misc/mac_via.c
> @@ -28,6 +28,7 @@
> #include "qapi/error.h"
> #include "qemu/cutils.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "trace.h"
> #include "qemu/log.h"
> diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c
> index 60066375ab..4401787a5c 100644
> --- a/hw/misc/sifive_u_otp.c
> +++ b/hw/misc/sifive_u_otp.c
> @@ -21,6 +21,7 @@
> #include "qemu/osdep.h"
> #include "qapi/error.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/sysbus.h"
> #include "qemu/log.h"
> #include "qemu/module.h"
> diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c
> index 1af1e6fa2f..0fb8db1dee 100644
> --- a/hw/net/rocker/rocker.c
> +++ b/hw/net/rocker/rocker.c
> @@ -18,6 +18,7 @@
> #include "qemu/osdep.h"
> #include "hw/pci/pci.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "hw/pci/msix.h"
> #include "net/net.h"
> diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c
> index 3e93dbbffb..af6f5dbb99 100644
> --- a/hw/nvram/eeprom_at24c.c
> +++ b/hw/nvram/eeprom_at24c.c
> @@ -13,6 +13,7 @@
> #include "qemu/module.h"
> #include "hw/i2c/i2c.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/block-backend.h"
> #include "qom/object.h"
>
> diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c
> index fc53a42572..9e51bc82ae 100644
> --- a/hw/nvram/spapr_nvram.c
> +++ b/hw/nvram/spapr_nvram.c
> @@ -39,6 +39,7 @@
> #include "hw/ppc/spapr.h"
> #include "hw/ppc/spapr_vio.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qom/object.h"
>
> struct SpaprNvram {
> diff --git a/hw/pci-bridge/gen_pcie_root_port.c b/hw/pci-bridge/gen_pcie_root_port.c
> index 8931afc049..ec9907917e 100644
> --- a/hw/pci-bridge/gen_pcie_root_port.c
> +++ b/hw/pci-bridge/gen_pcie_root_port.c
> @@ -16,6 +16,7 @@
> #include "hw/pci/msix.h"
> #include "hw/pci/pcie_port.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qom/object.h"
>
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index 9424231542..b09208f562 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -31,6 +31,7 @@
> #include "hw/pci/pci_bus.h"
> #include "hw/pci/pci_host.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/qemu-file-types.h"
> #include "migration/vmstate.h"
> #include "monitor/monitor.h"
> diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c
> index c365ee58b8..ef8dff03e0 100644
> --- a/hw/ppc/pnv_pnor.c
> +++ b/hw/ppc/pnv_pnor.c
> @@ -17,6 +17,7 @@
> #include "hw/loader.h"
> #include "hw/ppc/pnv_pnor.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
>
> static uint64_t pnv_pnor_read(void *opaque, hwaddr addr, unsigned size)
> {
> diff --git a/hw/rdma/vmw/pvrdma_main.c b/hw/rdma/vmw/pvrdma_main.c
> index 77b1235a3f..8593570332 100644
> --- a/hw/rdma/vmw/pvrdma_main.c
> +++ b/hw/rdma/vmw/pvrdma_main.c
> @@ -21,6 +21,7 @@
> #include "hw/pci/msi.h"
> #include "hw/pci/msix.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "cpu.h"
> #include "trace.h"
> #include "monitor/monitor.h"
> diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c
> index 7a38540cb9..5d0fcacd0c 100644
> --- a/hw/rtc/mc146818rtc.c
> +++ b/hw/rtc/mc146818rtc.c
> @@ -30,6 +30,7 @@
> #include "hw/acpi/aml-build.h"
> #include "hw/irq.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qemu/timer.h"
> #include "sysemu/sysemu.h"
> #include "sysemu/replay.h"
> diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
> index 90841ad791..29504ea081 100644
> --- a/hw/scsi/scsi-disk.c
> +++ b/hw/scsi/scsi-disk.c
> @@ -34,6 +34,7 @@
> #include "sysemu/blockdev.h"
> #include "hw/block/block.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "sysemu/dma.h"
> #include "sysemu/sysemu.h"
> #include "qemu/cutils.h"
> diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c
> index 2cb23ca891..9740f7e36a 100644
> --- a/hw/scsi/scsi-generic.c
> +++ b/hw/scsi/scsi-generic.c
> @@ -19,6 +19,7 @@
> #include "hw/scsi/scsi.h"
> #include "migration/qemu-file-types.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/scsi/emulation.h"
> #include "sysemu/block-backend.h"
> #include "trace.h"
> diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c
> index 7c0631656c..4666019442 100644
> --- a/hw/scsi/vhost-user-scsi.c
> +++ b/hw/scsi/vhost-user-scsi.c
> @@ -21,6 +21,7 @@
> #include "hw/fw-path-provider.h"
> #include "hw/qdev-core.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/vhost.h"
> #include "hw/virtio/vhost-backend.h"
> #include "hw/virtio/vhost-user-scsi.h"
> diff --git a/hw/sd/sd.c b/hw/sd/sd.c
> index 1842c03797..2aeab39c3f 100644
> --- a/hw/sd/sd.c
> +++ b/hw/sd/sd.c
> @@ -42,6 +42,7 @@
> #include "qapi/error.h"
> #include "qemu/bitmap.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qemu/error-report.h"
> #include "qemu/timer.h"
> #include "qemu/log.h"
> diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
> index e8e9d37e88..c27c602697 100644
> --- a/hw/usb/ccid-card-passthru.c
> +++ b/hw/usb/ccid-card-passthru.c
> @@ -14,6 +14,7 @@
> #include <libcacard.h>
> #include "chardev/char-fe.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/error-report.h"
> #include "qemu/module.h"
> diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
> index 19e1933f04..b58c4eb908 100644
> --- a/hw/usb/dev-serial.c
> +++ b/hw/usb/dev-serial.c
> @@ -14,6 +14,7 @@
> #include "qemu/error-report.h"
> #include "qemu/module.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/usb.h"
> #include "migration/vmstate.h"
> #include "desc.h"
> diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
> index 3238de6bb8..0b7e0e15f4 100644
> --- a/hw/usb/redirect.c
> +++ b/hw/usb/redirect.c
> @@ -42,6 +42,7 @@
> #include <usbredirfilter.h>
>
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/usb.h"
> #include "migration/qemu-file-types.h"
> #include "migration/vmstate.h"
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index 51dc373695..f74be78209 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -27,6 +27,7 @@
> #include "hw/pci/msix.h"
> #include "hw/pci/pci_bridge.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "migration/vmstate.h"
> #include "qemu/error-report.h"
> #include "qemu/main-loop.h"
> diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c
> index 1bc5d03a00..ed036ad9c1 100644
> --- a/hw/virtio/vhost-user-fs.c
> +++ b/hw/virtio/vhost-user-fs.c
> @@ -16,6 +16,7 @@
> #include "standard-headers/linux/virtio_fs.h"
> #include "qapi/error.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/virtio-bus.h"
> #include "hw/virtio/virtio-access.h"
> #include "qemu/error-report.h"
> diff --git a/hw/virtio/vhost-user-vsock.c b/hw/virtio/vhost-user-vsock.c
> index 3534a39d62..a6f08c26b9 100644
> --- a/hw/virtio/vhost-user-vsock.c
> +++ b/hw/virtio/vhost-user-vsock.c
> @@ -13,6 +13,7 @@
> #include "qapi/error.h"
> #include "qemu/error-report.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/virtio/vhost-user-vsock.h"
>
> static const int user_feature_bits[] = {
> diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c
> index 378f63b210..770c286be7 100644
> --- a/hw/virtio/virtio-iommu-pci.c
> +++ b/hw/virtio/virtio-iommu-pci.c
> @@ -14,6 +14,7 @@
> #include "virtio-pci.h"
> #include "hw/virtio/virtio-iommu.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "qapi/error.h"
> #include "hw/boards.h"
> #include "qom/object.h"
> diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c
> index 6d359ee486..3cbd08b10e 100644
> --- a/hw/xen/xen_pt.c
> +++ b/hw/xen/xen_pt.c
> @@ -58,6 +58,7 @@
>
> #include "hw/pci/pci.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "hw/xen/xen.h"
> #include "hw/i386/pc.h"
> #include "hw/xen/xen-legacy-backend.h"
> diff --git a/migration/migration.c b/migration/migration.c
> index e0dbde4091..cfbf46b77d 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -52,6 +52,7 @@
> #include "migration/colo.h"
> #include "hw/boards.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> #include "monitor/monitor.h"
> #include "net/announce.h"
> #include "qemu/queue.h"
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 22/32] qdev: Wrap getters and setters in separate helpers
2020-12-11 22:05 ` [PATCH v4 22/32] qdev: Wrap getters and setters in separate helpers Eduardo Habkost
@ 2020-12-15 14:42 ` Igor Mammedov
0 siblings, 0 replies; 69+ messages in thread
From: Igor Mammedov @ 2020-12-15 14:42 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, qemu-devel,
Markus Armbruster, Paolo Bonzini, Marc-André Lureau,
Philippe Mathieu-Daudé, Stefan Berger
On Fri, 11 Dec 2020 17:05:19 -0500
Eduardo Habkost <ehabkost@redhat.com> wrote:
> We'll add extra code to the qdev property getters and setters, so
> add wrapper functions where additional actions can be performed.
>
> The new functions have a "field_prop_" prefix instead of "qdev_"
> because the code will eventually be moved outside
> qdev-properties.c, to common QOM code.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
> Changes v1 -> v2:
> * Redone after changes in previous patches in the series
> * Renamed functions from static_prop_* to field_prop_*
> ---
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: "Daniel P. Berrangé" <berrange@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: qemu-devel@nongnu.org
> ---
> hw/core/qdev-properties.c | 44 +++++++++++++++++++++++++++++++++++----
> 1 file changed, 40 insertions(+), 4 deletions(-)
>
> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index c68a20695d..b924f13d58 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -44,6 +44,40 @@ void *qdev_get_prop_ptr(Object *obj, Property *prop)
> return ptr;
> }
>
> +static void field_prop_get(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp)
> +{
> + Property *prop = opaque;
> + return prop->info->get(obj, v, name, opaque, errp);
> +}
> +
> +/**
> + * field_prop_getter: Return getter function to be used for property
> + *
> + * Return value can be NULL if @info has no getter function.
> + */
> +static ObjectPropertyAccessor *field_prop_getter(const PropertyInfo *info)
> +{
> + return info->get ? field_prop_get : NULL;
> +}
> +
> +static void field_prop_set(Object *obj, Visitor *v, const char *name,
> + void *opaque, Error **errp)
> +{
> + Property *prop = opaque;
> + return prop->info->set(obj, v, name, opaque, errp);
> +}
> +
> +/**
> + * field_prop_setter: Return setter function to be used for property
> + *
> + * Return value can be NULL if @info has not setter function.
> + */
> +static ObjectPropertyAccessor *field_prop_setter(const PropertyInfo *info)
> +{
> + return info->set ? field_prop_set : NULL;
> +}
> +
> void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
> void *opaque, Error **errp)
> {
> @@ -630,8 +664,8 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name,
> assert(qdev_get_prop_ptr(obj, &arrayprop->prop) == eltptr);
> object_property_add(obj, propname,
> arrayprop->prop.info->name,
> - arrayprop->prop.info->get,
> - arrayprop->prop.info->set,
> + field_prop_getter(arrayprop->prop.info),
> + field_prop_setter(arrayprop->prop.info),
> array_element_release,
> arrayprop);
> }
> @@ -873,7 +907,8 @@ void qdev_property_add_static(DeviceState *dev, Property *prop)
> assert(!prop->info->create);
>
> op = object_property_add(obj, prop->name, prop->info->name,
> - prop->info->get, prop->info->set,
> + field_prop_getter(prop->info),
> + field_prop_setter(prop->info),
> prop->info->release,
> prop);
>
> @@ -900,7 +935,8 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
>
> op = object_class_property_add(oc,
> name, prop->info->name,
> - prop->info->get, prop->info->set,
> + field_prop_getter(prop->info),
> + field_prop_setter(prop->info),
> prop->info->release,
> prop);
> if (prop->set_default) {
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 00/32] qdev property code cleanup
2020-12-14 19:42 ` [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
@ 2020-12-15 15:40 ` Eduardo Habkost
2020-12-15 16:57 ` Eduardo Habkost
0 siblings, 1 reply; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-15 15:40 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
On Mon, Dec 14, 2020 at 02:42:44PM -0500, Eduardo Habkost wrote:
> On Fri, Dec 11, 2020 at 05:04:57PM -0500, Eduardo Habkost wrote:
> > This code contains the first 32 patches from the series:
> >
> > Subject: [PATCH v3 00/53] Make qdev static property API usable by any QOM type
> > https://lore.kernel.org/qemu-devel/20201112214350.872250-1-ehabkost@redhat.com
> >
> > I'm submitting this separately so we can merge the qdev-specific
> > cleanup while we discuss our long term plans for QOM properties.
> >
> > Eduardo Habkost (32):
> > cs4231: Get rid of empty property array
> > cpu: Move cpu_common_props to hw/core/cpu.c
> > qdev: Move property code to qdev-properties.[ch]
> > qdev: Check dev->realized at set_size()
> > sparc: Check dev->realized at sparc_set_nwindows()
> > qdev: Don't use dev->id on set_size32() error message
> > qdev: Make PropertyInfo.print method get Object* argument
> > qdev: Make bit_prop_set() get Object* argument
> > qdev: Make qdev_get_prop_ptr() get Object* arg
> > qdev: Make qdev_find_global_prop() get Object* argument
> > qdev: Make check_prop_still_unset() get Object* argument
> > qdev: Make error_set_from_qdev_prop_error() get Object* argument
> > qdev: Make qdev_propinfo_get_uint16() static
> > qdev: Move UUID property to qdev-properties-system.c
>
> I'm queueing patches 1-14 (above) on machine-next.
>
> > qdev: Move softmmu properties to qdev-properties-system.h
> > qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros
> > sparc: Use DEFINE_PROP for nwindows property
> > qdev: Get just property name at error_set_from_qdev_prop_error()
> > qdev: Avoid using prop->name unnecessarily
> > qdev: Add name parameter to qdev_class_add_property()
> > qdev: Add name argument to PropertyInfo.create method
> > qdev: Wrap getters and setters in separate helpers
> > qdev: Move dev->realized check to qdev_property_set()
> > qdev: Make PropertyInfo.create return ObjectProperty*
> > qdev: Make qdev_class_add_property() more flexible
I'm queueing patches 15-25 (above) on machine-next.
> > qdev: Separate generic and device-specific property registration
> > qdev: Rename qdev_propinfo_* to field_prop_*
> > qdev: Move qdev_prop_tpm declaration to tpm_prop.h
> > qdev: Rename qdev_prop_* to prop_info_*
> > qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr()
> > qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen()
> > tests: Add unit test for qdev array properties
> >
--
Eduardo
^ permalink raw reply [flat|nested] 69+ messages in thread
* Re: [PATCH v4 00/32] qdev property code cleanup
2020-12-15 15:40 ` Eduardo Habkost
@ 2020-12-15 16:57 ` Eduardo Habkost
0 siblings, 0 replies; 69+ messages in thread
From: Eduardo Habkost @ 2020-12-15 16:57 UTC (permalink / raw)
To: qemu-devel
Cc: Kevin Wolf, Daniel P. Berrange, John Snow, Markus Armbruster,
Paolo Bonzini, Marc-André Lureau, Igor Mammedov,
Philippe Mathieu-Daudé, Stefan Berger
On Tue, Dec 15, 2020 at 10:40:20AM -0500, Eduardo Habkost wrote:
> On Mon, Dec 14, 2020 at 02:42:44PM -0500, Eduardo Habkost wrote:
> > On Fri, Dec 11, 2020 at 05:04:57PM -0500, Eduardo Habkost wrote:
> > > This code contains the first 32 patches from the series:
> > >
> > > Subject: [PATCH v3 00/53] Make qdev static property API usable by any QOM type
> > > https://lore.kernel.org/qemu-devel/20201112214350.872250-1-ehabkost@redhat.com
> > >
> > > I'm submitting this separately so we can merge the qdev-specific
> > > cleanup while we discuss our long term plans for QOM properties.
> > >
> > > Eduardo Habkost (32):
> > > cs4231: Get rid of empty property array
> > > cpu: Move cpu_common_props to hw/core/cpu.c
> > > qdev: Move property code to qdev-properties.[ch]
> > > qdev: Check dev->realized at set_size()
> > > sparc: Check dev->realized at sparc_set_nwindows()
> > > qdev: Don't use dev->id on set_size32() error message
> > > qdev: Make PropertyInfo.print method get Object* argument
> > > qdev: Make bit_prop_set() get Object* argument
> > > qdev: Make qdev_get_prop_ptr() get Object* arg
> > > qdev: Make qdev_find_global_prop() get Object* argument
> > > qdev: Make check_prop_still_unset() get Object* argument
> > > qdev: Make error_set_from_qdev_prop_error() get Object* argument
> > > qdev: Make qdev_propinfo_get_uint16() static
> > > qdev: Move UUID property to qdev-properties-system.c
> >
> > I'm queueing patches 1-14 (above) on machine-next.
> >
> > > qdev: Move softmmu properties to qdev-properties-system.h
> > > qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros
> > > sparc: Use DEFINE_PROP for nwindows property
> > > qdev: Get just property name at error_set_from_qdev_prop_error()
> > > qdev: Avoid using prop->name unnecessarily
> > > qdev: Add name parameter to qdev_class_add_property()
> > > qdev: Add name argument to PropertyInfo.create method
> > > qdev: Wrap getters and setters in separate helpers
> > > qdev: Move dev->realized check to qdev_property_set()
> > > qdev: Make PropertyInfo.create return ObjectProperty*
> > > qdev: Make qdev_class_add_property() more flexible
>
> I'm queueing patches 15-25 (above) on machine-next.
>
I'm also queueing the following:
> > > qdev: Move qdev_prop_tpm declaration to tpm_prop.h
> > > qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr()
> > > qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen()
--
Eduardo
^ permalink raw reply [flat|nested] 69+ messages in thread
end of thread, other threads:[~2020-12-15 16:59 UTC | newest]
Thread overview: 69+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-11 22:04 [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
2020-12-11 22:04 ` [PATCH v4 01/32] cs4231: Get rid of empty property array Eduardo Habkost
2020-12-15 8:22 ` Gerd Hoffmann
2020-12-11 22:04 ` [PATCH v4 02/32] cpu: Move cpu_common_props to hw/core/cpu.c Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 03/32] qdev: Move property code to qdev-properties.[ch] Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 04/32] qdev: Check dev->realized at set_size() Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 05/32] sparc: Check dev->realized at sparc_set_nwindows() Eduardo Habkost
2020-12-15 11:45 ` Mark Cave-Ayland
2020-12-11 22:05 ` [PATCH v4 06/32] qdev: Don't use dev->id on set_size32() error message Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 07/32] qdev: Make PropertyInfo.print method get Object* argument Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 08/32] qdev: Make bit_prop_set() " Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 09/32] qdev: Make qdev_get_prop_ptr() get Object* arg Eduardo Habkost
2020-12-14 7:46 ` Paul Durrant
2020-12-11 22:05 ` [PATCH v4 10/32] qdev: Make qdev_find_global_prop() get Object* argument Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 11/32] qdev: Make check_prop_still_unset() " Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 12/32] qdev: Make error_set_from_qdev_prop_error() " Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 13/32] qdev: Make qdev_propinfo_get_uint16() static Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 14/32] qdev: Move UUID property to qdev-properties-system.c Eduardo Habkost
2020-12-14 14:18 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 15/32] qdev: Move softmmu properties to qdev-properties-system.h Eduardo Habkost
2020-12-14 14:25 ` Igor Mammedov
2020-12-14 17:40 ` Eduardo Habkost
2020-12-15 14:40 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 16/32] qdev: Reuse DEFINE_PROP in all DEFINE_PROP_* macros Eduardo Habkost
2020-12-14 14:32 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 17/32] sparc: Use DEFINE_PROP for nwindows property Eduardo Habkost
2020-12-14 14:42 ` Igor Mammedov
2020-12-14 17:30 ` Eduardo Habkost
2020-12-15 14:39 ` Igor Mammedov
2020-12-15 11:52 ` Mark Cave-Ayland
2020-12-11 22:05 ` [PATCH v4 18/32] qdev: Get just property name at error_set_from_qdev_prop_error() Eduardo Habkost
2020-12-14 10:41 ` Cornelia Huck
2020-12-14 14:44 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 19/32] qdev: Avoid using prop->name unnecessarily Eduardo Habkost
2020-12-14 14:45 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 20/32] qdev: Add name parameter to qdev_class_add_property() Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 21/32] qdev: Add name argument to PropertyInfo.create method Eduardo Habkost
2020-12-14 14:47 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 22/32] qdev: Wrap getters and setters in separate helpers Eduardo Habkost
2020-12-15 14:42 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 23/32] qdev: Move dev->realized check to qdev_property_set() Eduardo Habkost
2020-12-14 7:46 ` Paul Durrant
2020-12-14 10:46 ` Cornelia Huck
2020-12-14 14:55 ` Igor Mammedov
2020-12-14 17:24 ` Eduardo Habkost
2020-12-15 14:24 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 24/32] qdev: Make PropertyInfo.create return ObjectProperty* Eduardo Habkost
2020-12-14 14:57 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 25/32] qdev: Make qdev_class_add_property() more flexible Eduardo Habkost
2020-12-14 15:00 ` Igor Mammedov
2020-12-14 18:28 ` Eduardo Habkost
2020-12-15 14:25 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 26/32] qdev: Separate generic and device-specific property registration Eduardo Habkost
2020-12-15 14:33 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 27/32] qdev: Rename qdev_propinfo_* to field_prop_* Eduardo Habkost
2020-12-15 14:35 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 28/32] qdev: Move qdev_prop_tpm declaration to tpm_prop.h Eduardo Habkost
2020-12-15 14:36 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 29/32] qdev: Rename qdev_prop_* to prop_info_* Eduardo Habkost
2020-12-11 22:05 ` [PATCH v4 30/32] qdev: Rename qdev_get_prop_ptr() to object_field_prop_ptr() Eduardo Habkost
2020-12-14 7:47 ` Paul Durrant
2020-12-14 10:56 ` Cornelia Huck
2020-12-14 15:13 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 31/32] qdev: Avoid unnecessary DeviceState* variable at set_prop_arraylen() Eduardo Habkost
2020-12-14 15:11 ` Igor Mammedov
2020-12-11 22:05 ` [PATCH v4 32/32] tests: Add unit test for qdev array properties Eduardo Habkost
2020-12-14 19:42 ` [PATCH v4 00/32] qdev property code cleanup Eduardo Habkost
2020-12-15 15:40 ` Eduardo Habkost
2020-12-15 16:57 ` Eduardo Habkost
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).