qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PULL 00/21] machine + QOM queue, 2020-10-05
@ 2020-10-05 21:09 Eduardo Habkost
  2020-10-05 21:09 ` [PULL 01/21] numa: hmat: require parent cache description before the next level one Eduardo Habkost
                   ` (21 more replies)
  0 siblings, 22 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost

The following changes since commit 36d9c2883e55c863b622b99f0ebb5143f0001401:

  readthedocs: build with Python 3.6 (2020-10-05 16:30:45 +0100)

are available in the Git repository at:

  git://github.com/ehabkost/qemu.git tags/machine-next-pull-request

for you to fetch changes up to fec5c4b6d3b7f3ffcfcbe1714e0405df6de2a222:

  kernel-doc: Remove $decl_type='type name' hack (2020-10-05 12:48:11 -0400)

----------------------------------------------------------------
machine + QOM queue, 2020-10-05

* QOM documentation fixes and cleanups (Eduardo Habkost)
* user-mode: Prune build dependencies (Philippe Mathieu-Daudé)
* qom: Improve error message (Philippe Mathieu-Daudé)
* numa: hmat: require parent cache description before the next
  level one (Igor Mammedov)

----------------------------------------------------------------

Eduardo Habkost (11):
  qom: Fix DECLARE_*CHECKER documentation
  docs/devel/qom: Fix indentation of bulleted list
  docs/devel/qom: Fix indentation of code blocks
  docs/devel/qom: Use *emphasis* for emphasis
  docs/devel/qom: Remove usage of <code>
  docs/devel/qom: Avoid long lines
  kernel-doc: Handle function typedefs that return pointers
  kernel-doc: Handle function typedefs without asterisks
  qom: Explicitly tag doc comments for typedefs and structs
  memory: Explicitly tag doc comments for structs
  kernel-doc: Remove $decl_type='type name' hack

Igor Mammedov (1):
  numa: hmat: require parent cache description before the next level one

Philippe Mathieu-Daudé (9):
  hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler
  hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr()
  hw/core/qdev-properties: Fix code style
  hw/core/qdev-properties: Export enum-related functions
  hw/core/qdev-properties: Export qdev_prop_enum
  hw/core/qdev-properties: Export some integer-related functions
  hw/core/qdev-properties: Extract system-mode specific properties
  hw/core/cpu: Add missing 'exec/cpu-common.h' include
  qom: Improve error message displayed with missing object properties

 docs/devel/qom.rst               |  91 ++--
 hw/core/qdev-prop-internal.h     |  30 ++
 include/exec/memory.h            |   6 +-
 include/hw/qdev-properties.h     |   1 +
 include/qom/object.h             |  38 +-
 hw/core/cpu.c                    |   1 +
 hw/core/numa.c                   |   8 +-
 hw/core/qdev-properties-system.c | 687 ++++++++++++++++++++++++++++-
 hw/core/qdev-properties.c        | 735 ++-----------------------------
 qom/object.c                     |   3 +-
 scripts/kernel-doc               |  16 +-
 11 files changed, 831 insertions(+), 785 deletions(-)
 create mode 100644 hw/core/qdev-prop-internal.h

-- 
2.26.2




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

* [PULL 01/21] numa: hmat: require parent cache description before the next level one
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 02/21] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler Eduardo Habkost
                   ` (20 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost, Igor Mammedov

From: Igor Mammedov <imammedo@redhat.com>

Spec[1] defines 0 - 3 level memory side cache, however QEMU
CLI allows to specify an intermediate cache level without
specifying previous level. Such option(s) silently ignored
when building HMAT table, which leads to incomplete cache
information.
Make sure that previous level exists and error out
if it hasn't been provided.

1) ACPI 6.2A 5.2.27.5 Memory Side Cache Information Structure

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1842877
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20200924091406.1321012-1-imammedo@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 hw/core/numa.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/hw/core/numa.c b/hw/core/numa.c
index 7d5d4130016..6dc3d19d282 100644
--- a/hw/core/numa.c
+++ b/hw/core/numa.c
@@ -424,7 +424,13 @@ void parse_numa_hmat_cache(MachineState *ms, NumaHmatCacheOptions *node,
     }
 
     if ((node->level > 1) &&
-        ms->numa_state->hmat_cache[node->node_id][node->level - 1] &&
+        ms->numa_state->hmat_cache[node->node_id][node->level - 1] == NULL) {
+        error_setg(errp, "Cache level=%" PRIu8 " shall be defined first",
+                   node->level - 1);
+        return;
+    }
+
+    if ((node->level > 1) &&
         (node->size <=
             ms->numa_state->hmat_cache[node->node_id][node->level - 1]->size)) {
         error_setg(errp, "Invalid size=%" PRIu64 ", the size of level=%" PRIu8
-- 
2.26.2



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

* [PULL 02/21] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
  2020-10-05 21:09 ` [PULL 01/21] numa: hmat: require parent cache description before the next level one Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 03/21] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr() Eduardo Habkost
                   ` (19 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Daniel P. Berrangé,
	Eduardo Habkost, Richard Henderson, Paolo Bonzini,
	Philippe Mathieu-Daudé

From: Philippe Mathieu-Daudé <philmd@redhat.com>

The MACAddr structure contains an array of uint8_t. Previously
if a value was out of the [0..255] range, it was silently casted
and no input validation was done.
Replace strtol() by qemu_strtol() -- so checkpatch.pl won't
complain if we move this code later -- and return EINVAL if the
input is invalid.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20200930164949.1425294-3-philmd@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 hw/core/qdev-properties.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 343c824da04..080ba319a1f 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1,4 +1,5 @@
 #include "qemu/osdep.h"
+#include "qemu/cutils.h"
 #include "net/net.h"
 #include "hw/qdev-properties.h"
 #include "qapi/error.h"
@@ -524,7 +525,8 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
     Property *prop = opaque;
     MACAddr *mac = qdev_get_prop_ptr(dev, prop);
     int i, pos;
-    char *str, *p;
+    char *str;
+    const char *p;
 
     if (dev->realized) {
         qdev_prop_set_after_realize(dev, name, errp);
@@ -536,6 +538,8 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
     }
 
     for (i = 0, pos = 0; i < 6; i++, pos += 3) {
+        long val;
+
         if (!qemu_isxdigit(str[pos])) {
             goto inval;
         }
@@ -551,7 +555,10 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
                 goto inval;
             }
         }
-        mac->a[i] = strtol(str+pos, &p, 16);
+        if (qemu_strtol(str + pos, &p, 16, &val) < 0 || val > 0xff) {
+            goto inval;
+        }
+        mac->a[i] = val;
     }
     g_free(str);
     return;
-- 
2.26.2



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

* [PULL 03/21] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr()
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
  2020-10-05 21:09 ` [PULL 01/21] numa: hmat: require parent cache description before the next level one Eduardo Habkost
  2020-10-05 21:09 ` [PULL 02/21] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 04/21] hw/core/qdev-properties: Fix code style Eduardo Habkost
                   ` (18 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Daniel P. Berrangé,
	Eduardo Habkost, Richard Henderson, Paolo Bonzini,
	Philippe Mathieu-Daudé

From: Philippe Mathieu-Daudé <philmd@redhat.com>

Replace strtoul() by qemu_strtoul() so checkpatch.pl won't complain
if we move this code later.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20200930164949.1425294-4-philmd@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 hw/core/qdev-properties.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 080ba319a1f..a1190a5db9e 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -951,7 +951,7 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
     Property *prop = opaque;
     PCIHostDeviceAddress *addr = qdev_get_prop_ptr(dev, prop);
     char *str, *p;
-    char *e;
+    const char *e;
     unsigned long val;
     unsigned long dom = 0, bus = 0;
     unsigned int slot = 0, func = 0;
@@ -966,23 +966,23 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
     }
 
     p = str;
-    val = strtoul(p, &e, 16);
-    if (e == p || *e != ':') {
+    if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0xffff || e == p) {
+        goto inval;
+    }
+    if (*e != ':') {
         goto inval;
     }
     bus = val;
 
-    p = e + 1;
-    val = strtoul(p, &e, 16);
-    if (e == p) {
+    p = (char *)e + 1;
+    if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
         goto inval;
     }
     if (*e == ':') {
         dom = bus;
         bus = val;
-        p = e + 1;
-        val = strtoul(p, &e, 16);
-        if (e == p) {
+        p = (char *)e + 1;
+        if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
             goto inval;
         }
     }
@@ -991,14 +991,13 @@ static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
     if (*e != '.') {
         goto inval;
     }
-    p = e + 1;
-    val = strtoul(p, &e, 10);
-    if (e == p) {
+    p = (char *)e + 1;
+    if (qemu_strtoul(p, &e, 10, &val) < 0 || val > 7 || e == p) {
         goto inval;
     }
     func = val;
 
-    if (dom > 0xffff || bus > 0xff || slot > 0x1f || func > 7) {
+    if (bus > 0xff) {
         goto inval;
     }
 
-- 
2.26.2



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

* [PULL 04/21] hw/core/qdev-properties: Fix code style
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (2 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 03/21] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr() Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 05/21] hw/core/qdev-properties: Export enum-related functions Eduardo Habkost
                   ` (17 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Daniel P. Berrangé,
	Eduardo Habkost, Richard Henderson, Paolo Bonzini,
	Philippe Mathieu-Daudé

From: Philippe Mathieu-Daudé <philmd@redhat.com>

We will soon move this code, fix its style to avoid checkpatch.pl
to complain.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20200930164949.1425294-5-philmd@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 hw/core/qdev-properties.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index a1190a5db9e..071fd5864ae 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -543,15 +543,15 @@ static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
         if (!qemu_isxdigit(str[pos])) {
             goto inval;
         }
-        if (!qemu_isxdigit(str[pos+1])) {
+        if (!qemu_isxdigit(str[pos + 1])) {
             goto inval;
         }
         if (i == 5) {
-            if (str[pos+2] != '\0') {
+            if (str[pos + 2] != '\0') {
                 goto inval;
             }
         } else {
-            if (str[pos+2] != ':' && str[pos+2] != '-') {
+            if (str[pos + 2] != ':' && str[pos + 2] != '-') {
                 goto inval;
             }
         }
@@ -898,8 +898,8 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
     /* We rely on power-of-2 blocksizes for bitmasks */
     if ((value & (value - 1)) != 0) {
         error_setg(errp,
-                  "Property %s.%s doesn't take value '%" PRId64 "', it's not a power of 2",
-                  dev->id ?: "", name, (int64_t)value);
+                  "Property %s.%s doesn't take value '%" PRId64 "', "
+                  "it's not a power of 2", dev->id ?: "", name, (int64_t)value);
         return;
     }
 
-- 
2.26.2



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

* [PULL 05/21] hw/core/qdev-properties: Export enum-related functions
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (3 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 04/21] hw/core/qdev-properties: Fix code style Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 06/21] hw/core/qdev-properties: Export qdev_prop_enum Eduardo Habkost
                   ` (16 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Daniel P. Berrangé,
	Eduardo Habkost, Richard Henderson, Paolo Bonzini,
	Philippe Mathieu-Daudé

From: Philippe Mathieu-Daudé <philmd@redhat.com>

We are going to split this file and reuse these static functions.
Add the local "qdev-prop-internal.h" header declaring them.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20200930164949.1425294-6-philmd@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 hw/core/qdev-prop-internal.h | 19 ++++++++++++
 hw/core/qdev-properties.c    | 58 +++++++++++++++++++-----------------
 2 files changed, 49 insertions(+), 28 deletions(-)
 create mode 100644 hw/core/qdev-prop-internal.h

diff --git a/hw/core/qdev-prop-internal.h b/hw/core/qdev-prop-internal.h
new file mode 100644
index 00000000000..2a8c9a306a5
--- /dev/null
+++ b/hw/core/qdev-prop-internal.h
@@ -0,0 +1,19 @@
+/*
+ * qdev property parsing
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#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 qdev_propinfo_set_default_value_enum(ObjectProperty *op,
+                                          const Property *prop);
+
+#endif
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 071fd5864ae..76417d09365 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -18,6 +18,7 @@
 #include "qemu/uuid.h"
 #include "qemu/units.h"
 #include "qemu/cutils.h"
+#include "qdev-prop-internal.h"
 
 void qdev_prop_set_after_realize(DeviceState *dev, const char *name,
                                   Error **errp)
@@ -53,8 +54,8 @@ void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
     return ptr;
 }
 
-static void get_enum(Object *obj, Visitor *v, const char *name, void *opaque,
-                     Error **errp)
+void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
+                            void *opaque, Error **errp)
 {
     DeviceState *dev = DEVICE(obj);
     Property *prop = opaque;
@@ -63,8 +64,8 @@ static void get_enum(Object *obj, Visitor *v, const char *name, void *opaque,
     visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
 }
 
-static void set_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)
 {
     DeviceState *dev = DEVICE(obj);
     Property *prop = opaque;
@@ -78,7 +79,8 @@ static void set_enum(Object *obj, Visitor *v, const char *name, void *opaque,
     visit_type_enum(v, prop->name, ptr, prop->info->enum_table, errp);
 }
 
-static void set_default_value_enum(ObjectProperty *op, const Property *prop)
+void qdev_propinfo_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));
@@ -669,9 +671,9 @@ const PropertyInfo qdev_prop_on_off_auto = {
     .name = "OnOffAuto",
     .description = "on/off/auto",
     .enum_table = &OnOffAuto_lookup,
-    .get = get_enum,
-    .set = set_enum,
-    .set_default_value = set_default_value_enum,
+    .get = qdev_propinfo_get_enum,
+    .set = qdev_propinfo_set_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
 };
 
 /* --- lost tick policy --- */
@@ -681,9 +683,9 @@ QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int));
 const PropertyInfo qdev_prop_losttickpolicy = {
     .name  = "LostTickPolicy",
     .enum_table  = &LostTickPolicy_lookup,
-    .get   = get_enum,
-    .set   = set_enum,
-    .set_default_value = set_default_value_enum,
+    .get   = qdev_propinfo_get_enum,
+    .set   = qdev_propinfo_set_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
 };
 
 /* --- Block device error handling policy --- */
@@ -695,9 +697,9 @@ const PropertyInfo qdev_prop_blockdev_on_error = {
     .description = "Error handling policy, "
                    "report/ignore/enospc/stop/auto",
     .enum_table = &BlockdevOnError_lookup,
-    .get = get_enum,
-    .set = set_enum,
-    .set_default_value = set_default_value_enum,
+    .get = qdev_propinfo_get_enum,
+    .set = qdev_propinfo_set_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
 };
 
 /* --- BIOS CHS translation */
@@ -709,9 +711,9 @@ const PropertyInfo qdev_prop_bios_chs_trans = {
     .description = "Logical CHS translation algorithm, "
                    "auto/none/lba/large/rechs",
     .enum_table = &BiosAtaTranslation_lookup,
-    .get = get_enum,
-    .set = set_enum,
-    .set_default_value = set_default_value_enum,
+    .get = qdev_propinfo_get_enum,
+    .set = qdev_propinfo_set_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
 };
 
 /* --- FDC default drive types */
@@ -721,9 +723,9 @@ const PropertyInfo qdev_prop_fdc_drive_type = {
     .description = "FDC drive type, "
                    "144/288/120/none/auto",
     .enum_table = &FloppyDriveType_lookup,
-    .get = get_enum,
-    .set = set_enum,
-    .set_default_value = set_default_value_enum,
+    .get = qdev_propinfo_get_enum,
+    .set = qdev_propinfo_set_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
 };
 
 /* --- MultiFDCompression --- */
@@ -733,9 +735,9 @@ const PropertyInfo qdev_prop_multifd_compression = {
     .description = "multifd_compression values, "
                    "none/zlib/zstd",
     .enum_table = &MultiFDCompression_lookup,
-    .get = get_enum,
-    .set = set_enum,
-    .set_default_value = set_default_value_enum,
+    .get = qdev_propinfo_get_enum,
+    .set = qdev_propinfo_set_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
 };
 
 /* --- pci address --- */
@@ -1416,9 +1418,9 @@ const PropertyInfo qdev_prop_off_auto_pcibar = {
     .name = "OffAutoPCIBAR",
     .description = "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
     .enum_table = &OffAutoPCIBAR_lookup,
-    .get = get_enum,
-    .set = set_enum,
-    .set_default_value = set_default_value_enum,
+    .get = qdev_propinfo_get_enum,
+    .set = qdev_propinfo_set_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
 };
 
 /* --- PCIELinkSpeed 2_5/5/8/16 -- */
@@ -1495,7 +1497,7 @@ const PropertyInfo qdev_prop_pcie_link_speed = {
     .enum_table = &PCIELinkSpeed_lookup,
     .get = get_prop_pcielinkspeed,
     .set = set_prop_pcielinkspeed,
-    .set_default_value = set_default_value_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
 };
 
 /* --- PCIELinkWidth 1/2/4/8/12/16/32 -- */
@@ -1590,5 +1592,5 @@ const PropertyInfo qdev_prop_pcie_link_width = {
     .enum_table = &PCIELinkWidth_lookup,
     .get = get_prop_pcielinkwidth,
     .set = set_prop_pcielinkwidth,
-    .set_default_value = set_default_value_enum,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
 };
-- 
2.26.2



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

* [PULL 06/21] hw/core/qdev-properties: Export qdev_prop_enum
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (4 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 05/21] hw/core/qdev-properties: Export enum-related functions Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 07/21] hw/core/qdev-properties: Export some integer-related functions Eduardo Habkost
                   ` (15 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Daniel P. Berrangé,
	Eduardo Habkost, Richard Henderson, Paolo Bonzini,
	Philippe Mathieu-Daudé

From: Philippe Mathieu-Daudé <philmd@redhat.com>

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20200930164949.1425294-7-philmd@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 include/hw/qdev-properties.h | 1 +
 hw/core/qdev-properties.c    | 7 +++++++
 2 files changed, 8 insertions(+)

diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
index 528310bb22f..44374500659 100644
--- a/include/hw/qdev-properties.h
+++ b/include/hw/qdev-properties.h
@@ -8,6 +8,7 @@
 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;
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 76417d09365..31dfe441e2e 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -86,6 +86,13 @@ void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
         qapi_enum_lookup(prop->info->enum_table, prop->defval.i));
 }
 
+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,
+};
+
 /* Bit */
 
 static uint32_t qdev_get_prop_mask(Property *prop)
-- 
2.26.2



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

* [PULL 07/21] hw/core/qdev-properties: Export some integer-related functions
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (5 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 06/21] hw/core/qdev-properties: Export qdev_prop_enum Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 08/21] hw/core/qdev-properties: Extract system-mode specific properties Eduardo Habkost
                   ` (14 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Daniel P. Berrangé,
	Eduardo Habkost, Richard Henderson, Paolo Bonzini,
	Philippe Mathieu-Daudé

From: Philippe Mathieu-Daudé <philmd@redhat.com>

We are going to split this file and reuse these static functions.
Declare them in the local "qdev-prop-internal.h" header.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20200930164949.1425294-8-philmd@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 hw/core/qdev-prop-internal.h | 11 +++++++++
 hw/core/qdev-properties.c    | 46 +++++++++++++++++++-----------------
 2 files changed, 35 insertions(+), 22 deletions(-)

diff --git a/hw/core/qdev-prop-internal.h b/hw/core/qdev-prop-internal.h
index 2a8c9a306a5..9cf5cc1d519 100644
--- a/hw/core/qdev-prop-internal.h
+++ b/hw/core/qdev-prop-internal.h
@@ -15,5 +15,16 @@ void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
 
 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 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,
+                              void *opaque, Error **errp);
 
 #endif
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 31dfe441e2e..37e309077a1 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -271,12 +271,14 @@ static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
     visit_type_uint8(v, name, ptr, errp);
 }
 
-static void set_default_value_int(ObjectProperty *op, const Property *prop)
+void qdev_propinfo_set_default_value_int(ObjectProperty *op,
+                                         const Property *prop)
 {
     object_property_set_default_int(op, prop->defval.i);
 }
 
-static void set_default_value_uint(ObjectProperty *op, const Property *prop)
+void qdev_propinfo_set_default_value_uint(ObjectProperty *op,
+                                          const Property *prop)
 {
     object_property_set_default_uint(op, prop->defval.u);
 }
@@ -285,13 +287,13 @@ const PropertyInfo qdev_prop_uint8 = {
     .name  = "uint8",
     .get   = get_uint8,
     .set   = set_uint8,
-    .set_default_value = set_default_value_uint,
+    .set_default_value = qdev_propinfo_set_default_value_uint,
 };
 
 /* --- 16bit integer --- */
 
-static void get_uint16(Object *obj, Visitor *v, const char *name,
-                       void *opaque, Error **errp)
+void qdev_propinfo_get_uint16(Object *obj, Visitor *v, const char *name,
+                              void *opaque, Error **errp)
 {
     DeviceState *dev = DEVICE(obj);
     Property *prop = opaque;
@@ -317,9 +319,9 @@ static void set_uint16(Object *obj, Visitor *v, const char *name,
 
 const PropertyInfo qdev_prop_uint16 = {
     .name  = "uint16",
-    .get   = get_uint16,
+    .get   = qdev_propinfo_get_uint16,
     .set   = set_uint16,
-    .set_default_value = set_default_value_uint,
+    .set_default_value = qdev_propinfo_set_default_value_uint,
 };
 
 /* --- 32bit integer --- */
@@ -349,8 +351,8 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
     visit_type_uint32(v, name, ptr, errp);
 }
 
-static void get_int32(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)
 {
     DeviceState *dev = DEVICE(obj);
     Property *prop = opaque;
@@ -378,14 +380,14 @@ const PropertyInfo qdev_prop_uint32 = {
     .name  = "uint32",
     .get   = get_uint32,
     .set   = set_uint32,
-    .set_default_value = set_default_value_uint,
+    .set_default_value = qdev_propinfo_set_default_value_uint,
 };
 
 const PropertyInfo qdev_prop_int32 = {
     .name  = "int32",
-    .get   = get_int32,
+    .get   = qdev_propinfo_get_int32,
     .set   = set_int32,
-    .set_default_value = set_default_value_int,
+    .set_default_value = qdev_propinfo_set_default_value_int,
 };
 
 /* --- 64bit integer --- */
@@ -444,14 +446,14 @@ const PropertyInfo qdev_prop_uint64 = {
     .name  = "uint64",
     .get   = get_uint64,
     .set   = set_uint64,
-    .set_default_value = set_default_value_uint,
+    .set_default_value = qdev_propinfo_set_default_value_uint,
 };
 
 const PropertyInfo qdev_prop_int64 = {
     .name  = "int64",
     .get   = get_int64,
     .set   = set_int64,
-    .set_default_value = set_default_value_int,
+    .set_default_value = qdev_propinfo_set_default_value_int,
 };
 
 /* --- string --- */
@@ -820,8 +822,8 @@ const PropertyInfo qdev_prop_pci_devfn = {
 
 /* --- 32bit unsigned int 'size' type --- */
 
-static void get_size32(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)
 {
     DeviceState *dev = DEVICE(obj);
     Property *prop = opaque;
@@ -861,9 +863,9 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
 
 const PropertyInfo qdev_prop_size32 = {
     .name  = "size",
-    .get = get_size32,
+    .get = qdev_propinfo_get_size32,
     .set = set_size32,
-    .set_default_value = set_default_value_uint,
+    .set_default_value = qdev_propinfo_set_default_value_uint,
 };
 
 /* --- blocksize --- */
@@ -919,9 +921,9 @@ const PropertyInfo qdev_prop_blocksize = {
     .name  = "size",
     .description = "A power of two between " MIN_BLOCK_SIZE_STR
                    " and " MAX_BLOCK_SIZE_STR,
-    .get   = get_size32,
+    .get   = qdev_propinfo_get_size32,
     .set   = set_blocksize,
-    .set_default_value = set_default_value_uint,
+    .set_default_value = qdev_propinfo_set_default_value_uint,
 };
 
 /* --- pci host address --- */
@@ -1190,7 +1192,7 @@ const PropertyInfo qdev_prop_arraylen = {
     .name = "uint32",
     .get = get_uint32,
     .set = set_prop_arraylen,
-    .set_default_value = set_default_value_uint,
+    .set_default_value = qdev_propinfo_set_default_value_uint,
 };
 
 /* --- public helpers --- */
@@ -1401,7 +1403,7 @@ const PropertyInfo qdev_prop_size = {
     .name  = "size",
     .get = get_size,
     .set = set_size,
-    .set_default_value = set_default_value_uint,
+    .set_default_value = qdev_propinfo_set_default_value_uint,
 };
 
 /* --- object link property --- */
-- 
2.26.2



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

* [PULL 08/21] hw/core/qdev-properties: Extract system-mode specific properties
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (6 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 07/21] hw/core/qdev-properties: Export some integer-related functions Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 09/21] hw/core/cpu: Add missing 'exec/cpu-common.h' include Eduardo Habkost
                   ` (13 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Daniel P. Berrangé,
	Eduardo Habkost, Richard Henderson, Paolo Bonzini,
	Philippe Mathieu-Daudé

From: Philippe Mathieu-Daudé <philmd@redhat.com>

Move properties specific to machines into a separate file.

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20200930164949.1425294-9-philmd@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 hw/core/qdev-properties-system.c | 687 ++++++++++++++++++++++++++++++-
 hw/core/qdev-properties.c        | 674 ------------------------------
 2 files changed, 679 insertions(+), 682 deletions(-)

diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index b29daf4fb51..49bdd125814 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -11,19 +11,25 @@
  */
 
 #include "qemu/osdep.h"
-#include "audio/audio.h"
-#include "net/net.h"
 #include "hw/qdev-properties.h"
 #include "qapi/error.h"
+#include "qapi/visitor.h"
+#include "qapi/qapi-types-block.h"
+#include "qapi/qapi-types-machine.h"
+#include "qapi/qapi-types-migration.h"
 #include "qapi/qmp/qerror.h"
+#include "qemu/ctype.h"
+#include "qemu/cutils.h"
+#include "qemu/units.h"
+#include "qemu/error-report.h"
+#include "qdev-prop-internal.h"
+
+#include "audio/audio.h"
+#include "chardev/char-fe.h"
 #include "sysemu/block-backend.h"
 #include "sysemu/blockdev.h"
-#include "hw/block/block.h"
-#include "net/hub.h"
-#include "qapi/visitor.h"
-#include "chardev/char-fe.h"
-#include "sysemu/iothread.h"
-#include "sysemu/tpm_backend.h"
+#include "net/net.h"
+#include "hw/pci/pci.h"
 
 static bool check_prop_still_unset(DeviceState *dev, const char *name,
                                    const void *old_val, const char *new_val,
@@ -280,6 +286,96 @@ const PropertyInfo qdev_prop_chr = {
     .release = release_chr,
 };
 
+/* --- mac address --- */
+
+/*
+ * accepted syntax versions:
+ *   01:02:03:04:05:06
+ *   01-02-03-04-05-06
+ */
+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);
+    char buffer[2 * 6 + 5 + 1];
+    char *p = buffer;
+
+    snprintf(buffer, sizeof(buffer), "%02x:%02x:%02x:%02x:%02x:%02x",
+             mac->a[0], mac->a[1], mac->a[2],
+             mac->a[3], mac->a[4], mac->a[5]);
+
+    visit_type_str(v, name, &p, errp);
+}
+
+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(dev, 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;
+    }
+
+    for (i = 0, pos = 0; i < 6; i++, pos += 3) {
+        long val;
+
+        if (!qemu_isxdigit(str[pos])) {
+            goto inval;
+        }
+        if (!qemu_isxdigit(str[pos + 1])) {
+            goto inval;
+        }
+        if (i == 5) {
+            if (str[pos + 2] != '\0') {
+                goto inval;
+            }
+        } else {
+            if (str[pos + 2] != ':' && str[pos + 2] != '-') {
+                goto inval;
+            }
+        }
+        if (qemu_strtol(str + pos, &p, 16, &val) < 0 || val > 0xff) {
+            goto inval;
+        }
+        mac->a[i] = val;
+    }
+    g_free(str);
+    return;
+
+inval:
+    error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+    g_free(str);
+}
+
+const PropertyInfo qdev_prop_macaddr = {
+    .name  = "str",
+    .description = "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
+    .get   = get_mac,
+    .set   = set_mac,
+};
+
+void qdev_prop_set_macaddr(DeviceState *dev, const char *name,
+                           const uint8_t *value)
+{
+    char str[2 * 6 + 5 + 1];
+    snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x",
+             value[0], value[1], value[2], value[3], value[4], value[5]);
+
+    object_property_set_str(OBJECT(dev), name, str, &error_abort);
+}
+
 /* --- netdev device --- */
 static void get_netdev(Object *obj, Visitor *v, const char *name,
                        void *opaque, Error **errp)
@@ -465,3 +561,578 @@ void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd)
     }
     nd->instantiated = 1;
 }
+
+/* --- lost tick policy --- */
+
+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,
+};
+
+/* --- blocksize --- */
+
+/* lower limit is sector size */
+#define MIN_BLOCK_SIZE          512
+#define MIN_BLOCK_SIZE_STR      "512 B"
+/*
+ * upper limit is arbitrary, 2 MiB looks sufficient for all sensible uses, and
+ * matches qcow2 cluster size limit
+ */
+#define MAX_BLOCK_SIZE          (2 * MiB)
+#define MAX_BLOCK_SIZE_STR      "2 MiB"
+
+static void set_blocksize(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);
+    uint64_t value;
+
+    if (dev->realized) {
+        qdev_prop_set_after_realize(dev, name, errp);
+        return;
+    }
+
+    if (!visit_type_size(v, name, &value, errp)) {
+        return;
+    }
+    /* value of 0 means "unset" */
+    if (value && (value < MIN_BLOCK_SIZE || value > MAX_BLOCK_SIZE)) {
+        error_setg(errp,
+                   "Property %s.%s doesn't take value %" PRIu64
+                   " (minimum: " MIN_BLOCK_SIZE_STR
+                   ", maximum: " MAX_BLOCK_SIZE_STR ")",
+                   dev->id ? : "", name, value);
+        return;
+    }
+
+    /* We rely on power-of-2 blocksizes for bitmasks */
+    if ((value & (value - 1)) != 0) {
+        error_setg(errp,
+                  "Property %s.%s doesn't take value '%" PRId64 "', "
+                  "it's not a power of 2", dev->id ?: "", name, (int64_t)value);
+        return;
+    }
+
+    *ptr = value;
+}
+
+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,
+    .set   = set_blocksize,
+    .set_default_value = qdev_propinfo_set_default_value_uint,
+};
+
+/* --- Block device error handling policy --- */
+
+QEMU_BUILD_BUG_ON(sizeof(BlockdevOnError) != sizeof(int));
+
+const PropertyInfo qdev_prop_blockdev_on_error = {
+    .name = "BlockdevOnError",
+    .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,
+};
+
+/* --- BIOS CHS translation */
+
+QEMU_BUILD_BUG_ON(sizeof(BiosAtaTranslation) != sizeof(int));
+
+const PropertyInfo qdev_prop_bios_chs_trans = {
+    .name = "BiosAtaTranslation",
+    .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,
+};
+
+/* --- FDC default drive types */
+
+const PropertyInfo qdev_prop_fdc_drive_type = {
+    .name = "FdcDriveType",
+    .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,
+};
+
+/* --- MultiFDCompression --- */
+
+const PropertyInfo qdev_prop_multifd_compression = {
+    .name = "MultiFDCompression",
+    .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,
+};
+
+/* --- Reserved Region --- */
+
+/*
+ * Accepted syntax:
+ *   <low address>:<high address>:<type>
+ *   where low/high addresses are uint64_t in hexadecimal
+ *   and type is a non-negative decimal integer
+ */
+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);
+    char buffer[64];
+    char *p = buffer;
+    int rc;
+
+    rc = snprintf(buffer, sizeof(buffer), "0x%"PRIx64":0x%"PRIx64":%u",
+                  rr->low, rr->high, rr->type);
+    assert(rc < sizeof(buffer));
+
+    visit_type_str(v, name, &p, errp);
+}
+
+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(dev, prop);
+    Error *local_err = NULL;
+    const char *endptr;
+    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);
+        return;
+    }
+
+    ret = qemu_strtou64(str, &endptr, 16, &rr->low);
+    if (ret) {
+        error_setg(errp, "start address of '%s'"
+                   " must be a hexadecimal integer", name);
+        goto out;
+    }
+    if (*endptr != ':') {
+        goto separator_error;
+    }
+
+    ret = qemu_strtou64(endptr + 1, &endptr, 16, &rr->high);
+    if (ret) {
+        error_setg(errp, "end address of '%s'"
+                   " must be a hexadecimal integer", name);
+        goto out;
+    }
+    if (*endptr != ':') {
+        goto separator_error;
+    }
+
+    ret = qemu_strtoui(endptr + 1, &endptr, 10, &rr->type);
+    if (ret) {
+        error_setg(errp, "type of '%s'"
+                   " must be a non-negative decimal integer", name);
+    }
+    goto out;
+
+separator_error:
+    error_setg(errp, "reserved region fields must be separated with ':'");
+out:
+    g_free(str);
+    return;
+}
+
+const PropertyInfo qdev_prop_reserved_region = {
+    .name  = "reserved_region",
+    .description = "Reserved Region, example: 0xFEE00000:0xFEEFFFFF:0",
+    .get   = get_reserved_region,
+    .set   = set_reserved_region,
+};
+
+/* --- pci address --- */
+
+/*
+ * bus-local address, i.e. "$slot" or "$slot.$fn"
+ */
+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(dev, 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;
+        }
+        if (value < -1 || value > 255) {
+            error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
+                       name ? name : "null", "pci_devfn");
+            return;
+        }
+        *ptr = value;
+        return;
+    }
+
+    if (sscanf(str, "%x.%x%n", &slot, &fn, &n) != 2) {
+        fn = 0;
+        if (sscanf(str, "%x%n", &slot, &n) != 1) {
+            goto invalid;
+        }
+    }
+    if (str[n] != '\0' || fn > 7 || slot > 31) {
+        goto invalid;
+    }
+    *ptr = slot << 3 | fn;
+    g_free(str);
+    return;
+
+invalid:
+    error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+    g_free(str);
+}
+
+static int print_pci_devfn(DeviceState *dev, Property *prop, char *dest,
+                           size_t len)
+{
+    int32_t *ptr = qdev_get_prop_ptr(dev, prop);
+
+    if (*ptr == -1) {
+        return snprintf(dest, len, "<unset>");
+    } else {
+        return snprintf(dest, len, "%02x.%x", *ptr >> 3, *ptr & 7);
+    }
+}
+
+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,
+    .set   = set_pci_devfn,
+    .set_default_value = qdev_propinfo_set_default_value_int,
+};
+
+/* --- pci host address --- */
+
+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);
+    char buffer[] = "ffff:ff:ff.f";
+    char *p = buffer;
+    int rc = 0;
+
+    /*
+     * Catch "invalid" device reference from vfio-pci and allow the
+     * default buffer representing the non-existent device to be used.
+     */
+    if (~addr->domain || ~addr->bus || ~addr->slot || ~addr->function) {
+        rc = snprintf(buffer, sizeof(buffer), "%04x:%02x:%02x.%0d",
+                      addr->domain, addr->bus, addr->slot, addr->function);
+        assert(rc == sizeof(buffer) - 1);
+    }
+
+    visit_type_str(v, name, &p, errp);
+}
+
+/*
+ * Parse [<domain>:]<bus>:<slot>.<func>
+ *   if <domain> is not supplied, it's assumed to be 0.
+ */
+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(dev, prop);
+    char *str, *p;
+    const char *e;
+    unsigned long val;
+    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;
+    }
+
+    p = str;
+    if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0xffff || e == p) {
+        goto inval;
+    }
+    if (*e != ':') {
+        goto inval;
+    }
+    bus = val;
+
+    p = (char *)e + 1;
+    if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
+        goto inval;
+    }
+    if (*e == ':') {
+        dom = bus;
+        bus = val;
+        p = (char *)e + 1;
+        if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
+            goto inval;
+        }
+    }
+    slot = val;
+
+    if (*e != '.') {
+        goto inval;
+    }
+    p = (char *)e + 1;
+    if (qemu_strtoul(p, &e, 10, &val) < 0 || val > 7 || e == p) {
+        goto inval;
+    }
+    func = val;
+
+    if (bus > 0xff) {
+        goto inval;
+    }
+
+    if (*e) {
+        goto inval;
+    }
+
+    addr->domain = dom;
+    addr->bus = bus;
+    addr->slot = slot;
+    addr->function = func;
+
+    g_free(str);
+    return;
+
+inval:
+    error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
+    g_free(str);
+}
+
+const PropertyInfo qdev_prop_pci_host_devaddr = {
+    .name = "str",
+    .description = "Address (bus/device/function) of "
+                   "the host device, example: 04:10.0",
+    .get = get_pci_host_devaddr,
+    .set = set_pci_host_devaddr,
+};
+
+/* --- OffAutoPCIBAR off/auto/bar0/bar1/bar2/bar3/bar4/bar5 --- */
+
+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,
+};
+
+/* --- PCIELinkSpeed 2_5/5/8/16 -- */
+
+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);
+    int speed;
+
+    switch (*p) {
+    case QEMU_PCI_EXP_LNK_2_5GT:
+        speed = PCIE_LINK_SPEED_2_5;
+        break;
+    case QEMU_PCI_EXP_LNK_5GT:
+        speed = PCIE_LINK_SPEED_5;
+        break;
+    case QEMU_PCI_EXP_LNK_8GT:
+        speed = PCIE_LINK_SPEED_8;
+        break;
+    case QEMU_PCI_EXP_LNK_16GT:
+        speed = PCIE_LINK_SPEED_16;
+        break;
+    default:
+        /* Unreachable */
+        abort();
+    }
+
+    visit_type_enum(v, prop->name, &speed, prop->info->enum_table, errp);
+}
+
+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(dev, prop);
+    int speed;
+
+    if (dev->realized) {
+        qdev_prop_set_after_realize(dev, name, errp);
+        return;
+    }
+
+    if (!visit_type_enum(v, prop->name, &speed, prop->info->enum_table,
+                         errp)) {
+        return;
+    }
+
+    switch (speed) {
+    case PCIE_LINK_SPEED_2_5:
+        *p = QEMU_PCI_EXP_LNK_2_5GT;
+        break;
+    case PCIE_LINK_SPEED_5:
+        *p = QEMU_PCI_EXP_LNK_5GT;
+        break;
+    case PCIE_LINK_SPEED_8:
+        *p = QEMU_PCI_EXP_LNK_8GT;
+        break;
+    case PCIE_LINK_SPEED_16:
+        *p = QEMU_PCI_EXP_LNK_16GT;
+        break;
+    default:
+        /* Unreachable */
+        abort();
+    }
+}
+
+const PropertyInfo qdev_prop_pcie_link_speed = {
+    .name = "PCIELinkSpeed",
+    .description = "2_5/5/8/16",
+    .enum_table = &PCIELinkSpeed_lookup,
+    .get = get_prop_pcielinkspeed,
+    .set = set_prop_pcielinkspeed,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
+};
+
+/* --- PCIELinkWidth 1/2/4/8/12/16/32 -- */
+
+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);
+    int width;
+
+    switch (*p) {
+    case QEMU_PCI_EXP_LNK_X1:
+        width = PCIE_LINK_WIDTH_1;
+        break;
+    case QEMU_PCI_EXP_LNK_X2:
+        width = PCIE_LINK_WIDTH_2;
+        break;
+    case QEMU_PCI_EXP_LNK_X4:
+        width = PCIE_LINK_WIDTH_4;
+        break;
+    case QEMU_PCI_EXP_LNK_X8:
+        width = PCIE_LINK_WIDTH_8;
+        break;
+    case QEMU_PCI_EXP_LNK_X12:
+        width = PCIE_LINK_WIDTH_12;
+        break;
+    case QEMU_PCI_EXP_LNK_X16:
+        width = PCIE_LINK_WIDTH_16;
+        break;
+    case QEMU_PCI_EXP_LNK_X32:
+        width = PCIE_LINK_WIDTH_32;
+        break;
+    default:
+        /* Unreachable */
+        abort();
+    }
+
+    visit_type_enum(v, prop->name, &width, prop->info->enum_table, errp);
+}
+
+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(dev, prop);
+    int width;
+
+    if (dev->realized) {
+        qdev_prop_set_after_realize(dev, name, errp);
+        return;
+    }
+
+    if (!visit_type_enum(v, prop->name, &width, prop->info->enum_table,
+                         errp)) {
+        return;
+    }
+
+    switch (width) {
+    case PCIE_LINK_WIDTH_1:
+        *p = QEMU_PCI_EXP_LNK_X1;
+        break;
+    case PCIE_LINK_WIDTH_2:
+        *p = QEMU_PCI_EXP_LNK_X2;
+        break;
+    case PCIE_LINK_WIDTH_4:
+        *p = QEMU_PCI_EXP_LNK_X4;
+        break;
+    case PCIE_LINK_WIDTH_8:
+        *p = QEMU_PCI_EXP_LNK_X8;
+        break;
+    case PCIE_LINK_WIDTH_12:
+        *p = QEMU_PCI_EXP_LNK_X12;
+        break;
+    case PCIE_LINK_WIDTH_16:
+        *p = QEMU_PCI_EXP_LNK_X16;
+        break;
+    case PCIE_LINK_WIDTH_32:
+        *p = QEMU_PCI_EXP_LNK_X32;
+        break;
+    default:
+        /* Unreachable */
+        abort();
+    }
+}
+
+const PropertyInfo qdev_prop_pcie_link_width = {
+    .name = "PCIELinkWidth",
+    .description = "1/2/4/8/12/16/32",
+    .enum_table = &PCIELinkWidth_lookup,
+    .get = get_prop_pcielinkwidth,
+    .set = set_prop_pcielinkwidth,
+    .set_default_value = qdev_propinfo_set_default_value_enum,
+};
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 37e309077a1..509cbf155d2 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1,20 +1,11 @@
 #include "qemu/osdep.h"
-#include "qemu/cutils.h"
-#include "net/net.h"
 #include "hw/qdev-properties.h"
 #include "qapi/error.h"
-#include "hw/pci/pci.h"
-#include "qapi/qapi-types-block.h"
-#include "qapi/qapi-types-machine.h"
 #include "qapi/qapi-types-misc.h"
 #include "qapi/qmp/qerror.h"
 #include "qemu/ctype.h"
 #include "qemu/error-report.h"
-#include "qapi/qapi-types-migration.h"
-#include "hw/block/block.h"
-#include "net/hub.h"
 #include "qapi/visitor.h"
-#include "chardev/char.h"
 #include "qemu/uuid.h"
 #include "qemu/units.h"
 #include "qemu/cutils.h"
@@ -506,174 +497,6 @@ const PropertyInfo qdev_prop_string = {
     .set   = set_string,
 };
 
-/* --- mac address --- */
-
-/*
- * accepted syntax versions:
- *   01:02:03:04:05:06
- *   01-02-03-04-05-06
- */
-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);
-    char buffer[2 * 6 + 5 + 1];
-    char *p = buffer;
-
-    snprintf(buffer, sizeof(buffer), "%02x:%02x:%02x:%02x:%02x:%02x",
-             mac->a[0], mac->a[1], mac->a[2],
-             mac->a[3], mac->a[4], mac->a[5]);
-
-    visit_type_str(v, name, &p, errp);
-}
-
-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(dev, 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;
-    }
-
-    for (i = 0, pos = 0; i < 6; i++, pos += 3) {
-        long val;
-
-        if (!qemu_isxdigit(str[pos])) {
-            goto inval;
-        }
-        if (!qemu_isxdigit(str[pos + 1])) {
-            goto inval;
-        }
-        if (i == 5) {
-            if (str[pos + 2] != '\0') {
-                goto inval;
-            }
-        } else {
-            if (str[pos + 2] != ':' && str[pos + 2] != '-') {
-                goto inval;
-            }
-        }
-        if (qemu_strtol(str + pos, &p, 16, &val) < 0 || val > 0xff) {
-            goto inval;
-        }
-        mac->a[i] = val;
-    }
-    g_free(str);
-    return;
-
-inval:
-    error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
-    g_free(str);
-}
-
-const PropertyInfo qdev_prop_macaddr = {
-    .name  = "str",
-    .description = "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
-    .get   = get_mac,
-    .set   = set_mac,
-};
-
-/* --- Reserved Region --- */
-
-/*
- * Accepted syntax:
- *   <low address>:<high address>:<type>
- *   where low/high addresses are uint64_t in hexadecimal
- *   and type is a non-negative decimal integer
- */
-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);
-    char buffer[64];
-    char *p = buffer;
-    int rc;
-
-    rc = snprintf(buffer, sizeof(buffer), "0x%"PRIx64":0x%"PRIx64":%u",
-                  rr->low, rr->high, rr->type);
-    assert(rc < sizeof(buffer));
-
-    visit_type_str(v, name, &p, errp);
-}
-
-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(dev, prop);
-    Error *local_err = NULL;
-    const char *endptr;
-    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);
-        return;
-    }
-
-    ret = qemu_strtou64(str, &endptr, 16, &rr->low);
-    if (ret) {
-        error_setg(errp, "start address of '%s'"
-                   " must be a hexadecimal integer", name);
-        goto out;
-    }
-    if (*endptr != ':') {
-        goto separator_error;
-    }
-
-    ret = qemu_strtou64(endptr + 1, &endptr, 16, &rr->high);
-    if (ret) {
-        error_setg(errp, "end address of '%s'"
-                   " must be a hexadecimal integer", name);
-        goto out;
-    }
-    if (*endptr != ':') {
-        goto separator_error;
-    }
-
-    ret = qemu_strtoui(endptr + 1, &endptr, 10, &rr->type);
-    if (ret) {
-        error_setg(errp, "type of '%s'"
-                   " must be a non-negative decimal integer", name);
-    }
-    goto out;
-
-separator_error:
-    error_setg(errp, "reserved region fields must be separated with ':'");
-out:
-    g_free(str);
-    return;
-}
-
-const PropertyInfo qdev_prop_reserved_region = {
-    .name  = "reserved_region",
-    .description = "Reserved Region, example: 0xFEE00000:0xFEEFFFFF:0",
-    .get   = get_reserved_region,
-    .set   = set_reserved_region,
-};
-
 /* --- on/off/auto --- */
 
 const PropertyInfo qdev_prop_on_off_auto = {
@@ -685,141 +508,6 @@ const PropertyInfo qdev_prop_on_off_auto = {
     .set_default_value = qdev_propinfo_set_default_value_enum,
 };
 
-/* --- lost tick policy --- */
-
-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,
-};
-
-/* --- Block device error handling policy --- */
-
-QEMU_BUILD_BUG_ON(sizeof(BlockdevOnError) != sizeof(int));
-
-const PropertyInfo qdev_prop_blockdev_on_error = {
-    .name = "BlockdevOnError",
-    .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,
-};
-
-/* --- BIOS CHS translation */
-
-QEMU_BUILD_BUG_ON(sizeof(BiosAtaTranslation) != sizeof(int));
-
-const PropertyInfo qdev_prop_bios_chs_trans = {
-    .name = "BiosAtaTranslation",
-    .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,
-};
-
-/* --- FDC default drive types */
-
-const PropertyInfo qdev_prop_fdc_drive_type = {
-    .name = "FdcDriveType",
-    .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,
-};
-
-/* --- MultiFDCompression --- */
-
-const PropertyInfo qdev_prop_multifd_compression = {
-    .name = "MultiFDCompression",
-    .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,
-};
-
-/* --- pci address --- */
-
-/*
- * bus-local address, i.e. "$slot" or "$slot.$fn"
- */
-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(dev, 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;
-        }
-        if (value < -1 || value > 255) {
-            error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
-                       name ? name : "null", "pci_devfn");
-            return;
-        }
-        *ptr = value;
-        return;
-    }
-
-    if (sscanf(str, "%x.%x%n", &slot, &fn, &n) != 2) {
-        fn = 0;
-        if (sscanf(str, "%x%n", &slot, &n) != 1) {
-            goto invalid;
-        }
-    }
-    if (str[n] != '\0' || fn > 7 || slot > 31) {
-        goto invalid;
-    }
-    *ptr = slot << 3 | fn;
-    g_free(str);
-    return;
-
-invalid:
-    error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
-    g_free(str);
-}
-
-static int print_pci_devfn(DeviceState *dev, Property *prop, char *dest,
-                           size_t len)
-{
-    int32_t *ptr = qdev_get_prop_ptr(dev, prop);
-
-    if (*ptr == -1) {
-        return snprintf(dest, len, "<unset>");
-    } else {
-        return snprintf(dest, len, "%02x.%x", *ptr >> 3, *ptr & 7);
-    }
-}
-
-const PropertyInfo qdev_prop_pci_devfn = {
-    .name  = "int32",
-    .description = "Slot and optional function number, example: 06.0 or 06",
-    .print = print_pci_devfn,
-    .get   = get_int32,
-    .set   = set_pci_devfn,
-    .set_default_value = set_default_value_int,
-};
-
 /* --- 32bit unsigned int 'size' type --- */
 
 void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
@@ -868,175 +556,6 @@ const PropertyInfo qdev_prop_size32 = {
     .set_default_value = qdev_propinfo_set_default_value_uint,
 };
 
-/* --- blocksize --- */
-
-/* lower limit is sector size */
-#define MIN_BLOCK_SIZE          512
-#define MIN_BLOCK_SIZE_STR      "512 B"
-/*
- * upper limit is arbitrary, 2 MiB looks sufficient for all sensible uses, and
- * matches qcow2 cluster size limit
- */
-#define MAX_BLOCK_SIZE          (2 * MiB)
-#define MAX_BLOCK_SIZE_STR      "2 MiB"
-
-static void set_blocksize(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);
-    uint64_t value;
-
-    if (dev->realized) {
-        qdev_prop_set_after_realize(dev, name, errp);
-        return;
-    }
-
-    if (!visit_type_size(v, name, &value, errp)) {
-        return;
-    }
-    /* value of 0 means "unset" */
-    if (value && (value < MIN_BLOCK_SIZE || value > MAX_BLOCK_SIZE)) {
-        error_setg(errp,
-                   "Property %s.%s doesn't take value %" PRIu64
-                   " (minimum: " MIN_BLOCK_SIZE_STR
-                   ", maximum: " MAX_BLOCK_SIZE_STR ")",
-                   dev->id ? : "", name, value);
-        return;
-    }
-
-    /* We rely on power-of-2 blocksizes for bitmasks */
-    if ((value & (value - 1)) != 0) {
-        error_setg(errp,
-                  "Property %s.%s doesn't take value '%" PRId64 "', "
-                  "it's not a power of 2", dev->id ?: "", name, (int64_t)value);
-        return;
-    }
-
-    *ptr = value;
-}
-
-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,
-    .set   = set_blocksize,
-    .set_default_value = qdev_propinfo_set_default_value_uint,
-};
-
-/* --- pci host address --- */
-
-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);
-    char buffer[] = "ffff:ff:ff.f";
-    char *p = buffer;
-    int rc = 0;
-
-    /*
-     * Catch "invalid" device reference from vfio-pci and allow the
-     * default buffer representing the non-existent device to be used.
-     */
-    if (~addr->domain || ~addr->bus || ~addr->slot || ~addr->function) {
-        rc = snprintf(buffer, sizeof(buffer), "%04x:%02x:%02x.%0d",
-                      addr->domain, addr->bus, addr->slot, addr->function);
-        assert(rc == sizeof(buffer) - 1);
-    }
-
-    visit_type_str(v, name, &p, errp);
-}
-
-/*
- * Parse [<domain>:]<bus>:<slot>.<func>
- *   if <domain> is not supplied, it's assumed to be 0.
- */
-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(dev, prop);
-    char *str, *p;
-    const char *e;
-    unsigned long val;
-    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;
-    }
-
-    p = str;
-    if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0xffff || e == p) {
-        goto inval;
-    }
-    if (*e != ':') {
-        goto inval;
-    }
-    bus = val;
-
-    p = (char *)e + 1;
-    if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
-        goto inval;
-    }
-    if (*e == ':') {
-        dom = bus;
-        bus = val;
-        p = (char *)e + 1;
-        if (qemu_strtoul(p, &e, 16, &val) < 0 || val > 0x1f || e == p) {
-            goto inval;
-        }
-    }
-    slot = val;
-
-    if (*e != '.') {
-        goto inval;
-    }
-    p = (char *)e + 1;
-    if (qemu_strtoul(p, &e, 10, &val) < 0 || val > 7 || e == p) {
-        goto inval;
-    }
-    func = val;
-
-    if (bus > 0xff) {
-        goto inval;
-    }
-
-    if (*e) {
-        goto inval;
-    }
-
-    addr->domain = dom;
-    addr->bus = bus;
-    addr->slot = slot;
-    addr->function = func;
-
-    g_free(str);
-    return;
-
-inval:
-    error_set_from_qdev_prop_error(errp, EINVAL, dev, prop, str);
-    g_free(str);
-}
-
-const PropertyInfo qdev_prop_pci_host_devaddr = {
-    .name = "str",
-    .description = "Address (bus/device/function) of "
-                   "the host device, example: 04:10.0",
-    .get = get_pci_host_devaddr,
-    .set = set_pci_host_devaddr,
-};
-
 /* --- UUID --- */
 
 static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
@@ -1286,16 +805,6 @@ void qdev_prop_set_string(DeviceState *dev, const char *name, const char *value)
     object_property_set_str(OBJECT(dev), name, value, &error_abort);
 }
 
-void qdev_prop_set_macaddr(DeviceState *dev, const char *name,
-                           const uint8_t *value)
-{
-    char str[2 * 6 + 5 + 1];
-    snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x",
-             value[0], value[1], value[2], value[3], value[4], value[5]);
-
-    object_property_set_str(OBJECT(dev), name, str, &error_abort);
-}
-
 void qdev_prop_set_enum(DeviceState *dev, const char *name, int value)
 {
     Property *prop;
@@ -1420,186 +929,3 @@ const PropertyInfo qdev_prop_link = {
     .name = "link",
     .create = create_link_property,
 };
-
-/* --- OffAutoPCIBAR off/auto/bar0/bar1/bar2/bar3/bar4/bar5 --- */
-
-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,
-};
-
-/* --- PCIELinkSpeed 2_5/5/8/16 -- */
-
-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);
-    int speed;
-
-    switch (*p) {
-    case QEMU_PCI_EXP_LNK_2_5GT:
-        speed = PCIE_LINK_SPEED_2_5;
-        break;
-    case QEMU_PCI_EXP_LNK_5GT:
-        speed = PCIE_LINK_SPEED_5;
-        break;
-    case QEMU_PCI_EXP_LNK_8GT:
-        speed = PCIE_LINK_SPEED_8;
-        break;
-    case QEMU_PCI_EXP_LNK_16GT:
-        speed = PCIE_LINK_SPEED_16;
-        break;
-    default:
-        /* Unreachable */
-        abort();
-    }
-
-    visit_type_enum(v, prop->name, &speed, prop->info->enum_table, errp);
-}
-
-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(dev, prop);
-    int speed;
-
-    if (dev->realized) {
-        qdev_prop_set_after_realize(dev, name, errp);
-        return;
-    }
-
-    if (!visit_type_enum(v, prop->name, &speed, prop->info->enum_table,
-                         errp)) {
-        return;
-    }
-
-    switch (speed) {
-    case PCIE_LINK_SPEED_2_5:
-        *p = QEMU_PCI_EXP_LNK_2_5GT;
-        break;
-    case PCIE_LINK_SPEED_5:
-        *p = QEMU_PCI_EXP_LNK_5GT;
-        break;
-    case PCIE_LINK_SPEED_8:
-        *p = QEMU_PCI_EXP_LNK_8GT;
-        break;
-    case PCIE_LINK_SPEED_16:
-        *p = QEMU_PCI_EXP_LNK_16GT;
-        break;
-    default:
-        /* Unreachable */
-        abort();
-    }
-}
-
-const PropertyInfo qdev_prop_pcie_link_speed = {
-    .name = "PCIELinkSpeed",
-    .description = "2_5/5/8/16",
-    .enum_table = &PCIELinkSpeed_lookup,
-    .get = get_prop_pcielinkspeed,
-    .set = set_prop_pcielinkspeed,
-    .set_default_value = qdev_propinfo_set_default_value_enum,
-};
-
-/* --- PCIELinkWidth 1/2/4/8/12/16/32 -- */
-
-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);
-    int width;
-
-    switch (*p) {
-    case QEMU_PCI_EXP_LNK_X1:
-        width = PCIE_LINK_WIDTH_1;
-        break;
-    case QEMU_PCI_EXP_LNK_X2:
-        width = PCIE_LINK_WIDTH_2;
-        break;
-    case QEMU_PCI_EXP_LNK_X4:
-        width = PCIE_LINK_WIDTH_4;
-        break;
-    case QEMU_PCI_EXP_LNK_X8:
-        width = PCIE_LINK_WIDTH_8;
-        break;
-    case QEMU_PCI_EXP_LNK_X12:
-        width = PCIE_LINK_WIDTH_12;
-        break;
-    case QEMU_PCI_EXP_LNK_X16:
-        width = PCIE_LINK_WIDTH_16;
-        break;
-    case QEMU_PCI_EXP_LNK_X32:
-        width = PCIE_LINK_WIDTH_32;
-        break;
-    default:
-        /* Unreachable */
-        abort();
-    }
-
-    visit_type_enum(v, prop->name, &width, prop->info->enum_table, errp);
-}
-
-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(dev, prop);
-    int width;
-
-    if (dev->realized) {
-        qdev_prop_set_after_realize(dev, name, errp);
-        return;
-    }
-
-    if (!visit_type_enum(v, prop->name, &width, prop->info->enum_table,
-                         errp)) {
-        return;
-    }
-
-    switch (width) {
-    case PCIE_LINK_WIDTH_1:
-        *p = QEMU_PCI_EXP_LNK_X1;
-        break;
-    case PCIE_LINK_WIDTH_2:
-        *p = QEMU_PCI_EXP_LNK_X2;
-        break;
-    case PCIE_LINK_WIDTH_4:
-        *p = QEMU_PCI_EXP_LNK_X4;
-        break;
-    case PCIE_LINK_WIDTH_8:
-        *p = QEMU_PCI_EXP_LNK_X8;
-        break;
-    case PCIE_LINK_WIDTH_12:
-        *p = QEMU_PCI_EXP_LNK_X12;
-        break;
-    case PCIE_LINK_WIDTH_16:
-        *p = QEMU_PCI_EXP_LNK_X16;
-        break;
-    case PCIE_LINK_WIDTH_32:
-        *p = QEMU_PCI_EXP_LNK_X32;
-        break;
-    default:
-        /* Unreachable */
-        abort();
-    }
-}
-
-const PropertyInfo qdev_prop_pcie_link_width = {
-    .name = "PCIELinkWidth",
-    .description = "1/2/4/8/12/16/32",
-    .enum_table = &PCIELinkWidth_lookup,
-    .get = get_prop_pcielinkwidth,
-    .set = set_prop_pcielinkwidth,
-    .set_default_value = qdev_propinfo_set_default_value_enum,
-};
-- 
2.26.2



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

* [PULL 09/21] hw/core/cpu: Add missing 'exec/cpu-common.h' include
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (7 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 08/21] hw/core/qdev-properties: Extract system-mode specific properties Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 10/21] qom: Improve error message displayed with missing object properties Eduardo Habkost
                   ` (12 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé,
	Eduardo Habkost, Philippe Mathieu-Daudé

From: Philippe Mathieu-Daudé <philmd@redhat.com>

cpu_common_reset() uses tcg_flush_softmmu_tlb() which is
declared in "exec/cpu-common.h". Add the missing header
to avoid when refactoring other headers:

  hw/core/cpu.c: In function ‘cpu_common_reset’:
  hw/core/cpu.c:273:9: error: implicit declaration of function ‘tcg_flush_softmmu_tlb’ [-Werror=implicit-function-declaration]
    273 |         tcg_flush_softmmu_tlb(cpu);
        |         ^~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20200908123433.105706-1-philmd@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 hw/core/cpu.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/hw/core/cpu.c b/hw/core/cpu.c
index c55c09f734c..b06eb38ecca 100644
--- a/hw/core/cpu.c
+++ b/hw/core/cpu.c
@@ -26,6 +26,7 @@
 #include "qemu/log.h"
 #include "qemu/main-loop.h"
 #include "exec/log.h"
+#include "exec/cpu-common.h"
 #include "qemu/error-report.h"
 #include "qemu/qemu-print.h"
 #include "sysemu/tcg.h"
-- 
2.26.2



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

* [PULL 10/21] qom: Improve error message displayed with missing object properties
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (8 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 09/21] hw/core/cpu: Add missing 'exec/cpu-common.h' include Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 11/21] qom: Fix DECLARE_*CHECKER documentation Eduardo Habkost
                   ` (11 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Daniel P. Berrangé,
	Eduardo Habkost, Li Qiang, Philippe Mathieu-Daudé,
	Paolo Bonzini

From: Philippe Mathieu-Daudé <f4bug@amsat.org>

Instead of only displaying the property missing, also display
the object name. This help developer to quickly figure out the
mistake without opening a debugger.

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Li Qiang <liq3ea@gmail.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20200920155340.401482-1-f4bug@amsat.org>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 qom/object.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/qom/object.c b/qom/object.c
index c335dce7e4a..10653552334 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1291,7 +1291,8 @@ ObjectProperty *object_property_find_err(Object *obj, const char *name,
 {
     ObjectProperty *prop = object_property_find(obj, name);
     if (!prop) {
-        error_setg(errp, "Property '.%s' not found", name);
+        error_setg(errp, "Property '%s.%s' not found",
+                   object_get_typename(obj), name);
     }
     return prop;
 }
-- 
2.26.2



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

* [PULL 11/21] qom: Fix DECLARE_*CHECKER documentation
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (9 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 10/21] qom: Improve error message displayed with missing object properties Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 12/21] docs/devel/qom: Fix indentation of bulleted list Eduardo Habkost
                   ` (10 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé,
	Eduardo Habkost, Philippe Mathieu-Daudé

Correct copy/paste mistake in the DECLARE_INSTANCE_CHECKER and
DECLARE_CLASS_CHECKERS documentation.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003025424.199291-2-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 include/qom/object.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/qom/object.h b/include/qom/object.h
index 27aaa67e63f..de121d8d8e8 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -170,7 +170,7 @@ struct Object
  * Direct usage of this macro should be avoided, and the complete
  * OBJECT_DECLARE_TYPE macro is recommended instead.
  *
- * This macro will provide the three standard type cast functions for a
+ * This macro will provide the instance type cast functions for a
  * QOM type.
  */
 #define DECLARE_INSTANCE_CHECKER(InstanceType, OBJ_NAME, TYPENAME) \
@@ -187,7 +187,7 @@ struct Object
  * Direct usage of this macro should be avoided, and the complete
  * OBJECT_DECLARE_TYPE macro is recommended instead.
  *
- * This macro will provide the three standard type cast functions for a
+ * This macro will provide the class type cast functions for a
  * QOM type.
  */
 #define DECLARE_CLASS_CHECKERS(ClassType, OBJ_NAME, TYPENAME) \
-- 
2.26.2



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

* [PULL 12/21] docs/devel/qom: Fix indentation of bulleted list
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (10 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 11/21] qom: Fix DECLARE_*CHECKER documentation Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 13/21] docs/devel/qom: Fix indentation of code blocks Eduardo Habkost
                   ` (9 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost

The list was incorrectly parsed as a literal block due to
indentation.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003025424.199291-3-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 docs/devel/qom.rst | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/docs/devel/qom.rst b/docs/devel/qom.rst
index 0b943b2a1a8..c4857d95c8e 100644
--- a/docs/devel/qom.rst
+++ b/docs/devel/qom.rst
@@ -8,9 +8,9 @@ The QEMU Object Model provides a framework for registering user creatable
 types and instantiating objects from those types.  QOM provides the following
 features:
 
- - System for dynamically registering types
- - Support for single-inheritance of types
- - Multiple inheritance of stateless interfaces
+- System for dynamically registering types
+- Support for single-inheritance of types
+- Multiple inheritance of stateless interfaces
 
 .. code-block:: c
    :caption: Creating a minimal type
-- 
2.26.2



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

* [PULL 13/21] docs/devel/qom: Fix indentation of code blocks
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (11 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 12/21] docs/devel/qom: Fix indentation of bulleted list Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 14/21] docs/devel/qom: Use *emphasis* for emphasis Eduardo Habkost
                   ` (8 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost

Some code blocks had one extra space, fix that.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003025424.199291-4-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 docs/devel/qom.rst | 76 +++++++++++++++++++++++-----------------------
 1 file changed, 38 insertions(+), 38 deletions(-)

diff --git a/docs/devel/qom.rst b/docs/devel/qom.rst
index c4857d95c8e..a47e1b9a239 100644
--- a/docs/devel/qom.rst
+++ b/docs/devel/qom.rst
@@ -284,28 +284,28 @@ in the header file:
 .. code-block:: c
    :caption: Declaring a simple type
 
-    OBJECT_DECLARE_SIMPLE_TYPE(MyDevice, my_device, MY_DEVICE, DEVICE)
+   OBJECT_DECLARE_SIMPLE_TYPE(MyDevice, my_device, MY_DEVICE, DEVICE)
 
 This is equivalent to the following:
 
 .. code-block:: c
    :caption: Expansion from declaring a simple type
 
-    typedef struct MyDevice MyDevice;
-    typedef struct MyDeviceClass MyDeviceClass;
+   typedef struct MyDevice MyDevice;
+   typedef struct MyDeviceClass MyDeviceClass;
 
-    G_DEFINE_AUTOPTR_CLEANUP_FUNC(MyDeviceClass, object_unref)
+   G_DEFINE_AUTOPTR_CLEANUP_FUNC(MyDeviceClass, object_unref)
 
-    #define MY_DEVICE_GET_CLASS(void *obj) \
-            OBJECT_GET_CLASS(MyDeviceClass, obj, TYPE_MY_DEVICE)
-    #define MY_DEVICE_CLASS(void *klass) \
-            OBJECT_CLASS_CHECK(MyDeviceClass, klass, TYPE_MY_DEVICE)
-    #define MY_DEVICE(void *obj)
-            OBJECT_CHECK(MyDevice, obj, TYPE_MY_DEVICE)
+   #define MY_DEVICE_GET_CLASS(void *obj) \
+           OBJECT_GET_CLASS(MyDeviceClass, obj, TYPE_MY_DEVICE)
+   #define MY_DEVICE_CLASS(void *klass) \
+           OBJECT_CLASS_CHECK(MyDeviceClass, klass, TYPE_MY_DEVICE)
+   #define MY_DEVICE(void *obj)
+           OBJECT_CHECK(MyDevice, obj, TYPE_MY_DEVICE)
 
-    struct MyDeviceClass {
-        DeviceClass parent_class;
-    };
+   struct MyDeviceClass {
+       DeviceClass parent_class;
+   };
 
 The 'struct MyDevice' needs to be declared separately.
 If the type requires virtual functions to be declared in the class
@@ -319,33 +319,33 @@ In the simple case the OBJECT_DEFINE_TYPE macro is suitable:
 .. code-block:: c
    :caption: Defining a simple type
 
-    OBJECT_DEFINE_TYPE(MyDevice, my_device, MY_DEVICE, DEVICE)
+   OBJECT_DEFINE_TYPE(MyDevice, my_device, MY_DEVICE, DEVICE)
 
 This is equivalent to the following:
 
 .. code-block:: c
    :caption: Expansion from defining a simple type
 
-    static void my_device_finalize(Object *obj);
-    static void my_device_class_init(ObjectClass *oc, void *data);
-    static void my_device_init(Object *obj);
-
-    static const TypeInfo my_device_info = {
-        .parent = TYPE_DEVICE,
-        .name = TYPE_MY_DEVICE,
-        .instance_size = sizeof(MyDevice),
-        .instance_init = my_device_init,
-        .instance_finalize = my_device_finalize,
-        .class_size = sizeof(MyDeviceClass),
-        .class_init = my_device_class_init,
-    };
-
-    static void
-    my_device_register_types(void)
-    {
-        type_register_static(&my_device_info);
-    }
-    type_init(my_device_register_types);
+   static void my_device_finalize(Object *obj);
+   static void my_device_class_init(ObjectClass *oc, void *data);
+   static void my_device_init(Object *obj);
+
+   static const TypeInfo my_device_info = {
+       .parent = TYPE_DEVICE,
+       .name = TYPE_MY_DEVICE,
+       .instance_size = sizeof(MyDevice),
+       .instance_init = my_device_init,
+       .instance_finalize = my_device_finalize,
+       .class_size = sizeof(MyDeviceClass),
+       .class_init = my_device_class_init,
+   };
+
+   static void
+   my_device_register_types(void)
+   {
+       type_register_static(&my_device_info);
+   }
+   type_init(my_device_register_types);
 
 This is sufficient to get the type registered with the type
 system, and the three standard methods now need to be implemented
@@ -358,9 +358,9 @@ This accepts an array of interface type names.
 .. code-block:: c
    :caption: Defining a simple type implementing interfaces
 
-    OBJECT_DEFINE_TYPE_WITH_INTERFACES(MyDevice, my_device,
-                                       MY_DEVICE, DEVICE,
-                                       { TYPE_USER_CREATABLE }, { NULL })
+   OBJECT_DEFINE_TYPE_WITH_INTERFACES(MyDevice, my_device,
+                                      MY_DEVICE, DEVICE,
+                                      { TYPE_USER_CREATABLE }, { NULL })
 
 If the type is not intended to be instantiated, then then
 the OBJECT_DEFINE_ABSTRACT_TYPE() macro can be used instead:
@@ -368,7 +368,7 @@ the OBJECT_DEFINE_ABSTRACT_TYPE() macro can be used instead:
 .. code-block:: c
    :caption: Defining a simple abstract type
 
-    OBJECT_DEFINE_ABSTRACT_TYPE(MyDevice, my_device, MY_DEVICE, DEVICE)
+   OBJECT_DEFINE_ABSTRACT_TYPE(MyDevice, my_device, MY_DEVICE, DEVICE)
 
 
 
-- 
2.26.2



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

* [PULL 14/21] docs/devel/qom: Use *emphasis* for emphasis
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (12 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 13/21] docs/devel/qom: Fix indentation of code blocks Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 15/21] docs/devel/qom: Remove usage of <code> Eduardo Habkost
                   ` (7 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé,
	Eduardo Habkost, Philippe Mathieu-Daudé

<emphasis> is not valid reST syntax.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003025424.199291-5-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 docs/devel/qom.rst | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/docs/devel/qom.rst b/docs/devel/qom.rst
index a47e1b9a239..0c610e20d62 100644
--- a/docs/devel/qom.rst
+++ b/docs/devel/qom.rst
@@ -174,17 +174,17 @@ dynamically cast it to an object that implements the interface.
 Methods
 =======
 
-A <emphasis>method</emphasis> is a function within the namespace scope of
+A *method* is a function within the namespace scope of
 a class. It usually operates on the object instance by passing it as a
 strongly-typed first argument.
 If it does not operate on an object instance, it is dubbed
-<emphasis>class method</emphasis>.
+*class method*.
 
 Methods cannot be overloaded. That is, the #ObjectClass and method name
 uniquely identity the function to be called; the signature does not vary
 except for trailing varargs.
 
-Methods are always <emphasis>virtual</emphasis>. Overriding a method in
+Methods are always *virtual*. Overriding a method in
 #TypeInfo.class_init of a subclass leads to any user of the class obtained
 via OBJECT_GET_CLASS() accessing the overridden function.
 The original function is not automatically invoked. It is the responsibility
-- 
2.26.2



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

* [PULL 15/21] docs/devel/qom: Remove usage of <code>
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (13 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 14/21] docs/devel/qom: Use *emphasis* for emphasis Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 16/21] docs/devel/qom: Avoid long lines Eduardo Habkost
                   ` (6 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost

<code> is not valid reST syntax.

Function @argument references don't need additional markup, so
just remove <code></code>.

Constants were changed to use reST ``code`` syntax

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003025424.199291-6-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 include/qom/object.h | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/include/qom/object.h b/include/qom/object.h
index de121d8d8e8..e80092f349a 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -1256,7 +1256,7 @@ char *object_property_get_str(Object *obj, const char *name,
  * Writes an object's canonical path to a property.
  *
  * If the link property was created with
- * <code>OBJ_PROP_LINK_STRONG</code> bit, the old target object is
+ * %OBJ_PROP_LINK_STRONG bit, the old target object is
  * unreferenced, and a reference is added to the new target object.
  *
  * Returns: %true on success, %false on failure.
@@ -1603,16 +1603,16 @@ void object_property_allow_set_link(const Object *obj, const char *name,
  *
  * Links form the graph in the object model.
  *
- * The <code>@check()</code> callback is invoked when
+ * The @check() callback is invoked when
  * object_property_set_link() is called and can raise an error to prevent the
- * link being set.  If <code>@check</code> is NULL, the property is read-only
+ * link being set.  If @check is NULL, the property is read-only
  * and cannot be set.
  *
  * Ownership of the pointer that @child points to is transferred to the
- * link property.  The reference count for <code>*@child</code> is
+ * link property.  The reference count for *@child is
  * managed by the property from after the function returns till the
  * property is deleted with object_property_del().  If the
- * <code>@flags</code> <code>OBJ_PROP_LINK_STRONG</code> bit is set,
+ * @flags %OBJ_PROP_LINK_STRONG bit is set,
  * the reference count is decremented when the property is deleted or
  * modified.
  *
@@ -1823,7 +1823,7 @@ ObjectProperty *object_class_property_add_uint64_ptr(ObjectClass *klass,
  * Add an alias for a property on an object.  This function will add a property
  * of the same type as the forwarded property.
  *
- * The caller must ensure that <code>@target_obj</code> stays alive as long as
+ * The caller must ensure that @target_obj stays alive as long as
  * this property exists.  In the case of a child object or an alias on the same
  * object this will be the case.  For aliases to other objects the caller is
  * responsible for taking a reference.
-- 
2.26.2



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

* [PULL 16/21] docs/devel/qom: Avoid long lines
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (14 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 15/21] docs/devel/qom: Remove usage of <code> Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 17/21] kernel-doc: Handle function typedefs that return pointers Eduardo Habkost
                   ` (5 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé,
	Eduardo Habkost, Philippe Mathieu-Daudé

Long code lines don't look good in the rendered documents, make
them shorter.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003025424.199291-7-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 docs/devel/qom.rst | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/docs/devel/qom.rst b/docs/devel/qom.rst
index 0c610e20d62..42d0dc4f4da 100644
--- a/docs/devel/qom.rst
+++ b/docs/devel/qom.rst
@@ -284,7 +284,8 @@ in the header file:
 .. code-block:: c
    :caption: Declaring a simple type
 
-   OBJECT_DECLARE_SIMPLE_TYPE(MyDevice, my_device, MY_DEVICE, DEVICE)
+   OBJECT_DECLARE_SIMPLE_TYPE(MyDevice, my_device,
+                              MY_DEVICE, DEVICE)
 
 This is equivalent to the following:
 
@@ -360,7 +361,8 @@ This accepts an array of interface type names.
 
    OBJECT_DEFINE_TYPE_WITH_INTERFACES(MyDevice, my_device,
                                       MY_DEVICE, DEVICE,
-                                      { TYPE_USER_CREATABLE }, { NULL })
+                                      { TYPE_USER_CREATABLE },
+                                      { NULL })
 
 If the type is not intended to be instantiated, then then
 the OBJECT_DEFINE_ABSTRACT_TYPE() macro can be used instead:
@@ -368,7 +370,8 @@ the OBJECT_DEFINE_ABSTRACT_TYPE() macro can be used instead:
 .. code-block:: c
    :caption: Defining a simple abstract type
 
-   OBJECT_DEFINE_ABSTRACT_TYPE(MyDevice, my_device, MY_DEVICE, DEVICE)
+   OBJECT_DEFINE_ABSTRACT_TYPE(MyDevice, my_device,
+                               MY_DEVICE, DEVICE)
 
 
 
-- 
2.26.2



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

* [PULL 17/21] kernel-doc: Handle function typedefs that return pointers
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (15 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 16/21] docs/devel/qom: Avoid long lines Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 18/21] kernel-doc: Handle function typedefs without asterisks Eduardo Habkost
                   ` (4 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost

One example that was not being parsed correctly by kernel-doc is:

  typedef Object *(ObjectPropertyResolve)(Object *obj,
                                          void *opaque,
                                          const char *part);

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003024123.193840-2-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 scripts/kernel-doc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 40ad782e342..57a4a72970f 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1318,8 +1318,8 @@ sub dump_typedef($$) {
     $x =~ s@/\*.*?\*/@@gos;	# strip comments.
 
     # Parse function prototypes
-    if ($x =~ /typedef\s+(\w+)\s*\(\*\s*(\w\S+)\s*\)\s*\((.*)\);/ ||
-	$x =~ /typedef\s+(\w+)\s*(\w\S+)\s*\s*\((.*)\);/) {
+    if ($x =~ /typedef\s+(\w+\s*\**)\s*\(\*\s*(\w\S+)\s*\)\s*\((.*)\);/ ||
+	$x =~ /typedef\s+(\w+\s*\**)\s*(\w\S+)\s*\s*\((.*)\);/) {
 
 	# Function typedefs
 	$return_type = $1;
-- 
2.26.2



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

* [PULL 18/21] kernel-doc: Handle function typedefs without asterisks
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (16 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 17/21] kernel-doc: Handle function typedefs that return pointers Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 19/21] qom: Explicitly tag doc comments for typedefs and structs Eduardo Habkost
                   ` (3 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost

Example of typedef that was not parsed by kernel-doc:

  typedef void (ObjectUnparent)(Object *obj);

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003024123.193840-3-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 scripts/kernel-doc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 57a4a72970f..57b911ff174 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1318,7 +1318,7 @@ sub dump_typedef($$) {
     $x =~ s@/\*.*?\*/@@gos;	# strip comments.
 
     # Parse function prototypes
-    if ($x =~ /typedef\s+(\w+\s*\**)\s*\(\*\s*(\w\S+)\s*\)\s*\((.*)\);/ ||
+    if ($x =~ /typedef\s+(\w+\s*\**)\s*\(\*?\s*(\w\S+)\s*\)\s*\((.*)\);/ ||
 	$x =~ /typedef\s+(\w+\s*\**)\s*(\w\S+)\s*\s*\((.*)\);/) {
 
 	# Function typedefs
-- 
2.26.2



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

* [PULL 19/21] qom: Explicitly tag doc comments for typedefs and structs
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (17 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 18/21] kernel-doc: Handle function typedefs without asterisks Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:09 ` [PULL 20/21] memory: Explicitly tag doc comments for structs Eduardo Habkost
                   ` (2 subsequent siblings)
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost

If we explicitly indicate we are documenting a typedef or a
struct, we'll be able to remove the $decl_type='type name' hack
from kernel-doc.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003024123.193840-4-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 include/qom/object.h | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/include/qom/object.h b/include/qom/object.h
index e80092f349a..d378f13a116 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -31,7 +31,7 @@ typedef struct InterfaceInfo InterfaceInfo;
 typedef struct ObjectProperty ObjectProperty;
 
 /**
- * ObjectPropertyAccessor:
+ * typedef ObjectPropertyAccessor:
  * @obj: the object that owns the property
  * @v: the visitor that contains the property data
  * @name: the name of the property
@@ -47,7 +47,7 @@ typedef void (ObjectPropertyAccessor)(Object *obj,
                                       Error **errp);
 
 /**
- * ObjectPropertyResolve:
+ * typedef ObjectPropertyResolve:
  * @obj: the object that owns the property
  * @opaque: the opaque registered with the property
  * @part: the name of the property
@@ -66,7 +66,7 @@ typedef Object *(ObjectPropertyResolve)(Object *obj,
                                         const char *part);
 
 /**
- * ObjectPropertyRelease:
+ * typedef ObjectPropertyRelease:
  * @obj: the object that owns the property
  * @name: the name of the property
  * @opaque: the opaque registered with the property
@@ -78,7 +78,7 @@ typedef void (ObjectPropertyRelease)(Object *obj,
                                      void *opaque);
 
 /**
- * ObjectPropertyInit:
+ * typedef ObjectPropertyInit:
  * @obj: the object that owns the property
  * @prop: the property to set
  *
@@ -101,7 +101,7 @@ struct ObjectProperty
 };
 
 /**
- * ObjectUnparent:
+ * typedef ObjectUnparent:
  * @obj: the object that is being removed from the composition tree
  *
  * Called when an object is being removed from the QOM composition tree.
@@ -110,7 +110,7 @@ struct ObjectProperty
 typedef void (ObjectUnparent)(Object *obj);
 
 /**
- * ObjectFree:
+ * typedef ObjectFree:
  * @obj: the object being freed
  *
  * Called when an object's last reference is removed.
@@ -120,7 +120,7 @@ typedef void (ObjectFree)(void *obj);
 #define OBJECT_CLASS_CAST_CACHE 4
 
 /**
- * ObjectClass:
+ * struct ObjectClass:
  *
  * The base for all classes.  The only thing that #ObjectClass contains is an
  * integer type handle.
@@ -140,7 +140,7 @@ struct ObjectClass
 };
 
 /**
- * Object:
+ * struct Object:
  *
  * The base for all objects.  The first member of this object is a pointer to
  * a #ObjectClass.  Since C guarantees that the first member of a structure
@@ -370,7 +370,7 @@ struct Object
                                 true, { NULL })
 
 /**
- * TypeInfo:
+ * struct TypeInfo:
  * @name: The name of the type.
  * @parent: The name of the parent type.
  * @instance_size: The size of the object (derivative of #Object).  If
@@ -496,7 +496,7 @@ struct TypeInfo
     OBJECT_CLASS_CHECK(class, object_get_class(OBJECT(obj)), name)
 
 /**
- * InterfaceInfo:
+ * struct InterfaceInfo:
  * @type: The name of the interface.
  *
  * The information associated with an interface.
@@ -506,7 +506,7 @@ struct InterfaceInfo {
 };
 
 /**
- * InterfaceClass:
+ * struct InterfaceClass:
  * @parent_class: the base class
  *
  * The class for all interfaces.  Subclasses of this class should only add
-- 
2.26.2



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

* [PULL 20/21] memory: Explicitly tag doc comments for structs
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (18 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 19/21] qom: Explicitly tag doc comments for typedefs and structs Eduardo Habkost
@ 2020-10-05 21:09 ` Eduardo Habkost
  2020-10-05 21:10 ` [PULL 21/21] kernel-doc: Remove $decl_type='type name' hack Eduardo Habkost
  2020-10-06 14:03 ` [PULL 00/21] machine + QOM queue, 2020-10-05 Peter Maydell
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:09 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost

This will allow us to remove the QEMU-specific
$decl_type='type name' hack from the kernel-doc script.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003024123.193840-5-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 include/exec/memory.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/include/exec/memory.h b/include/exec/memory.h
index dee09851622..622207bde12 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -443,7 +443,7 @@ struct IOMMUMemoryRegion {
     QLIST_FOREACH((n), &(mr)->iommu_notify, node)
 
 /**
- * MemoryListener: callbacks structure for updates to the physical memory map
+ * struct MemoryListener: callbacks structure for updates to the physical memory map
  *
  * Allows a component to adjust to changes in the guest-visible memory map.
  * Use with memory_listener_register() and memory_listener_unregister().
@@ -681,7 +681,7 @@ struct MemoryListener {
 };
 
 /**
- * AddressSpace: describes a mapping of addresses to #MemoryRegion objects
+ * struct AddressSpace: describes a mapping of addresses to #MemoryRegion objects
  */
 struct AddressSpace {
     /* private: */
@@ -721,7 +721,7 @@ static inline FlatView *address_space_to_flatview(AddressSpace *as)
 
 
 /**
- * MemoryRegionSection: describes a fragment of a #MemoryRegion
+ * struct MemoryRegionSection: describes a fragment of a #MemoryRegion
  *
  * @mr: the region, or %NULL if empty
  * @fv: the flat view of the address space the region is mapped in
-- 
2.26.2



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

* [PULL 21/21] kernel-doc: Remove $decl_type='type name' hack
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (19 preceding siblings ...)
  2020-10-05 21:09 ` [PULL 20/21] memory: Explicitly tag doc comments for structs Eduardo Habkost
@ 2020-10-05 21:10 ` Eduardo Habkost
  2020-10-06 14:03 ` [PULL 00/21] machine + QOM queue, 2020-10-05 Peter Maydell
  21 siblings, 0 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-05 21:10 UTC (permalink / raw)
  To: qemu-devel, Peter Maydell
  Cc: Paolo Bonzini, Daniel P. Berrangé, Eduardo Habkost

The $decl_type='type name' hack makes it impossible to document
macros with uppercase names (e.g. most of the macros in
object.h).

Now that we have explicitly tagged the struct and typedef doc
comments in memory.h and object.h, we don't need that hack
anymore.  This will make the documentation for the macros in
object.h finally be rendered as expected.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201003024123.193840-6-ehabkost@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 scripts/kernel-doc | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 57b911ff174..0ff62bb6a2d 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1064,14 +1064,6 @@ sub output_blockhead {
 sub dump_declaration($$) {
     no strict 'refs';
     my ($prototype, $file) = @_;
-    if ($decl_type eq 'type name') {
-       if ($prototype =~ /^(enum|struct|union)\s+/) {
-	   $decl_type = $1;
-	} else {
-	   return;
-       }
-    }
-
     my $func = "dump_" . $decl_type;
     &$func(@_);
 }
@@ -1928,9 +1920,7 @@ sub process_name($$) {
 	    ++$warnings;
 	}
 
-	if ($identifier =~ m/^[A-Z]/) {
-	    $decl_type = 'type name';
-	} elsif ($identifier =~ m/^struct\b/) {
+	if ($identifier =~ m/^struct\b/) {
 	    $decl_type = 'struct';
 	} elsif ($identifier =~ m/^union\b/) {
 	    $decl_type = 'union';
-- 
2.26.2



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
                   ` (20 preceding siblings ...)
  2020-10-05 21:10 ` [PULL 21/21] kernel-doc: Remove $decl_type='type name' hack Eduardo Habkost
@ 2020-10-06 14:03 ` Peter Maydell
  2020-10-06 14:36   ` Eduardo Habkost
  21 siblings, 1 reply; 36+ messages in thread
From: Peter Maydell @ 2020-10-06 14:03 UTC (permalink / raw)
  To: Eduardo Habkost; +Cc: Paolo Bonzini, Daniel P. Berrangé, QEMU Developers

On Mon, 5 Oct 2020 at 22:10, Eduardo Habkost <ehabkost@redhat.com> wrote:
>
> The following changes since commit 36d9c2883e55c863b622b99f0ebb5143f0001401:
>
>   readthedocs: build with Python 3.6 (2020-10-05 16:30:45 +0100)
>
> are available in the Git repository at:
>
>   git://github.com/ehabkost/qemu.git tags/machine-next-pull-request
>
> for you to fetch changes up to fec5c4b6d3b7f3ffcfcbe1714e0405df6de2a222:
>
>   kernel-doc: Remove $decl_type='type name' hack (2020-10-05 12:48:11 -0400)
>
> ----------------------------------------------------------------
> machine + QOM queue, 2020-10-05
>
> * QOM documentation fixes and cleanups (Eduardo Habkost)
> * user-mode: Prune build dependencies (Philippe Mathieu-Daudé)
> * qom: Improve error message (Philippe Mathieu-Daudé)
> * numa: hmat: require parent cache description before the next
>   level one (Igor Mammedov)
>
> ----------------------------------------------------------------

Compile failure on OSX:

../../hw/core/numa.c:429:20: error: format specifies type 'unsigned
char' but the argument has type 'int' [-Werror,-Wformat]
                   node->level - 1);
                   ^~~~~~~~~~~~~~~~
/Users/pm215/src/qemu-for-merges/include/qapi/error.h:319:35: note:
expanded from macro 'error_setg'
                        (fmt), ## __VA_ARGS__)
                         ~~~      ^~~~~~~~~~~
1 error generated.

thanks
-- PMM


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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 14:03 ` [PULL 00/21] machine + QOM queue, 2020-10-05 Peter Maydell
@ 2020-10-06 14:36   ` Eduardo Habkost
  2020-10-06 14:38     ` Peter Maydell
                       ` (2 more replies)
  0 siblings, 3 replies; 36+ messages in thread
From: Eduardo Habkost @ 2020-10-06 14:36 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Paolo Bonzini, Daniel P. Berrangé, QEMU Developers

On Tue, Oct 06, 2020 at 03:03:57PM +0100, Peter Maydell wrote:
> On Mon, 5 Oct 2020 at 22:10, Eduardo Habkost <ehabkost@redhat.com> wrote:
> >
> > The following changes since commit 36d9c2883e55c863b622b99f0ebb5143f0001401:
> >
> >   readthedocs: build with Python 3.6 (2020-10-05 16:30:45 +0100)
> >
> > are available in the Git repository at:
> >
> >   git://github.com/ehabkost/qemu.git tags/machine-next-pull-request
> >
> > for you to fetch changes up to fec5c4b6d3b7f3ffcfcbe1714e0405df6de2a222:
> >
> >   kernel-doc: Remove $decl_type='type name' hack (2020-10-05 12:48:11 -0400)
> >
> > ----------------------------------------------------------------
> > machine + QOM queue, 2020-10-05
> >
> > * QOM documentation fixes and cleanups (Eduardo Habkost)
> > * user-mode: Prune build dependencies (Philippe Mathieu-Daudé)
> > * qom: Improve error message (Philippe Mathieu-Daudé)
> > * numa: hmat: require parent cache description before the next
> >   level one (Igor Mammedov)
> >
> > ----------------------------------------------------------------
> 
> Compile failure on OSX:
> 
> ../../hw/core/numa.c:429:20: error: format specifies type 'unsigned
> char' but the argument has type 'int' [-Werror,-Wformat]
>                    node->level - 1);
>                    ^~~~~~~~~~~~~~~~
> /Users/pm215/src/qemu-for-merges/include/qapi/error.h:319:35: note:
> expanded from macro 'error_setg'
>                         (fmt), ## __VA_ARGS__)
>                          ~~~      ^~~~~~~~~~~
> 1 error generated.

Is there a CI system where this is tested?  I'd like to be able
to detect this kind of failure before sending pull requests.

-- 
Eduardo



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 14:36   ` Eduardo Habkost
@ 2020-10-06 14:38     ` Peter Maydell
  2020-10-06 14:42       ` Daniel P. Berrangé
  2020-10-06 14:41     ` Paolo Bonzini
  2020-10-06 15:04     ` Igor Mammedov
  2 siblings, 1 reply; 36+ messages in thread
From: Peter Maydell @ 2020-10-06 14:38 UTC (permalink / raw)
  To: Eduardo Habkost; +Cc: Paolo Bonzini, Daniel P. Berrangé, QEMU Developers

On Tue, 6 Oct 2020 at 15:36, Eduardo Habkost <ehabkost@redhat.com> wrote:
>
> On Tue, Oct 06, 2020 at 03:03:57PM +0100, Peter Maydell wrote:
> > Compile failure on OSX:
> >
> > ../../hw/core/numa.c:429:20: error: format specifies type 'unsigned
> > char' but the argument has type 'int' [-Werror,-Wformat]
> >                    node->level - 1);
> >                    ^~~~~~~~~~~~~~~~
> > /Users/pm215/src/qemu-for-merges/include/qapi/error.h:319:35: note:
> > expanded from macro 'error_setg'
> >                         (fmt), ## __VA_ARGS__)
> >                          ~~~      ^~~~~~~~~~~
> > 1 error generated.
>
> Is there a CI system where this is tested?  I'd like to be able
> to detect this kind of failure before sending pull requests.

Currently this is still my ad-hoc setup. I think there is
some CI that tests OSX compiles, though I have no idea how
individual maintainers set up to use it.

thanks
-- PMM


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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 14:36   ` Eduardo Habkost
  2020-10-06 14:38     ` Peter Maydell
@ 2020-10-06 14:41     ` Paolo Bonzini
  2020-10-06 15:04     ` Igor Mammedov
  2 siblings, 0 replies; 36+ messages in thread
From: Paolo Bonzini @ 2020-10-06 14:41 UTC (permalink / raw)
  To: Eduardo Habkost, Peter Maydell; +Cc: Daniel P. Berrangé, QEMU Developers

On 06/10/20 16:36, Eduardo Habkost wrote:
> On Tue, Oct 06, 2020 at 03:03:57PM +0100, Peter Maydell wrote:
>> On Mon, 5 Oct 2020 at 22:10, Eduardo Habkost <ehabkost@redhat.com> wrote:
>>>
>>> The following changes since commit 36d9c2883e55c863b622b99f0ebb5143f0001401:
>>>
>>>   readthedocs: build with Python 3.6 (2020-10-05 16:30:45 +0100)
>>>
>>> are available in the Git repository at:
>>>
>>>   git://github.com/ehabkost/qemu.git tags/machine-next-pull-request
>>>
>>> for you to fetch changes up to fec5c4b6d3b7f3ffcfcbe1714e0405df6de2a222:
>>>
>>>   kernel-doc: Remove $decl_type='type name' hack (2020-10-05 12:48:11 -0400)
>>>
>>> ----------------------------------------------------------------
>>> machine + QOM queue, 2020-10-05
>>>
>>> * QOM documentation fixes and cleanups (Eduardo Habkost)
>>> * user-mode: Prune build dependencies (Philippe Mathieu-Daudé)
>>> * qom: Improve error message (Philippe Mathieu-Daudé)
>>> * numa: hmat: require parent cache description before the next
>>>   level one (Igor Mammedov)
>>>
>>> ----------------------------------------------------------------
>>
>> Compile failure on OSX:
>>
>> ../../hw/core/numa.c:429:20: error: format specifies type 'unsigned
>> char' but the argument has type 'int' [-Werror,-Wformat]
>>                    node->level - 1);
>>                    ^~~~~~~~~~~~~~~~
>> /Users/pm215/src/qemu-for-merges/include/qapi/error.h:319:35: note:
>> expanded from macro 'error_setg'
>>                         (fmt), ## __VA_ARGS__)
>>                          ~~~      ^~~~~~~~~~~
>> 1 error generated.
> 
> Is there a CI system where this is tested?  I'd like to be able
> to detect this kind of failure before sending pull requests.

Possibly Cirrus CI?  You have to add it to your account
(https://cirrus-ci.org/guide/quick-start/) and then it triggers on any
push to GitHub; there's nothing else you have to do.

Paolo



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 14:38     ` Peter Maydell
@ 2020-10-06 14:42       ` Daniel P. Berrangé
  2020-10-06 18:47         ` Thomas Huth
  0 siblings, 1 reply; 36+ messages in thread
From: Daniel P. Berrangé @ 2020-10-06 14:42 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Paolo Bonzini, Eduardo Habkost, QEMU Developers

On Tue, Oct 06, 2020 at 03:38:56PM +0100, Peter Maydell wrote:
> On Tue, 6 Oct 2020 at 15:36, Eduardo Habkost <ehabkost@redhat.com> wrote:
> >
> > On Tue, Oct 06, 2020 at 03:03:57PM +0100, Peter Maydell wrote:
> > > Compile failure on OSX:
> > >
> > > ../../hw/core/numa.c:429:20: error: format specifies type 'unsigned
> > > char' but the argument has type 'int' [-Werror,-Wformat]
> > >                    node->level - 1);
> > >                    ^~~~~~~~~~~~~~~~
> > > /Users/pm215/src/qemu-for-merges/include/qapi/error.h:319:35: note:
> > > expanded from macro 'error_setg'
> > >                         (fmt), ## __VA_ARGS__)
> > >                          ~~~      ^~~~~~~~~~~
> > > 1 error generated.
> >
> > Is there a CI system where this is tested?  I'd like to be able
> > to detect this kind of failure before sending pull requests.
> 
> Currently this is still my ad-hoc setup. I think there is
> some CI that tests OSX compiles, though I have no idea how
> individual maintainers set up to use it.

Cirrus CI will cover macOS builds.  You just need to register with
Cirrus CI via your GitLab login, then pushing a branch to gitlab
should trigger both GitLab CI and Cirrus CI, which covers a vast
majority of combinations.

If you register with Travis and push to GitHub too, you'll get
some non-x86 coverage too. Alternatively setup mirroring from
GitLab to GitHub, so you don't have to separately push to GitHub,
just use GitLab to trigger all three CI systems.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 14:36   ` Eduardo Habkost
  2020-10-06 14:38     ` Peter Maydell
  2020-10-06 14:41     ` Paolo Bonzini
@ 2020-10-06 15:04     ` Igor Mammedov
  2020-10-06 15:23       ` Igor Mammedov
  2 siblings, 1 reply; 36+ messages in thread
From: Igor Mammedov @ 2020-10-06 15:04 UTC (permalink / raw)
  To: Eduardo Habkost
  Cc: Peter Maydell, Daniel P. Berrangé, QEMU Developers, Paolo Bonzini

On Tue, 6 Oct 2020 10:36:37 -0400
Eduardo Habkost <ehabkost@redhat.com> wrote:

> On Tue, Oct 06, 2020 at 03:03:57PM +0100, Peter Maydell wrote:
> > On Mon, 5 Oct 2020 at 22:10, Eduardo Habkost <ehabkost@redhat.com> wrote:  
> > >
> > > The following changes since commit 36d9c2883e55c863b622b99f0ebb5143f0001401:
> > >
> > >   readthedocs: build with Python 3.6 (2020-10-05 16:30:45 +0100)
> > >
> > > are available in the Git repository at:
> > >
> > >   git://github.com/ehabkost/qemu.git tags/machine-next-pull-request
> > >
> > > for you to fetch changes up to fec5c4b6d3b7f3ffcfcbe1714e0405df6de2a222:
> > >
> > >   kernel-doc: Remove $decl_type='type name' hack (2020-10-05 12:48:11 -0400)
> > >
> > > ----------------------------------------------------------------
> > > machine + QOM queue, 2020-10-05
> > >
> > > * QOM documentation fixes and cleanups (Eduardo Habkost)
> > > * user-mode: Prune build dependencies (Philippe Mathieu-Daudé)
> > > * qom: Improve error message (Philippe Mathieu-Daudé)
> > > * numa: hmat: require parent cache description before the next
> > >   level one (Igor Mammedov)
> > >
> > > ----------------------------------------------------------------  
> > 
> > Compile failure on OSX:
> > 
> > ../../hw/core/numa.c:429:20: error: format specifies type 'unsigned
> > char' but the argument has type 'int' [-Werror,-Wformat]
> >                    node->level - 1);
> >                    ^~~~~~~~~~~~~~~~
> > /Users/pm215/src/qemu-for-merges/include/qapi/error.h:319:35: note:
> > expanded from macro 'error_setg'
> >                         (fmt), ## __VA_ARGS__)
> >                          ~~~      ^~~~~~~~~~~
> > 1 error generated.  
> 
> Is there a CI system where this is tested?  I'd like to be able
> to detect this kind of failure before sending pull requests.
I usually use travis-ci, but for this patch I didn't run it via CI for some reason.
Just posted fixed v2.

(it looks like pushing to github doesn't trigger travis build anymore)



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 15:04     ` Igor Mammedov
@ 2020-10-06 15:23       ` Igor Mammedov
  2020-10-06 15:42         ` Paolo Bonzini
  0 siblings, 1 reply; 36+ messages in thread
From: Igor Mammedov @ 2020-10-06 15:23 UTC (permalink / raw)
  To: Eduardo Habkost
  Cc: Peter Maydell, Daniel P. Berrangé, QEMU Developers, Paolo Bonzini

On Tue, 6 Oct 2020 17:04:18 +0200
Igor Mammedov <imammedo@redhat.com> wrote:

> On Tue, 6 Oct 2020 10:36:37 -0400
> Eduardo Habkost <ehabkost@redhat.com> wrote:
> 
> > On Tue, Oct 06, 2020 at 03:03:57PM +0100, Peter Maydell wrote:  
> > > On Mon, 5 Oct 2020 at 22:10, Eduardo Habkost <ehabkost@redhat.com> wrote:    
> > > >
> > > > The following changes since commit 36d9c2883e55c863b622b99f0ebb5143f0001401:
> > > >
> > > >   readthedocs: build with Python 3.6 (2020-10-05 16:30:45 +0100)
> > > >
> > > > are available in the Git repository at:
> > > >
> > > >   git://github.com/ehabkost/qemu.git tags/machine-next-pull-request
> > > >
> > > > for you to fetch changes up to fec5c4b6d3b7f3ffcfcbe1714e0405df6de2a222:
> > > >
> > > >   kernel-doc: Remove $decl_type='type name' hack (2020-10-05 12:48:11 -0400)
> > > >
> > > > ----------------------------------------------------------------
> > > > machine + QOM queue, 2020-10-05
> > > >
> > > > * QOM documentation fixes and cleanups (Eduardo Habkost)
> > > > * user-mode: Prune build dependencies (Philippe Mathieu-Daudé)
> > > > * qom: Improve error message (Philippe Mathieu-Daudé)
> > > > * numa: hmat: require parent cache description before the next
> > > >   level one (Igor Mammedov)
> > > >
> > > > ----------------------------------------------------------------    
> > > 
> > > Compile failure on OSX:
> > > 
> > > ../../hw/core/numa.c:429:20: error: format specifies type 'unsigned
> > > char' but the argument has type 'int' [-Werror,-Wformat]
> > >                    node->level - 1);
> > >                    ^~~~~~~~~~~~~~~~
> > > /Users/pm215/src/qemu-for-merges/include/qapi/error.h:319:35: note:
> > > expanded from macro 'error_setg'
> > >                         (fmt), ## __VA_ARGS__)
> > >                          ~~~      ^~~~~~~~~~~
> > > 1 error generated.    
> > 
> > Is there a CI system where this is tested?  I'd like to be able
> > to detect this kind of failure before sending pull requests.  
> I usually use travis-ci, but for this patch I didn't run it via CI for some reason.
> Just posted fixed v2.
> 
> (it looks like pushing to github doesn't trigger travis build anymore)
Looks like travis-ci lost previous authorizations to my github repo,
but giving a new one didn't help.

Something wrong with current QEMU master, travis-ci doesn't recognize QEMU repo a valid anymore.



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 15:23       ` Igor Mammedov
@ 2020-10-06 15:42         ` Paolo Bonzini
  2020-10-06 16:14           ` Igor Mammedov
  0 siblings, 1 reply; 36+ messages in thread
From: Paolo Bonzini @ 2020-10-06 15:42 UTC (permalink / raw)
  To: Igor Mammedov, Eduardo Habkost
  Cc: Peter Maydell, Daniel P. Berrangé, QEMU Developers

On 06/10/20 17:23, Igor Mammedov wrote:
> Looks like travis-ci lost previous authorizations to my github repo,
> but giving a new one didn't help.
> 
> Something wrong with current QEMU master, travis-ci doesn't recognize QEMU repo a valid anymore.
> 

Interesting, I use Travis->Gitlab integration and even though builds are
still triggered, they don't appear in the Gitlab CI page.  So the
configuration is okay, but something seems to be wrong on the Travis side.

Paolo



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 15:42         ` Paolo Bonzini
@ 2020-10-06 16:14           ` Igor Mammedov
  2020-10-06 18:43             ` Thomas Huth
  0 siblings, 1 reply; 36+ messages in thread
From: Igor Mammedov @ 2020-10-06 16:14 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Peter Maydell, Daniel P. Berrangé, Eduardo Habkost, QEMU Developers

On Tue, 6 Oct 2020 17:42:28 +0200
Paolo Bonzini <pbonzini@redhat.com> wrote:

> On 06/10/20 17:23, Igor Mammedov wrote:
> > Looks like travis-ci lost previous authorizations to my github repo,
> > but giving a new one didn't help.
> > 
> > Something wrong with current QEMU master, travis-ci doesn't recognize QEMU repo a valid anymore.
> >   
> 
> Interesting, I use Travis->Gitlab integration and even though builds are
> still triggered, they don't appear in the Gitlab CI page.  So the
> configuration is okay, but something seems to be wrong on the Travis side.

If one enables access to all repositories on account, then even if travis-ci
doesn't show QEMU repo as accessible one, it seems that there is a new build in
'received' state, maybe it will start building eventually.

> 
> Paolo
> 



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 16:14           ` Igor Mammedov
@ 2020-10-06 18:43             ` Thomas Huth
  0 siblings, 0 replies; 36+ messages in thread
From: Thomas Huth @ 2020-10-06 18:43 UTC (permalink / raw)
  To: Igor Mammedov, Paolo Bonzini
  Cc: Peter Maydell, Daniel P. Berrangé, Eduardo Habkost, QEMU Developers

On 06/10/2020 18.14, Igor Mammedov wrote:
> On Tue, 6 Oct 2020 17:42:28 +0200
> Paolo Bonzini <pbonzini@redhat.com> wrote:
> 
>> On 06/10/20 17:23, Igor Mammedov wrote:
>>> Looks like travis-ci lost previous authorizations to my github repo,
>>> but giving a new one didn't help.
>>>
>>> Something wrong with current QEMU master, travis-ci doesn't recognize QEMU repo a valid anymore.
>>>    
>>
>> Interesting, I use Travis->Gitlab integration and even though builds are
>> still triggered, they don't appear in the Gitlab CI page.  So the
>> configuration is okay, but something seems to be wrong on the Travis side.
> 
> If one enables access to all repositories on account, then even if travis-ci
> doesn't show QEMU repo as accessible one, it seems that there is a new build in
> 'received' state, maybe it will start building eventually.

It works for me (via my github account):

  https://travis-ci.com/github/huth/qemu/builds/188441775

... maybe it was just a temporary hickup?

Anyway, we do not test macOS on Travis anymore (see commit 22a231950c50d3), 
so this is likely not helpful for Eduardo's original problem... Cirrus-CI is 
the way to go if you need macOS test coverage.

  Thomas



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 14:42       ` Daniel P. Berrangé
@ 2020-10-06 18:47         ` Thomas Huth
  2020-10-06 19:10           ` Paolo Bonzini
  2020-10-07  8:17           ` Daniel P. Berrangé
  0 siblings, 2 replies; 36+ messages in thread
From: Thomas Huth @ 2020-10-06 18:47 UTC (permalink / raw)
  To: Daniel P. Berrangé, Peter Maydell
  Cc: Paolo Bonzini, Eduardo Habkost, QEMU Developers

On 06/10/2020 16.42, Daniel P. Berrangé wrote:
> On Tue, Oct 06, 2020 at 03:38:56PM +0100, Peter Maydell wrote:
>> On Tue, 6 Oct 2020 at 15:36, Eduardo Habkost <ehabkost@redhat.com> wrote:
>>>
>>> On Tue, Oct 06, 2020 at 03:03:57PM +0100, Peter Maydell wrote:
>>>> Compile failure on OSX:
>>>>
>>>> ../../hw/core/numa.c:429:20: error: format specifies type 'unsigned
>>>> char' but the argument has type 'int' [-Werror,-Wformat]
>>>>                     node->level - 1);
>>>>                     ^~~~~~~~~~~~~~~~
>>>> /Users/pm215/src/qemu-for-merges/include/qapi/error.h:319:35: note:
>>>> expanded from macro 'error_setg'
>>>>                          (fmt), ## __VA_ARGS__)
>>>>                           ~~~      ^~~~~~~~~~~
>>>> 1 error generated.
>>>
>>> Is there a CI system where this is tested?  I'd like to be able
>>> to detect this kind of failure before sending pull requests.
>>
>> Currently this is still my ad-hoc setup. I think there is
>> some CI that tests OSX compiles, though I have no idea how
>> individual maintainers set up to use it.
> 
> Cirrus CI will cover macOS builds.  You just need to register with
> Cirrus CI via your GitLab login, then pushing a branch to gitlab
> should trigger both GitLab CI and Cirrus CI, which covers a vast
> majority of combinations.

I think Cirrus-CI needs a github account? Is there a way to use Gitlab now 
instead? (just like Travis recently added Gitlab support?)

We should eventually set up the cirrus-run tool, so we can use gitlab, too, 
but I think you then still need at least a dummy github account to be able 
to use it, don't you?

  Thomas



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 18:47         ` Thomas Huth
@ 2020-10-06 19:10           ` Paolo Bonzini
  2020-10-07  9:10             ` Daniel P. Berrangé
  2020-10-07  8:17           ` Daniel P. Berrangé
  1 sibling, 1 reply; 36+ messages in thread
From: Paolo Bonzini @ 2020-10-06 19:10 UTC (permalink / raw)
  To: Thomas Huth
  Cc: Peter Maydell, Daniel P. Berrangé, Eduardo Habkost, QEMU Developers

[-- Attachment #1: Type: text/plain, Size: 599 bytes --]

Il mar 6 ott 2020, 20:47 Thomas Huth <thuth@redhat.com> ha scritto:

> I think Cirrus-CI needs a github account? Is there a way to use Gitlab now
> instead? (just like Travis recently added Gitlab support?)
>

It does only support GitHub. In theory you can set up an automatic push
from Gitlab to GitHub but it doesn't work well if you force push to the
Gitlab repository.

We should eventually set up the cirrus-run tool, so we can use gitlab, too,
> but I think you then still need at least a dummy github account to be able
> to use it, don't you?
>

Yes, that's correct.

Paolo


>   Thomas
>
>

[-- Attachment #2: Type: text/html, Size: 1468 bytes --]

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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 18:47         ` Thomas Huth
  2020-10-06 19:10           ` Paolo Bonzini
@ 2020-10-07  8:17           ` Daniel P. Berrangé
  1 sibling, 0 replies; 36+ messages in thread
From: Daniel P. Berrangé @ 2020-10-07  8:17 UTC (permalink / raw)
  To: Thomas Huth
  Cc: QEMU Developers, Peter Maydell, Eduardo Habkost, Paolo Bonzini

On Tue, Oct 06, 2020 at 08:47:29PM +0200, Thomas Huth wrote:
> On 06/10/2020 16.42, Daniel P. Berrangé wrote:
> > On Tue, Oct 06, 2020 at 03:38:56PM +0100, Peter Maydell wrote:
> > > On Tue, 6 Oct 2020 at 15:36, Eduardo Habkost <ehabkost@redhat.com> wrote:
> > > > 
> > > > On Tue, Oct 06, 2020 at 03:03:57PM +0100, Peter Maydell wrote:
> > > > > Compile failure on OSX:
> > > > > 
> > > > > ../../hw/core/numa.c:429:20: error: format specifies type 'unsigned
> > > > > char' but the argument has type 'int' [-Werror,-Wformat]
> > > > >                     node->level - 1);
> > > > >                     ^~~~~~~~~~~~~~~~
> > > > > /Users/pm215/src/qemu-for-merges/include/qapi/error.h:319:35: note:
> > > > > expanded from macro 'error_setg'
> > > > >                          (fmt), ## __VA_ARGS__)
> > > > >                           ~~~      ^~~~~~~~~~~
> > > > > 1 error generated.
> > > > 
> > > > Is there a CI system where this is tested?  I'd like to be able
> > > > to detect this kind of failure before sending pull requests.
> > > 
> > > Currently this is still my ad-hoc setup. I think there is
> > > some CI that tests OSX compiles, though I have no idea how
> > > individual maintainers set up to use it.
> > 
> > Cirrus CI will cover macOS builds.  You just need to register with
> > Cirrus CI via your GitLab login, then pushing a branch to gitlab
> > should trigger both GitLab CI and Cirrus CI, which covers a vast
> > majority of combinations.
> 
> I think Cirrus-CI needs a github account? Is there a way to use Gitlab now
> instead? (just like Travis recently added Gitlab support?)

Sorry, I was mixing up Travis and Cirrus.

> We should eventually set up the cirrus-run tool, so we can use gitlab, too,
> but I think you then still need at least a dummy github account to be able
> to use it, don't you?

Yes, you still need a github account.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



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

* Re: [PULL 00/21] machine + QOM queue, 2020-10-05
  2020-10-06 19:10           ` Paolo Bonzini
@ 2020-10-07  9:10             ` Daniel P. Berrangé
  0 siblings, 0 replies; 36+ messages in thread
From: Daniel P. Berrangé @ 2020-10-07  9:10 UTC (permalink / raw)
  To: Paolo Bonzini
  Cc: Peter Maydell, Thomas Huth, Eduardo Habkost, QEMU Developers

On Tue, Oct 06, 2020 at 09:10:59PM +0200, Paolo Bonzini wrote:
> Il mar 6 ott 2020, 20:47 Thomas Huth <thuth@redhat.com> ha scritto:
> 
> > I think Cirrus-CI needs a github account? Is there a way to use Gitlab now
> > instead? (just like Travis recently added Gitlab support?)
> >
> 
> It does only support GitHub. In theory you can set up an automatic push
> from Gitlab to GitHub but it doesn't work well if you force push to the
> Gitlab repository.

I've configured my GitLab qemu repo to run a "Push" mirror to GitHub
and it propagates force pushes for branches too.

There is some rate limiting though. It won't mirror more frequently
than every 5 minutes, and so in worst case you could be waiting upto
just under 10 minutes for it to sync.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



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

end of thread, other threads:[~2020-10-07  9:11 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-05 21:09 [PULL 00/21] machine + QOM queue, 2020-10-05 Eduardo Habkost
2020-10-05 21:09 ` [PULL 01/21] numa: hmat: require parent cache description before the next level one Eduardo Habkost
2020-10-05 21:09 ` [PULL 02/21] hw/core/qdev-properties: Use qemu_strtol() in set_mac() handler Eduardo Habkost
2020-10-05 21:09 ` [PULL 03/21] hw/core/qdev-properties: Use qemu_strtoul() in set_pci_host_devaddr() Eduardo Habkost
2020-10-05 21:09 ` [PULL 04/21] hw/core/qdev-properties: Fix code style Eduardo Habkost
2020-10-05 21:09 ` [PULL 05/21] hw/core/qdev-properties: Export enum-related functions Eduardo Habkost
2020-10-05 21:09 ` [PULL 06/21] hw/core/qdev-properties: Export qdev_prop_enum Eduardo Habkost
2020-10-05 21:09 ` [PULL 07/21] hw/core/qdev-properties: Export some integer-related functions Eduardo Habkost
2020-10-05 21:09 ` [PULL 08/21] hw/core/qdev-properties: Extract system-mode specific properties Eduardo Habkost
2020-10-05 21:09 ` [PULL 09/21] hw/core/cpu: Add missing 'exec/cpu-common.h' include Eduardo Habkost
2020-10-05 21:09 ` [PULL 10/21] qom: Improve error message displayed with missing object properties Eduardo Habkost
2020-10-05 21:09 ` [PULL 11/21] qom: Fix DECLARE_*CHECKER documentation Eduardo Habkost
2020-10-05 21:09 ` [PULL 12/21] docs/devel/qom: Fix indentation of bulleted list Eduardo Habkost
2020-10-05 21:09 ` [PULL 13/21] docs/devel/qom: Fix indentation of code blocks Eduardo Habkost
2020-10-05 21:09 ` [PULL 14/21] docs/devel/qom: Use *emphasis* for emphasis Eduardo Habkost
2020-10-05 21:09 ` [PULL 15/21] docs/devel/qom: Remove usage of <code> Eduardo Habkost
2020-10-05 21:09 ` [PULL 16/21] docs/devel/qom: Avoid long lines Eduardo Habkost
2020-10-05 21:09 ` [PULL 17/21] kernel-doc: Handle function typedefs that return pointers Eduardo Habkost
2020-10-05 21:09 ` [PULL 18/21] kernel-doc: Handle function typedefs without asterisks Eduardo Habkost
2020-10-05 21:09 ` [PULL 19/21] qom: Explicitly tag doc comments for typedefs and structs Eduardo Habkost
2020-10-05 21:09 ` [PULL 20/21] memory: Explicitly tag doc comments for structs Eduardo Habkost
2020-10-05 21:10 ` [PULL 21/21] kernel-doc: Remove $decl_type='type name' hack Eduardo Habkost
2020-10-06 14:03 ` [PULL 00/21] machine + QOM queue, 2020-10-05 Peter Maydell
2020-10-06 14:36   ` Eduardo Habkost
2020-10-06 14:38     ` Peter Maydell
2020-10-06 14:42       ` Daniel P. Berrangé
2020-10-06 18:47         ` Thomas Huth
2020-10-06 19:10           ` Paolo Bonzini
2020-10-07  9:10             ` Daniel P. Berrangé
2020-10-07  8:17           ` Daniel P. Berrangé
2020-10-06 14:41     ` Paolo Bonzini
2020-10-06 15:04     ` Igor Mammedov
2020-10-06 15:23       ` Igor Mammedov
2020-10-06 15:42         ` Paolo Bonzini
2020-10-06 16:14           ` Igor Mammedov
2020-10-06 18:43             ` Thomas Huth

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