All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties
@ 2018-12-21  9:03 Marc-André Lureau
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 01/28] hw: apply accel compat properties without touching globals Marc-André Lureau
                   ` (28 more replies)
  0 siblings, 29 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Hi,

During "[PATCH v2 05/10] qom/globals: generalize
object_property_set_globals()" review, Eduardo suggested to rework the
GlobalProperty handling, so that -global is limited to QDev only and
we avoid mixing the machine compats and the user-provided -global
properties (instead of generalizing -global to various object kinds,
like I proposed in v2).

"qdev: do not mix compat props with global props" patch decouples a
bit user-provided -global from machine compat properties. This allows
to get rid of "user_provided" and "errp" fields in following patches.

A new compat property "x-use-canonical-path-for-ramblock-id" is added
to hostmem for legacy canonical path names, set to true for -file and
-memfd with qemu < 4.0.

(this series was initially titled "[PATCH v2 00/10] hostmem: use
object "id" for memory region name with >= 3.1", but its focus is more
in refactoring the global and compatilibity properties handling now)

v7:
- rebased (s390 conflicts)
- rename self/backend in last patch
- add some r-b tags

v6:
- split "hw: apply machine compat properties without touching globals"
- replace PC_COMPAT_* and HW_COMPAT_* defines with static arrays
- add ARMCPUInfo *info in ARMCPUClass for "arm: replace
  instance_post_init()" patch
- rebased, commit message updates, add some r-b tags

v5:
- replace the SET_COMPAT macros, use normal function instead
  (suggested by Eduardo)
- replace the TYPE_COMPAT_PROPS interface approach for explicit
  object_apply_compat_props(), solving post-init ordering issues.
- get back to coupling compat properties with machine, in qdev
  (although there is still some discussion how to improve this, it
   can be changed later)
- mark the "arm: replace instance_post_init()" as RFC, since it is not
  longer required for this series
- change machines version from 3.2 to 4.0
- add some r-b tags

v4:
- fix accel/machine compat props apply order inversion
- split "qdev: do not mix compat props with global props": replace
  using current_machine by new compat_props global, introduce
  SET_COMPAT() macro, use GPtrArray.
- add a comment about "qdev-props: call object_apply_global_props()"
  error reporting
- add "arm: replace instance_post_init()", to solve the post-init
  ordering issue
- add "hw/arm/virt: add virt-3.2 machine type" for completeness
- commit message improvements
- rebased, add r-b tags

v3:
- GlobalProperties improvements/cleanups
- drop generalizing the -global idea
- "replace" the set_globals flag with a TYPE_COMPAT_PROPS interface
- update hw/i386 machine version to 3.2
- add "qom: make interface types abstract" interface cleanup

v2:
- replace "qom/user-creatable: add a few helper macros" patch for a
  more optimized "qom: make user_creatable_complete() specific to
  UserCreatable"
- rename register_global_list() to register_global_properties()
- call object_property_set_globals() after post-init
- add and use a ObjectClass.set_globals flag, instead of dynamically
  check object class in object_property_set_globals()
- use object "id" in >= 3.1 instead of canonical path, add compat
  property "x-use-canonical-path-for-ramblock-id" in base hostmem
  class.

Marc-André Lureau (28):
  hw: apply accel compat properties without touching globals
  machines: replace COMPAT define with a static array
  hw: apply machine compat properties without touching globals
  machine: move compat properties out of globals
  hw: remove SET_MACHINE_COMPAT
  compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros
  compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros
  compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros
  compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros
  compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros
  compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros
  compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros
  compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros
  compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros
  compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros
  compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros
  compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros
  compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros
  compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros
  include: remove compat.h
  compat: remove remaining PC_COMPAT macros
  qdev: make a separate helper function to apply compat properties
  qdev: all globals are now user-provided
  qdev-props: convert global_props to GPtrArray
  qdev-props: remove errp from GlobalProperty
  qdev-props: call object_apply_global_props()
  arm: replace instance_post_init()
  hostmem: use object id for memory region name with >= 4.0

 include/hw/boards.h            |  59 ++-
 include/hw/compat.h            | 291 --------------
 include/hw/i386/pc.h           | 684 +++------------------------------
 include/hw/qdev-core.h         |  21 +-
 include/qom/object.h           |   3 +
 include/sysemu/accel.h         |   4 +-
 include/sysemu/hostmem.h       |   3 +-
 target/arm/cpu-qom.h           |   3 +
 target/arm/cpu.h               |   2 +
 accel/accel.c                  |  12 -
 backends/hostmem-file.c        |   8 +-
 backends/hostmem-memfd.c       |   2 +-
 backends/hostmem-ram.c         |   9 +-
 backends/hostmem.c             |  36 ++
 hw/arm/virt.c                  |  46 +--
 hw/core/machine.c              | 339 +++++++++++++++-
 hw/core/qdev-properties.c      |  49 +--
 hw/core/qdev.c                 |  15 +
 hw/i386/pc.c                   | 668 ++++++++++++++++++++++++++++++++
 hw/i386/pc_piix.c              | 603 +++++++++++++++--------------
 hw/i386/pc_q35.c               |  36 +-
 hw/ppc/spapr.c                 | 207 +++++-----
 hw/s390x/s390-virtio-ccw.c     | 196 +++++-----
 hw/xen/xen-common.c            |  41 +-
 qom/cpu.c                      |   1 -
 qom/object.c                   |  35 ++
 target/arm/cpu.c               |  30 +-
 target/arm/cpu64.c             |  24 +-
 target/i386/cpu.c              |   1 -
 target/sparc/cpu.c             |   1 -
 tests/test-qdev-global-props.c |  57 +--
 vl.c                           |   4 -
 32 files changed, 1818 insertions(+), 1672 deletions(-)
 delete mode 100644 include/hw/compat.h

-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 01/28] hw: apply accel compat properties without touching globals
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 11:58   ` Cornelia Huck
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 02/28] machines: replace COMPAT define with a static array Marc-André Lureau
                   ` (27 subsequent siblings)
  28 siblings, 1 reply; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Instead of registering compat properties as globals, let's keep them
in their own array, to avoid mixing with user globals.

Introduce object_apply_global_props() function, to apply compatibility
properties from a GPtrArray.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 include/hw/qdev-core.h | 10 ++++++++++
 include/qom/object.h   |  3 +++
 include/sysemu/accel.h |  4 +---
 accel/accel.c          | 12 ------------
 hw/core/qdev.c         |  9 +++++++++
 hw/xen/xen-common.c    |  9 ++++++---
 qom/object.c           | 25 +++++++++++++++++++++++++
 vl.c                   |  1 -
 8 files changed, 54 insertions(+), 19 deletions(-)

diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 92851e55df..84e612f473 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -267,6 +267,16 @@ typedef struct GlobalProperty {
     Error **errp;
 } GlobalProperty;
 
+static inline void
+compat_props_add(GPtrArray *arr,
+                 GlobalProperty props[], size_t nelem)
+{
+    int i;
+    for (i = 0; i < nelem; i++) {
+        g_ptr_array_add(arr, (void *)&props[i]);
+    }
+}
+
 /*** Board API.  This should go away once we have a machine config file.  ***/
 
 DeviceState *qdev_create(BusState *bus, const char *name);
diff --git a/include/qom/object.h b/include/qom/object.h
index bcae3f4951..e0262962b5 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -675,6 +675,9 @@ Object *object_new_with_propv(const char *typename,
                               Error **errp,
                               va_list vargs);
 
+void object_apply_global_props(Object *obj, const GPtrArray *props,
+                               Error **errp);
+
 /**
  * object_set_props:
  * @obj: the object instance to set properties on
diff --git a/include/sysemu/accel.h b/include/sysemu/accel.h
index 637358f430..f331d128e9 100644
--- a/include/sysemu/accel.h
+++ b/include/sysemu/accel.h
@@ -49,7 +49,7 @@ typedef struct AccelClass {
      * global properties may be overridden by machine-type
      * compat_props or user-provided global properties.
      */
-    GlobalProperty *global_props;
+    GPtrArray *compat_props;
 } AccelClass;
 
 #define TYPE_ACCEL "accel"
@@ -67,8 +67,6 @@ typedef struct AccelClass {
 extern unsigned long tcg_tb_size;
 
 void configure_accelerator(MachineState *ms);
-/* Register accelerator specific global properties */
-void accel_register_compat_props(AccelState *accel);
 /* Called just before os_setup_post (ie just before drop OS privs) */
 void accel_setup_post(MachineState *ms);
 
diff --git a/accel/accel.c b/accel/accel.c
index 3da26eb90f..6db5d8f4df 100644
--- a/accel/accel.c
+++ b/accel/accel.c
@@ -119,18 +119,6 @@ void configure_accelerator(MachineState *ms)
     }
 }
 
-void accel_register_compat_props(AccelState *accel)
-{
-    AccelClass *class = ACCEL_GET_CLASS(accel);
-    GlobalProperty *prop = class->global_props;
-
-    for (; prop && prop->driver; prop++) {
-        /* Any compat_props must never cause error */
-        prop->errp = &error_abort;
-        qdev_prop_register_global(prop);
-    }
-}
-
 void accel_setup_post(MachineState *ms)
 {
     AccelState *accel = ms->accelerator;
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 6b3cc55b27..53b507164f 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -972,6 +972,15 @@ static void device_initfn(Object *obj)
 
 static void device_post_init(Object *obj)
 {
+    if (object_dynamic_cast(qdev_get_machine(), TYPE_MACHINE)) {
+        MachineState *m = MACHINE(qdev_get_machine());
+        AccelClass *ac = ACCEL_GET_CLASS(m->accelerator);
+
+        if (ac->compat_props) {
+            object_apply_global_props(obj, ac->compat_props, &error_abort);
+        }
+    }
+
     qdev_prop_set_globals(DEVICE(obj));
 }
 
diff --git a/hw/xen/xen-common.c b/hw/xen/xen-common.c
index 6ec14c73ca..4532aa8632 100644
--- a/hw/xen/xen-common.c
+++ b/hw/xen/xen-common.c
@@ -174,18 +174,21 @@ static GlobalProperty xen_compat_props[] = {
         .driver = "migration",
         .property = "send-section-footer",
         .value = "off",
-    },
-    { /* end of list */ },
+    }
 };
 
 static void xen_accel_class_init(ObjectClass *oc, void *data)
 {
     AccelClass *ac = ACCEL_CLASS(oc);
+
     ac->name = "Xen";
     ac->init_machine = xen_init;
     ac->setup_post = xen_setup_post;
     ac->allowed = &xen_allowed;
-    ac->global_props = xen_compat_props;
+    ac->compat_props = g_ptr_array_new();
+
+    compat_props_add(ac->compat_props,
+                     xen_compat_props, G_N_ELEMENTS(xen_compat_props));
 }
 
 #define TYPE_XEN_ACCEL ACCEL_CLASS_NAME("xen")
diff --git a/qom/object.c b/qom/object.c
index 17921c0a71..dbdab0aead 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -370,6 +370,31 @@ static void object_post_init_with_type(Object *obj, TypeImpl *ti)
     }
 }
 
+void object_apply_global_props(Object *obj, const GPtrArray *props, Error **errp)
+{
+    Error *err = NULL;
+    int i;
+
+    if (!props) {
+        return;
+    }
+
+    for (i = 0; i < props->len; i++) {
+        GlobalProperty *p = g_ptr_array_index(props, i);
+
+        if (object_dynamic_cast(obj, p->driver) == NULL) {
+            continue;
+        }
+        p->used = true;
+        object_property_parse(obj, p->value, p->property, &err);
+        if (err != NULL) {
+            error_prepend(&err, "can't apply global %s.%s=%s: ",
+                          p->driver, p->property, p->value);
+            error_propagate(errp, err);
+        }
+    }
+}
+
 static void object_initialize_with_type(void *data, size_t size, TypeImpl *type)
 {
     Object *obj = data;
diff --git a/vl.c b/vl.c
index f5c8ef973c..7971470539 100644
--- a/vl.c
+++ b/vl.c
@@ -2984,7 +2984,6 @@ static void user_register_global_props(void)
  */
 static void register_global_properties(MachineState *ms)
 {
-    accel_register_compat_props(ms->accelerator);
     machine_register_compat_props(ms);
     user_register_global_props();
 }
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 02/28] machines: replace COMPAT define with a static array
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 01/28] hw: apply accel compat properties without touching globals Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:33   ` Cornelia Huck
  2018-12-21 14:17   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 03/28] hw: apply machine compat properties without touching globals Marc-André Lureau
                   ` (26 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  10 +-
 hw/arm/virt.c              |  45 +--
 hw/i386/pc_piix.c          | 563 +++++++++++++++++++++----------------
 hw/i386/pc_q35.c           |  66 ++++-
 hw/ppc/spapr.c             | 201 ++++++-------
 hw/s390x/s390-virtio-ccw.c | 219 ++++++++-------
 6 files changed, 622 insertions(+), 482 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index f82f28468b..92aa43a40e 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -288,18 +288,14 @@ struct MachineState {
     } \
     type_init(machine_initfn##_register_types)
 
-#define SET_MACHINE_COMPAT(m, COMPAT) \
+#define SET_MACHINE_COMPAT(m, compat) \
     do {                              \
         int i;                        \
-        static GlobalProperty props[] = {       \
-            COMPAT                              \
-            { /* end of list */ }               \
-        };                                      \
         if (!m->compat_props) { \
             m->compat_props = g_array_new(false, false, sizeof(void *)); \
         } \
-        for (i = 0; props[i].driver != NULL; i++) {    \
-            GlobalProperty *prop = &props[i];          \
+        for (i = 0; i < G_N_ELEMENTS(compat); i++) {          \
+            GlobalProperty *prop = &compat[i];          \
             g_array_append_val(m->compat_props, prop); \
         }                                              \
     } while (0)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 5b678237b7..f3155efa07 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1872,84 +1872,91 @@ static void virt_machine_4_0_options(MachineClass *mc)
 }
 DEFINE_VIRT_MACHINE_AS_LATEST(4, 0)
 
-#define VIRT_COMPAT_3_1 \
+static GlobalProperty virt_compat_3_1[] = {
     HW_COMPAT_3_1
+};
 
 static void virt_machine_3_1_options(MachineClass *mc)
 {
     virt_machine_4_0_options(mc);
-    SET_MACHINE_COMPAT(mc, VIRT_COMPAT_3_1);
+    SET_MACHINE_COMPAT(mc, virt_compat_3_1);
 }
 DEFINE_VIRT_MACHINE(3, 1)
 
-#define VIRT_COMPAT_3_0 \
+static GlobalProperty virt_compat_3_0[] = {
     HW_COMPAT_3_0
+};
 
 static void virt_machine_3_0_options(MachineClass *mc)
 {
     virt_machine_3_1_options(mc);
-    SET_MACHINE_COMPAT(mc, VIRT_COMPAT_3_0);
+    SET_MACHINE_COMPAT(mc, virt_compat_3_0);
 }
 DEFINE_VIRT_MACHINE(3, 0)
 
-#define VIRT_COMPAT_2_12 \
+static GlobalProperty virt_compat_2_12[] = {
     HW_COMPAT_2_12
+};
 
 static void virt_machine_2_12_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_3_0_options(mc);
-    SET_MACHINE_COMPAT(mc, VIRT_COMPAT_2_12);
+    SET_MACHINE_COMPAT(mc, virt_compat_2_12);
     vmc->no_highmem_ecam = true;
     mc->max_cpus = 255;
 }
 DEFINE_VIRT_MACHINE(2, 12)
 
-#define VIRT_COMPAT_2_11 \
+static GlobalProperty virt_compat_2_11[] = {
     HW_COMPAT_2_11
+};
 
 static void virt_machine_2_11_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_2_12_options(mc);
-    SET_MACHINE_COMPAT(mc, VIRT_COMPAT_2_11);
+    SET_MACHINE_COMPAT(mc, virt_compat_2_11);
     vmc->smbios_old_sys_ver = true;
 }
 DEFINE_VIRT_MACHINE(2, 11)
 
-#define VIRT_COMPAT_2_10 \
+static GlobalProperty virt_compat_2_10[] = {
     HW_COMPAT_2_10
+};
 
 static void virt_machine_2_10_options(MachineClass *mc)
 {
     virt_machine_2_11_options(mc);
-    SET_MACHINE_COMPAT(mc, VIRT_COMPAT_2_10);
+    SET_MACHINE_COMPAT(mc, virt_compat_2_10);
     /* before 2.11 we never faulted accesses to bad addresses */
     mc->ignore_memory_transaction_failures = true;
 }
 DEFINE_VIRT_MACHINE(2, 10)
 
-#define VIRT_COMPAT_2_9 \
+static GlobalProperty virt_compat_2_9[] = {
     HW_COMPAT_2_9
+};
 
 static void virt_machine_2_9_options(MachineClass *mc)
 {
     virt_machine_2_10_options(mc);
-    SET_MACHINE_COMPAT(mc, VIRT_COMPAT_2_9);
+    SET_MACHINE_COMPAT(mc, virt_compat_2_9);
 }
 DEFINE_VIRT_MACHINE(2, 9)
 
-#define VIRT_COMPAT_2_8 \
+static GlobalProperty virt_compat_2_8[] = {
     HW_COMPAT_2_8
+};
 
 static void virt_machine_2_8_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_2_9_options(mc);
-    SET_MACHINE_COMPAT(mc, VIRT_COMPAT_2_8);
+    SET_MACHINE_COMPAT(mc, virt_compat_2_8);
     /* For 2.8 and earlier we falsely claimed in the DT that
      * our timers were edge-triggered, not level-triggered.
      */
@@ -1957,15 +1964,16 @@ static void virt_machine_2_8_options(MachineClass *mc)
 }
 DEFINE_VIRT_MACHINE(2, 8)
 
-#define VIRT_COMPAT_2_7 \
+static GlobalProperty virt_compat_2_7[] = {
     HW_COMPAT_2_7
+};
 
 static void virt_machine_2_7_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_2_8_options(mc);
-    SET_MACHINE_COMPAT(mc, VIRT_COMPAT_2_7);
+    SET_MACHINE_COMPAT(mc, virt_compat_2_7);
     /* ITS was introduced with 2.8 */
     vmc->no_its = true;
     /* Stick with 1K pages for migration compatibility */
@@ -1973,15 +1981,16 @@ static void virt_machine_2_7_options(MachineClass *mc)
 }
 DEFINE_VIRT_MACHINE(2, 7)
 
-#define VIRT_COMPAT_2_6 \
+static GlobalProperty virt_compat_2_6[] = {
     HW_COMPAT_2_6
+};
 
 static void virt_machine_2_6_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_2_7_options(mc);
-    SET_MACHINE_COMPAT(mc, VIRT_COMPAT_2_6);
+    SET_MACHINE_COMPAT(mc, virt_compat_2_6);
     vmc->disallow_affinity_adjustment = true;
     /* Disable PMU for 2.6 as PMU support was first introduced in 2.7 */
     vmc->no_pmu = true;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 6981cfa740..8ade7318e0 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -438,83 +438,117 @@ static void pc_i440fx_4_0_machine_options(MachineClass *m)
 DEFINE_I440FX_MACHINE(v4_0, "pc-i440fx-4.0", NULL,
                       pc_i440fx_4_0_machine_options);
 
+static GlobalProperty pc_compat_3_1[] = {
+    PC_COMPAT_3_1
+};
+
 static void pc_i440fx_3_1_machine_options(MachineClass *m)
 {
     pc_i440fx_4_0_machine_options(m);
     m->is_default = 0;
     m->alias = NULL;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_3_1);
+    SET_MACHINE_COMPAT(m, pc_compat_3_1);
 }
 
 DEFINE_I440FX_MACHINE(v3_1, "pc-i440fx-3.1", NULL,
                       pc_i440fx_3_1_machine_options);
 
+static GlobalProperty pc_compat_3_0[] = {
+    PC_COMPAT_3_0
+};
+
 static void pc_i440fx_3_0_machine_options(MachineClass *m)
 {
     pc_i440fx_3_1_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_3_0);
+    SET_MACHINE_COMPAT(m, pc_compat_3_0);
 }
 
 DEFINE_I440FX_MACHINE(v3_0, "pc-i440fx-3.0", NULL,
                       pc_i440fx_3_0_machine_options);
 
+static GlobalProperty pc_compat_2_12[] = {
+    PC_COMPAT_2_12
+};
+
 static void pc_i440fx_2_12_machine_options(MachineClass *m)
 {
     pc_i440fx_3_0_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_12);
+    SET_MACHINE_COMPAT(m, pc_compat_2_12);
 }
 
 DEFINE_I440FX_MACHINE(v2_12, "pc-i440fx-2.12", NULL,
                       pc_i440fx_2_12_machine_options);
 
+static GlobalProperty pc_compat_2_11[] = {
+    PC_COMPAT_2_11
+};
+
 static void pc_i440fx_2_11_machine_options(MachineClass *m)
 {
     pc_i440fx_2_12_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_11);
+    SET_MACHINE_COMPAT(m, pc_compat_2_11);
 }
 
 DEFINE_I440FX_MACHINE(v2_11, "pc-i440fx-2.11", NULL,
                       pc_i440fx_2_11_machine_options);
 
+static GlobalProperty pc_compat_2_10[] = {
+    PC_COMPAT_2_10
+};
+
 static void pc_i440fx_2_10_machine_options(MachineClass *m)
 {
     pc_i440fx_2_11_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_10);
+    SET_MACHINE_COMPAT(m, pc_compat_2_10);
     m->auto_enable_numa_with_memhp = false;
 }
 
 DEFINE_I440FX_MACHINE(v2_10, "pc-i440fx-2.10", NULL,
                       pc_i440fx_2_10_machine_options);
 
+static GlobalProperty pc_compat_2_9[] = {
+    PC_COMPAT_2_9
+};
+
 static void pc_i440fx_2_9_machine_options(MachineClass *m)
 {
     pc_i440fx_2_10_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_9);
+    SET_MACHINE_COMPAT(m, pc_compat_2_9);
     m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
 }
 
 DEFINE_I440FX_MACHINE(v2_9, "pc-i440fx-2.9", NULL,
                       pc_i440fx_2_9_machine_options);
 
+static GlobalProperty pc_compat_2_8[] = {
+    PC_COMPAT_2_8
+};
+
 static void pc_i440fx_2_8_machine_options(MachineClass *m)
 {
     pc_i440fx_2_9_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_8);
+    SET_MACHINE_COMPAT(m, pc_compat_2_8);
 }
 
 DEFINE_I440FX_MACHINE(v2_8, "pc-i440fx-2.8", NULL,
                       pc_i440fx_2_8_machine_options);
 
+static GlobalProperty pc_compat_2_7[] = {
+    PC_COMPAT_2_7
+};
 
 static void pc_i440fx_2_7_machine_options(MachineClass *m)
 {
     pc_i440fx_2_8_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_7);
+    SET_MACHINE_COMPAT(m, pc_compat_2_7);
 }
 
 DEFINE_I440FX_MACHINE(v2_7, "pc-i440fx-2.7", NULL,
                       pc_i440fx_2_7_machine_options);
 
+static GlobalProperty pc_compat_2_6[] = {
+    PC_COMPAT_2_6
+};
 
 static void pc_i440fx_2_6_machine_options(MachineClass *m)
 {
@@ -522,12 +556,15 @@ static void pc_i440fx_2_6_machine_options(MachineClass *m)
     pc_i440fx_2_7_machine_options(m);
     pcmc->legacy_cpu_hotplug = true;
     pcmc->linuxboot_dma_enabled = false;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_6);
+    SET_MACHINE_COMPAT(m, pc_compat_2_6);
 }
 
 DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6", NULL,
                       pc_i440fx_2_6_machine_options);
 
+static GlobalProperty pc_compat_2_5[] = {
+    PC_COMPAT_2_5
+};
 
 static void pc_i440fx_2_5_machine_options(MachineClass *m)
 {
@@ -535,12 +572,15 @@ static void pc_i440fx_2_5_machine_options(MachineClass *m)
     pc_i440fx_2_6_machine_options(m);
     pcmc->save_tsc_khz = false;
     m->legacy_fw_cfg_order = 1;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_5);
+    SET_MACHINE_COMPAT(m, pc_compat_2_5);
 }
 
 DEFINE_I440FX_MACHINE(v2_5, "pc-i440fx-2.5", NULL,
                       pc_i440fx_2_5_machine_options);
 
+static GlobalProperty pc_compat_2_4[] = {
+    PC_COMPAT_2_4
+};
 
 static void pc_i440fx_2_4_machine_options(MachineClass *m)
 {
@@ -548,23 +588,29 @@ static void pc_i440fx_2_4_machine_options(MachineClass *m)
     pc_i440fx_2_5_machine_options(m);
     m->hw_version = "2.4.0";
     pcmc->broken_reserved_end = true;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_4);
+    SET_MACHINE_COMPAT(m, pc_compat_2_4);
 }
 
 DEFINE_I440FX_MACHINE(v2_4, "pc-i440fx-2.4", NULL,
                       pc_i440fx_2_4_machine_options)
 
+static GlobalProperty pc_compatp_2_3[] = {
+    PC_COMPAT_2_3
+};
 
 static void pc_i440fx_2_3_machine_options(MachineClass *m)
 {
     pc_i440fx_2_4_machine_options(m);
     m->hw_version = "2.3.0";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_3);
+    SET_MACHINE_COMPAT(m, pc_compatp_2_3);
 }
 
 DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3,
                       pc_i440fx_2_3_machine_options);
 
+static GlobalProperty pc_compatp_2_2[] = {
+    PC_COMPAT_2_2
+};
 
 static void pc_i440fx_2_2_machine_options(MachineClass *m)
 {
@@ -572,13 +618,16 @@ static void pc_i440fx_2_2_machine_options(MachineClass *m)
     pc_i440fx_2_3_machine_options(m);
     m->hw_version = "2.2.0";
     m->default_machine_opts = "firmware=bios-256k.bin,suppress-vmdesc=on";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_2);
+    SET_MACHINE_COMPAT(m, pc_compatp_2_2);
     pcmc->rsdp_in_ram = false;
 }
 
 DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2,
                       pc_i440fx_2_2_machine_options);
 
+static GlobalProperty pc_compatp_2_1[] = {
+    PC_COMPAT_2_1
+};
 
 static void pc_i440fx_2_1_machine_options(MachineClass *m)
 {
@@ -586,7 +635,7 @@ static void pc_i440fx_2_1_machine_options(MachineClass *m)
     pc_i440fx_2_2_machine_options(m);
     m->hw_version = "2.1.0";
     m->default_display = NULL;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_1);
+    SET_MACHINE_COMPAT(m, pc_compatp_2_1);
     pcmc->smbios_uuid_encoded = false;
     pcmc->enforce_aligned_dimm = false;
 }
@@ -594,14 +643,16 @@ static void pc_i440fx_2_1_machine_options(MachineClass *m)
 DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1,
                       pc_i440fx_2_1_machine_options);
 
-
+static GlobalProperty pc_compatp_2_0[] = {
+    PC_COMPAT_2_0
+};
 
 static void pc_i440fx_2_0_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
     pc_i440fx_2_1_machine_options(m);
     m->hw_version = "2.0.0";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_0);
+    SET_MACHINE_COMPAT(m, pc_compatp_2_0);
     pcmc->smbios_legacy_mode = true;
     pcmc->has_reserved_memory = false;
     /* This value depends on the actual DSDT and SSDT compiled into
@@ -627,6 +678,9 @@ static void pc_i440fx_2_0_machine_options(MachineClass *m)
 DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0,
                       pc_i440fx_2_0_machine_options);
 
+static GlobalProperty pc_compatp_1_7[] = {
+    PC_COMPAT_1_7
+};
 
 static void pc_i440fx_1_7_machine_options(MachineClass *m)
 {
@@ -635,7 +689,7 @@ static void pc_i440fx_1_7_machine_options(MachineClass *m)
     m->hw_version = "1.7.0";
     m->default_machine_opts = NULL;
     m->option_rom_has_mr = true;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_1_7);
+    SET_MACHINE_COMPAT(m, pc_compatp_1_7);
     pcmc->smbios_defaults = false;
     pcmc->gigabyte_align = false;
     pcmc->legacy_acpi_table_size = 6414;
@@ -644,6 +698,9 @@ static void pc_i440fx_1_7_machine_options(MachineClass *m)
 DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7,
                       pc_i440fx_1_7_machine_options);
 
+static GlobalProperty pc_compatp_1_6[] = {
+    PC_COMPAT_1_6
+};
 
 static void pc_i440fx_1_6_machine_options(MachineClass *m)
 {
@@ -651,368 +708,378 @@ static void pc_i440fx_1_6_machine_options(MachineClass *m)
     pc_i440fx_1_7_machine_options(m);
     m->hw_version = "1.6.0";
     m->rom_file_has_mr = false;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_1_6);
+    SET_MACHINE_COMPAT(m, pc_compatp_1_6);
     pcmc->has_acpi_build = false;
 }
 
 DEFINE_I440FX_MACHINE(v1_6, "pc-i440fx-1.6", pc_compat_1_6,
                       pc_i440fx_1_6_machine_options);
 
+static GlobalProperty pc_compatp_1_5[] = {
+    PC_COMPAT_1_5
+};
 
 static void pc_i440fx_1_5_machine_options(MachineClass *m)
 {
     pc_i440fx_1_6_machine_options(m);
     m->hw_version = "1.5.0";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_1_5);
+    SET_MACHINE_COMPAT(m, pc_compatp_1_5);
 }
 
 DEFINE_I440FX_MACHINE(v1_5, "pc-i440fx-1.5", pc_compat_1_5,
                       pc_i440fx_1_5_machine_options);
 
+static GlobalProperty pc_compatp_1_4[] = {
+    PC_COMPAT_1_4
+};
 
 static void pc_i440fx_1_4_machine_options(MachineClass *m)
 {
     pc_i440fx_1_5_machine_options(m);
     m->hw_version = "1.4.0";
     m->hot_add_cpu = NULL;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_1_4);
+    SET_MACHINE_COMPAT(m, pc_compatp_1_4);
 }
 
 DEFINE_I440FX_MACHINE(v1_4, "pc-i440fx-1.4", pc_compat_1_4,
                       pc_i440fx_1_4_machine_options);
 
-
-#define PC_COMPAT_1_3 \
-        PC_CPU_MODEL_IDS("1.3.0") \
-        {\
-            .driver   = "usb-tablet",\
-            .property = "usb_version",\
-            .value    = stringify(1),\
-        },{\
-            .driver   = "virtio-net-pci",\
-            .property = "ctrl_mac_addr",\
-            .value    = "off",      \
-        },{ \
-            .driver   = "virtio-net-pci", \
-            .property = "mq", \
-            .value    = "off", \
-        }, {\
-            .driver   = "e1000",\
-            .property = "autonegotiation",\
-            .value    = "off",\
-        },
-
+static GlobalProperty pc_compatp_1_3[] = {
+    PC_CPU_MODEL_IDS("1.3.0")
+    {
+        .driver   = "usb-tablet",
+        .property = "usb_version",
+        .value    = stringify(1),
+    },{
+        .driver   = "virtio-net-pci",
+        .property = "ctrl_mac_addr",
+        .value    = "off",
+    },{
+        .driver   = "virtio-net-pci",
+        .property = "mq",
+        .value    = "off",
+    }, {
+        .driver   = "e1000",
+        .property = "autonegotiation",
+        .value    = "off",
+    },
+};
 
 static void pc_i440fx_1_3_machine_options(MachineClass *m)
 {
     pc_i440fx_1_4_machine_options(m);
     m->hw_version = "1.3.0";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_1_3);
+    SET_MACHINE_COMPAT(m, pc_compatp_1_3);
 }
 
 DEFINE_I440FX_MACHINE(v1_3, "pc-1.3", pc_compat_1_3,
                       pc_i440fx_1_3_machine_options);
 
 
-#define PC_COMPAT_1_2 \
-        PC_CPU_MODEL_IDS("1.2.0") \
-        {\
-            .driver   = "nec-usb-xhci",\
-            .property = "msi",\
-            .value    = "off",\
-        },{\
-            .driver   = "nec-usb-xhci",\
-            .property = "msix",\
-            .value    = "off",\
-        },{\
-            .driver   = "ivshmem",\
-            .property = "use64",\
-            .value    = "0",\
-        },{\
-            .driver   = "qxl",\
-            .property = "revision",\
-            .value    = stringify(3),\
-        },{\
-            .driver   = "qxl-vga",\
-            .property = "revision",\
-            .value    = stringify(3),\
-        },{\
-            .driver   = "VGA",\
-            .property = "mmio",\
-            .value    = "off",\
-        },
+static GlobalProperty pc_compatp_1_2[] = {
+    PC_CPU_MODEL_IDS("1.2.0")
+    {
+        .driver   = "nec-usb-xhci",
+        .property = "msi",
+        .value    = "off",
+    },{
+        .driver   = "nec-usb-xhci",
+        .property = "msix",
+        .value    = "off",
+    },{
+        .driver   = "ivshmem",
+        .property = "use64",
+        .value    = "0",
+    },{
+        .driver   = "qxl",
+        .property = "revision",
+        .value    = stringify(3),
+    },{
+        .driver   = "qxl-vga",
+        .property = "revision",
+        .value    = stringify(3),
+    },{
+        .driver   = "VGA",
+        .property = "mmio",
+        .value    = "off",
+    },
+};
 
 static void pc_i440fx_1_2_machine_options(MachineClass *m)
 {
     pc_i440fx_1_3_machine_options(m);
     m->hw_version = "1.2.0";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_1_2);
+    SET_MACHINE_COMPAT(m, pc_compatp_1_2);
 }
 
 DEFINE_I440FX_MACHINE(v1_2, "pc-1.2", pc_compat_1_2,
                       pc_i440fx_1_2_machine_options);
 
 
-#define PC_COMPAT_1_1 \
-        PC_CPU_MODEL_IDS("1.1.0") \
-        {\
-            .driver   = "virtio-scsi-pci",\
-            .property = "hotplug",\
-            .value    = "off",\
-        },{\
-            .driver   = "virtio-scsi-pci",\
-            .property = "param_change",\
-            .value    = "off",\
-        },{\
-            .driver   = "VGA",\
-            .property = "vgamem_mb",\
-            .value    = stringify(8),\
-        },{\
-            .driver   = "vmware-svga",\
-            .property = "vgamem_mb",\
-            .value    = stringify(8),\
-        },{\
-            .driver   = "qxl-vga",\
-            .property = "vgamem_mb",\
-            .value    = stringify(8),\
-        },{\
-            .driver   = "qxl",\
-            .property = "vgamem_mb",\
-            .value    = stringify(8),\
-        },{\
-            .driver   = "virtio-blk-pci",\
-            .property = "config-wce",\
-            .value    = "off",\
-        },
+static GlobalProperty pc_compatp_1_1[] = {
+    PC_CPU_MODEL_IDS("1.1.0")
+    {
+        .driver   = "virtio-scsi-pci",
+        .property = "hotplug",
+        .value    = "off",
+    },{
+        .driver   = "virtio-scsi-pci",
+        .property = "param_change",
+        .value    = "off",
+    },{
+        .driver   = "VGA",
+        .property = "vgamem_mb",
+        .value    = stringify(8),
+    },{
+        .driver   = "vmware-svga",
+        .property = "vgamem_mb",
+        .value    = stringify(8),
+    },{
+        .driver   = "qxl-vga",
+        .property = "vgamem_mb",
+        .value    = stringify(8),
+    },{
+        .driver   = "qxl",
+        .property = "vgamem_mb",
+        .value    = stringify(8),
+    },{
+        .driver   = "virtio-blk-pci",
+        .property = "config-wce",
+        .value    = "off",
+    },
+};
 
 static void pc_i440fx_1_1_machine_options(MachineClass *m)
 {
     pc_i440fx_1_2_machine_options(m);
     m->hw_version = "1.1.0";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_1_1);
+    SET_MACHINE_COMPAT(m, pc_compatp_1_1);
 }
 
 DEFINE_I440FX_MACHINE(v1_1, "pc-1.1", pc_compat_1_2,
                       pc_i440fx_1_1_machine_options);
 
-
-#define PC_COMPAT_1_0 \
-        PC_CPU_MODEL_IDS("1.0") \
-        {\
-            .driver   = TYPE_ISA_FDC,\
-            .property = "check_media_rate",\
-            .value    = "off",\
-        }, {\
-            .driver   = "virtio-balloon-pci",\
-            .property = "class",\
-            .value    = stringify(PCI_CLASS_MEMORY_RAM),\
-        },{\
-            .driver   = "apic-common",\
-            .property = "vapic",\
-            .value    = "off",\
-        },{\
-            .driver   = TYPE_USB_DEVICE,\
-            .property = "full-path",\
-            .value    = "no",\
-        },
+static GlobalProperty pc_compatp_1_0[] = {
+    PC_CPU_MODEL_IDS("1.0")
+    {
+        .driver   = TYPE_ISA_FDC,
+        .property = "check_media_rate",
+        .value    = "off",
+    },{
+        .driver   = "virtio-balloon-pci",
+        .property = "class",
+        .value    = stringify(PCI_CLASS_MEMORY_RAM),
+    },{
+        .driver   = "apic-common",
+        .property = "vapic",
+        .value    = "off",
+    },{
+        .driver   = TYPE_USB_DEVICE,
+        .property = "full-path",
+        .value    = "no",
+    },
+};
 
 static void pc_i440fx_1_0_machine_options(MachineClass *m)
 {
     pc_i440fx_1_1_machine_options(m);
     m->hw_version = "1.0";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_1_0);
+    SET_MACHINE_COMPAT(m, pc_compatp_1_0);
 }
 
 DEFINE_I440FX_MACHINE(v1_0, "pc-1.0", pc_compat_1_2,
                       pc_i440fx_1_0_machine_options);
 
 
-#define PC_COMPAT_0_15 \
-        PC_CPU_MODEL_IDS("0.15")
+static GlobalProperty pc_compatp_0_15[] = {
+    PC_CPU_MODEL_IDS("0.15")
+};
 
 static void pc_i440fx_0_15_machine_options(MachineClass *m)
 {
     pc_i440fx_1_0_machine_options(m);
     m->hw_version = "0.15";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_0_15);
+    SET_MACHINE_COMPAT(m, pc_compatp_0_15);
 }
 
 DEFINE_I440FX_MACHINE(v0_15, "pc-0.15", pc_compat_1_2,
                       pc_i440fx_0_15_machine_options);
 
 
-#define PC_COMPAT_0_14 \
-        PC_CPU_MODEL_IDS("0.14") \
-        {\
-            .driver   = "virtio-blk-pci",\
-            .property = "event_idx",\
-            .value    = "off",\
-        },{\
-            .driver   = "virtio-serial-pci",\
-            .property = "event_idx",\
-            .value    = "off",\
-        },{\
-            .driver   = "virtio-net-pci",\
-            .property = "event_idx",\
-            .value    = "off",\
-        },{\
-            .driver   = "virtio-balloon-pci",\
-            .property = "event_idx",\
-            .value    = "off",\
-        },{\
-            .driver   = "qxl",\
-            .property = "revision",\
-            .value    = stringify(2),\
-        },{\
-            .driver   = "qxl-vga",\
-            .property = "revision",\
-            .value    = stringify(2),\
-        },
+static GlobalProperty pc_compatp_0_14[] = {
+    PC_CPU_MODEL_IDS("0.14")
+    {
+        .driver   = "virtio-blk-pci",
+        .property = "event_idx",
+        .value    = "off",
+    },{
+        .driver   = "virtio-serial-pci",
+        .property = "event_idx",
+        .value    = "off",
+    },{
+        .driver   = "virtio-net-pci",
+        .property = "event_idx",
+        .value    = "off",
+    },{
+        .driver   = "virtio-balloon-pci",
+        .property = "event_idx",
+        .value    = "off",
+    },{
+        .driver   = "qxl",
+        .property = "revision",
+        .value    = stringify(2),
+    },{
+        .driver   = "qxl-vga",
+        .property = "revision",
+        .value    = stringify(2),
+    },
+};
 
 static void pc_i440fx_0_14_machine_options(MachineClass *m)
 {
     pc_i440fx_0_15_machine_options(m);
     m->hw_version = "0.14";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_0_14);
+    SET_MACHINE_COMPAT(m, pc_compatp_0_14);
 }
 
 DEFINE_I440FX_MACHINE(v0_14, "pc-0.14", pc_compat_1_2,
                       pc_i440fx_0_14_machine_options);
 
-
-#define PC_COMPAT_0_13 \
-        PC_CPU_MODEL_IDS("0.13") \
-        {\
-            .driver   = TYPE_PCI_DEVICE,\
-            .property = "command_serr_enable",\
-            .value    = "off",\
-        },{\
-            .driver   = "AC97",\
-            .property = "use_broken_id",\
-            .value    = stringify(1),\
-        },{\
-            .driver   = "virtio-9p-pci",\
-            .property = "vectors",\
-            .value    = stringify(0),\
-        },{\
-            .driver   = "VGA",\
-            .property = "rombar",\
-            .value    = stringify(0),\
-        },{\
-            .driver   = "vmware-svga",\
-            .property = "rombar",\
-            .value    = stringify(0),\
-        },
+static GlobalProperty pc_compatp_0_13[] = {
+    PC_CPU_MODEL_IDS("0.13")
+    {
+        .driver   = TYPE_PCI_DEVICE,
+        .property = "command_serr_enable",
+        .value    = "off",
+    },{
+        .driver   = "AC97",
+        .property = "use_broken_id",
+        .value    = stringify(1),
+    },{
+        .driver   = "virtio-9p-pci",
+        .property = "vectors",
+        .value    = stringify(0),
+    },{
+        .driver   = "VGA",
+        .property = "rombar",
+        .value    = stringify(0),
+    },{
+        .driver   = "vmware-svga",
+        .property = "rombar",
+        .value    = stringify(0),
+    },
+};
 
 static void pc_i440fx_0_13_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
     pc_i440fx_0_14_machine_options(m);
     m->hw_version = "0.13";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_0_13);
+    SET_MACHINE_COMPAT(m, pc_compatp_0_13);
     pcmc->kvmclock_enabled = false;
 }
 
 DEFINE_I440FX_MACHINE(v0_13, "pc-0.13", pc_compat_0_13,
                       pc_i440fx_0_13_machine_options);
 
-
-#define PC_COMPAT_0_12 \
-        PC_CPU_MODEL_IDS("0.12") \
-        {\
-            .driver   = "virtio-serial-pci",\
-            .property = "max_ports",\
-            .value    = stringify(1),\
-        },{\
-            .driver   = "virtio-serial-pci",\
-            .property = "vectors",\
-            .value    = stringify(0),\
-        },{\
-            .driver   = "usb-mouse",\
-            .property = "serial",\
-            .value    = "1",\
-        },{\
-            .driver   = "usb-tablet",\
-            .property = "serial",\
-            .value    = "1",\
-        },{\
-            .driver   = "usb-kbd",\
-            .property = "serial",\
-            .value    = "1",\
-        },
+static GlobalProperty pc_compat_0_12[] = {
+    PC_CPU_MODEL_IDS("0.12")
+    {
+        .driver   = "virtio-serial-pci",
+        .property = "max_ports",
+        .value    = stringify(1),
+    },{
+        .driver   = "virtio-serial-pci",
+        .property = "vectors",
+        .value    = stringify(0),
+    },{
+        .driver   = "usb-mouse",
+        .property = "serial",
+        .value    = "1",
+    },{
+        .driver   = "usb-tablet",
+        .property = "serial",
+        .value    = "1",
+    },{
+        .driver   = "usb-kbd",
+        .property = "serial",
+        .value    = "1",
+    },
+};
 
 static void pc_i440fx_0_12_machine_options(MachineClass *m)
 {
     pc_i440fx_0_13_machine_options(m);
     m->hw_version = "0.12";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_0_12);
+    SET_MACHINE_COMPAT(m, pc_compat_0_12);
 }
 
 DEFINE_I440FX_MACHINE(v0_12, "pc-0.12", pc_compat_0_13,
                       pc_i440fx_0_12_machine_options);
 
 
-#define PC_COMPAT_0_11 \
-        PC_CPU_MODEL_IDS("0.11") \
-        {\
-            .driver   = "virtio-blk-pci",\
-            .property = "vectors",\
-            .value    = stringify(0),\
-        },{\
-            .driver   = TYPE_PCI_DEVICE,\
-            .property = "rombar",\
-            .value    = stringify(0),\
-        },{\
-            .driver   = "ide-drive",\
-            .property = "ver",\
-            .value    = "0.11",\
-        },{\
-            .driver   = "scsi-disk",\
-            .property = "ver",\
-            .value    = "0.11",\
-        },
+static GlobalProperty pc_compat_0_11[] = {
+    PC_CPU_MODEL_IDS("0.11")
+    {
+        .driver   = "virtio-blk-pci",
+        .property = "vectors",
+        .value    = stringify(0),
+    },{
+        .driver   = TYPE_PCI_DEVICE,
+        .property = "rombar",
+        .value    = stringify(0),
+    },{
+        .driver   = "ide-drive",
+        .property = "ver",
+        .value    = "0.11",
+    },{
+        .driver   = "scsi-disk",
+        .property = "ver",
+        .value    = "0.11",
+    },
+};
 
 static void pc_i440fx_0_11_machine_options(MachineClass *m)
 {
     pc_i440fx_0_12_machine_options(m);
     m->hw_version = "0.11";
     m->deprecation_reason = "use a newer machine type instead";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_0_11);
+    SET_MACHINE_COMPAT(m, pc_compat_0_11);
 }
 
 DEFINE_I440FX_MACHINE(v0_11, "pc-0.11", pc_compat_0_13,
                       pc_i440fx_0_11_machine_options);
 
-
-#define PC_COMPAT_0_10 \
-    PC_CPU_MODEL_IDS("0.10") \
-    {\
-        .driver   = "virtio-blk-pci",\
-        .property = "class",\
-        .value    = stringify(PCI_CLASS_STORAGE_OTHER),\
-    },{\
-        .driver   = "virtio-serial-pci",\
-        .property = "class",\
-        .value    = stringify(PCI_CLASS_DISPLAY_OTHER),\
-    },{\
-        .driver   = "virtio-net-pci",\
-        .property = "vectors",\
-        .value    = stringify(0),\
-    },{\
-        .driver   = "ide-drive",\
-        .property = "ver",\
-        .value    = "0.10",\
-    },{\
-        .driver   = "scsi-disk",\
-        .property = "ver",\
-        .value    = "0.10",\
+static GlobalProperty pc_compat_0_10[] = {
+    PC_CPU_MODEL_IDS("0.10")
+    {
+        .driver   = "virtio-blk-pci",
+        .property = "class",
+        .value    = stringify(PCI_CLASS_STORAGE_OTHER),
+    },{
+        .driver   = "virtio-serial-pci",
+        .property = "class",
+        .value    = stringify(PCI_CLASS_DISPLAY_OTHER),
+    },{
+        .driver   = "virtio-net-pci",
+        .property = "vectors",
+        .value    = stringify(0),
+    },{
+        .driver   = "ide-drive",
+        .property = "ver",
+        .value    = "0.10",
+    },{
+        .driver   = "scsi-disk",
+        .property = "ver",
+        .value    = "0.10",
     },
+};
 
 static void pc_i440fx_0_10_machine_options(MachineClass *m)
 {
     pc_i440fx_0_11_machine_options(m);
     m->hw_version = "0.10";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_0_10);
+    SET_MACHINE_COMPAT(m, pc_compat_0_10);
 }
 
 DEFINE_I440FX_MACHINE(v0_10, "pc-0.10", pc_compat_0_13,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 58459bdab5..0c02a72e00 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -320,50 +320,70 @@ static void pc_q35_4_0_machine_options(MachineClass *m)
 DEFINE_Q35_MACHINE(v4_0, "pc-q35-4.0", NULL,
                    pc_q35_4_0_machine_options);
 
+static GlobalProperty pc_compat_3_1[] = {
+    PC_COMPAT_3_1
+};
+
 static void pc_q35_3_1_machine_options(MachineClass *m)
 {
     pc_q35_4_0_machine_options(m);
     m->alias = NULL;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_3_1);
+    SET_MACHINE_COMPAT(m, pc_compat_3_1);
 }
 
 DEFINE_Q35_MACHINE(v3_1, "pc-q35-3.1", NULL,
                    pc_q35_3_1_machine_options);
 
+static GlobalProperty pc_compat_3_0[] = {
+    PC_COMPAT_3_0
+};
+
 static void pc_q35_3_0_machine_options(MachineClass *m)
 {
     pc_q35_3_1_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_3_0);
+    SET_MACHINE_COMPAT(m, pc_compat_3_0);
 }
 
 DEFINE_Q35_MACHINE(v3_0, "pc-q35-3.0", NULL,
                     pc_q35_3_0_machine_options);
 
+static GlobalProperty pc_compat_2_12[] = {
+    PC_COMPAT_2_12
+};
+
 static void pc_q35_2_12_machine_options(MachineClass *m)
 {
     pc_q35_3_0_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_12);
+    SET_MACHINE_COMPAT(m, pc_compat_2_12);
 }
 
 DEFINE_Q35_MACHINE(v2_12, "pc-q35-2.12", NULL,
                    pc_q35_2_12_machine_options);
 
+static GlobalProperty pc_compat_2_11[] = {
+    PC_COMPAT_2_11
+};
+
 static void pc_q35_2_11_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
 
     pc_q35_2_12_machine_options(m);
     pcmc->default_nic_model = "e1000";
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_11);
+    SET_MACHINE_COMPAT(m, pc_compat_2_11);
 }
 
 DEFINE_Q35_MACHINE(v2_11, "pc-q35-2.11", NULL,
                    pc_q35_2_11_machine_options);
 
+static GlobalProperty pc_compat_2_10[] = {
+    PC_COMPAT_2_10
+};
+
 static void pc_q35_2_10_machine_options(MachineClass *m)
 {
     pc_q35_2_11_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_10);
+    SET_MACHINE_COMPAT(m, pc_compat_2_10);
     m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
     m->auto_enable_numa_with_memhp = false;
 }
@@ -371,65 +391,89 @@ static void pc_q35_2_10_machine_options(MachineClass *m)
 DEFINE_Q35_MACHINE(v2_10, "pc-q35-2.10", NULL,
                    pc_q35_2_10_machine_options);
 
+static GlobalProperty pc_compat_2_9[] = {
+    PC_COMPAT_2_9
+};
+
 static void pc_q35_2_9_machine_options(MachineClass *m)
 {
     pc_q35_2_10_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_9);
+    SET_MACHINE_COMPAT(m, pc_compat_2_9);
 }
 
 DEFINE_Q35_MACHINE(v2_9, "pc-q35-2.9", NULL,
                    pc_q35_2_9_machine_options);
 
+static GlobalProperty pc_compat_2_8[] = {
+    PC_COMPAT_2_8
+};
+
 static void pc_q35_2_8_machine_options(MachineClass *m)
 {
     pc_q35_2_9_machine_options(m);
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_8);
+    SET_MACHINE_COMPAT(m, pc_compat_2_8);
 }
 
 DEFINE_Q35_MACHINE(v2_8, "pc-q35-2.8", NULL,
                    pc_q35_2_8_machine_options);
 
+static GlobalProperty pc_compat_2_7[] = {
+    PC_COMPAT_2_7
+};
+
 static void pc_q35_2_7_machine_options(MachineClass *m)
 {
     pc_q35_2_8_machine_options(m);
     m->max_cpus = 255;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_7);
+    SET_MACHINE_COMPAT(m, pc_compat_2_7);
 }
 
 DEFINE_Q35_MACHINE(v2_7, "pc-q35-2.7", NULL,
                    pc_q35_2_7_machine_options);
 
+static GlobalProperty pc_compat_2_6[] = {
+    PC_COMPAT_2_6
+};
+
 static void pc_q35_2_6_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
     pc_q35_2_7_machine_options(m);
     pcmc->legacy_cpu_hotplug = true;
     pcmc->linuxboot_dma_enabled = false;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_6);
+    SET_MACHINE_COMPAT(m, pc_compat_2_6);
 }
 
 DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
                    pc_q35_2_6_machine_options);
 
+static GlobalProperty pc_compat_2_5[] = {
+    PC_COMPAT_2_5
+};
+
 static void pc_q35_2_5_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
     pc_q35_2_6_machine_options(m);
     pcmc->save_tsc_khz = false;
     m->legacy_fw_cfg_order = 1;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_5);
+    SET_MACHINE_COMPAT(m, pc_compat_2_5);
 }
 
 DEFINE_Q35_MACHINE(v2_5, "pc-q35-2.5", NULL,
                    pc_q35_2_5_machine_options);
 
+static GlobalProperty pc_compat_2_4[] = {
+    PC_COMPAT_2_4
+};
+
 static void pc_q35_2_4_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
     pc_q35_2_5_machine_options(m);
     m->hw_version = "2.4.0";
     pcmc->broken_reserved_end = true;
-    SET_MACHINE_COMPAT(m, PC_COMPAT_2_4);
+    SET_MACHINE_COMPAT(m, pc_compat_2_4);
 }
 
 DEFINE_Q35_MACHINE(v2_4, "pc-q35-2.4", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 55be0f56cb..6145a9909d 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3963,13 +3963,14 @@ DEFINE_SPAPR_MACHINE(4_0, "4.0", true);
 /*
  * pseries-3.1
  */
-#define SPAPR_COMPAT_3_1                                              \
+static GlobalProperty spapr_compat_3_1[] = {
     HW_COMPAT_3_1
+};
 
 static void spapr_machine_3_1_class_options(MachineClass *mc)
 {
     spapr_machine_4_0_class_options(mc);
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_3_1);
+    SET_MACHINE_COMPAT(mc, spapr_compat_3_1);
 }
 
 DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
@@ -3977,15 +3978,16 @@ DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
 /*
  * pseries-3.0
  */
-#define SPAPR_COMPAT_3_0                                              \
+static GlobalProperty spapr_compat_3_0[] = {
     HW_COMPAT_3_0
+};
 
 static void spapr_machine_3_0_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
 
     spapr_machine_3_1_class_options(mc);
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_3_0);
+    SET_MACHINE_COMPAT(mc, spapr_compat_3_0);
 
     smc->legacy_irq_allocation = true;
     smc->irq = &spapr_irq_xics_legacy;
@@ -3996,25 +3998,26 @@ DEFINE_SPAPR_MACHINE(3_0, "3.0", false);
 /*
  * pseries-2.12
  */
-#define SPAPR_COMPAT_2_12                                              \
-    HW_COMPAT_2_12                                                     \
-    {                                                                  \
-        .driver = TYPE_POWERPC_CPU,                                    \
-        .property = "pre-3.0-migration",                               \
-        .value    = "on",                                              \
-    },                                                                 \
-    {                                                                  \
-        .driver = TYPE_SPAPR_CPU_CORE,                                 \
-        .property = "pre-3.0-migration",                               \
-        .value    = "on",                                              \
+static GlobalProperty spapr_compat_2_12[] = {
+    HW_COMPAT_2_12
+    {
+        .driver = TYPE_POWERPC_CPU,
+        .property = "pre-3.0-migration",
+        .value    = "on",
+    },
+    {
+        .driver = TYPE_SPAPR_CPU_CORE,
+        .property = "pre-3.0-migration",
+        .value    = "on",
     },
+};
 
 static void spapr_machine_2_12_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
 
     spapr_machine_3_0_class_options(mc);
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_12);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_12);
 
     /* We depend on kvm_enabled() to choose a default value for the
      * hpt-max-page-size capability. Of course we can't do it here
@@ -4041,8 +4044,9 @@ DEFINE_SPAPR_MACHINE(2_12_sxxm, "2.12-sxxm", false);
 /*
  * pseries-2.11
  */
-#define SPAPR_COMPAT_2_11                                              \
+static GlobalProperty spapr_compat_2_11[] = {
     HW_COMPAT_2_11
+};
 
 static void spapr_machine_2_11_class_options(MachineClass *mc)
 {
@@ -4050,7 +4054,7 @@ static void spapr_machine_2_11_class_options(MachineClass *mc)
 
     spapr_machine_2_12_class_options(mc);
     smc->default_caps.caps[SPAPR_CAP_HTM] = SPAPR_CAP_ON;
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_11);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_11);
 }
 
 DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
@@ -4058,13 +4062,14 @@ DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
 /*
  * pseries-2.10
  */
-#define SPAPR_COMPAT_2_10                                              \
+static GlobalProperty spapr_compat_2_10[] = {
     HW_COMPAT_2_10
+};
 
 static void spapr_machine_2_10_class_options(MachineClass *mc)
 {
     spapr_machine_2_11_class_options(mc);
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_10);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_10);
 }
 
 DEFINE_SPAPR_MACHINE(2_10, "2.10", false);
@@ -4072,20 +4077,21 @@ DEFINE_SPAPR_MACHINE(2_10, "2.10", false);
 /*
  * pseries-2.9
  */
-#define SPAPR_COMPAT_2_9                                               \
-    HW_COMPAT_2_9                                                      \
-    {                                                                  \
-        .driver = TYPE_POWERPC_CPU,                                    \
-        .property = "pre-2.10-migration",                              \
-        .value    = "on",                                              \
-    },                                                                 \
+static GlobalProperty spapr_compat_2_9[] = {
+    HW_COMPAT_2_9
+    {
+        .driver = TYPE_POWERPC_CPU,
+        .property = "pre-2.10-migration",
+        .value    = "on",
+    },
+};
 
 static void spapr_machine_2_9_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
 
     spapr_machine_2_10_class_options(mc);
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_9);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_9);
     mc->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
     smc->pre_2_10_has_unused_icps = true;
     smc->resize_hpt_default = SPAPR_RESIZE_HPT_DISABLED;
@@ -4096,18 +4102,19 @@ DEFINE_SPAPR_MACHINE(2_9, "2.9", false);
 /*
  * pseries-2.8
  */
-#define SPAPR_COMPAT_2_8                                        \
-    HW_COMPAT_2_8                                               \
-    {                                                           \
-        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,                 \
-        .property = "pcie-extended-configuration-space",        \
-        .value    = "off",                                      \
+static GlobalProperty spapr_compat_2_8[] = {
+    HW_COMPAT_2_8
+    {
+        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+        .property = "pcie-extended-configuration-space",
+        .value    = "off",
     },
+};
 
 static void spapr_machine_2_8_class_options(MachineClass *mc)
 {
     spapr_machine_2_9_class_options(mc);
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_8);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_8);
     mc->numa_mem_align_shift = 23;
 }
 
@@ -4116,28 +4123,29 @@ DEFINE_SPAPR_MACHINE(2_8, "2.8", false);
 /*
  * pseries-2.7
  */
-#define SPAPR_COMPAT_2_7                            \
-    HW_COMPAT_2_7                                   \
-    {                                               \
-        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,     \
-        .property = "mem_win_size",                 \
-        .value    = stringify(SPAPR_PCI_2_7_MMIO_WIN_SIZE),\
-    },                                              \
-    {                                               \
-        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,     \
-        .property = "mem64_win_size",               \
-        .value    = "0",                            \
-    },                                              \
-    {                                               \
-        .driver = TYPE_POWERPC_CPU,                 \
-        .property = "pre-2.8-migration",            \
-        .value    = "on",                           \
-    },                                              \
-    {                                               \
-        .driver = TYPE_SPAPR_PCI_HOST_BRIDGE,       \
-        .property = "pre-2.8-migration",            \
-        .value    = "on",                           \
+static GlobalProperty spapr_compat_2_7[] = {
+    HW_COMPAT_2_7
+    {
+        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+        .property = "mem_win_size",
+        .value    = stringify(SPAPR_PCI_2_7_MMIO_WIN_SIZE),
+    },
+    {
+        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+        .property = "mem64_win_size",
+        .value    = "0",
+    },
+    {
+        .driver = TYPE_POWERPC_CPU,
+        .property = "pre-2.8-migration",
+        .value    = "on",
     },
+    {
+        .driver = TYPE_SPAPR_PCI_HOST_BRIDGE,
+        .property = "pre-2.8-migration",
+        .value    = "on",
+    },
+};
 
 static void phb_placement_2_7(sPAPRMachineState *spapr, uint32_t index,
                               uint64_t *buid, hwaddr *pio,
@@ -4195,7 +4203,7 @@ static void spapr_machine_2_7_class_options(MachineClass *mc)
     spapr_machine_2_8_class_options(mc);
     mc->default_cpu_type = POWERPC_CPU_TYPE_NAME("power7_v2.3");
     mc->default_machine_opts = "modern-hotplug-events=off";
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_7);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_7);
     smc->phb_placement = phb_placement_2_7;
 }
 
@@ -4204,19 +4212,20 @@ DEFINE_SPAPR_MACHINE(2_7, "2.7", false);
 /*
  * pseries-2.6
  */
-#define SPAPR_COMPAT_2_6 \
-    HW_COMPAT_2_6 \
-    { \
-        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,\
-        .property = "ddw",\
-        .value    = stringify(off),\
+static GlobalProperty spapr_compat_2_6[] = {
+    HW_COMPAT_2_6
+    {
+        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+        .property = "ddw",
+        .value    = stringify(off),
     },
+};
 
 static void spapr_machine_2_6_class_options(MachineClass *mc)
 {
     spapr_machine_2_7_class_options(mc);
     mc->has_hotpluggable_cpus = false;
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_6);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_6);
 }
 
 DEFINE_SPAPR_MACHINE(2_6, "2.6", false);
@@ -4224,13 +4233,14 @@ DEFINE_SPAPR_MACHINE(2_6, "2.6", false);
 /*
  * pseries-2.5
  */
-#define SPAPR_COMPAT_2_5 \
-    HW_COMPAT_2_5 \
-    { \
-        .driver   = "spapr-vlan", \
-        .property = "use-rx-buffer-pools", \
-        .value    = "off", \
+static GlobalProperty spapr_compat_2_5[] = {
+    HW_COMPAT_2_5
+    {
+        .driver   = "spapr-vlan",
+        .property = "use-rx-buffer-pools",
+        .value    = "off",
     },
+};
 
 static void spapr_machine_2_5_class_options(MachineClass *mc)
 {
@@ -4238,7 +4248,7 @@ static void spapr_machine_2_5_class_options(MachineClass *mc)
 
     spapr_machine_2_6_class_options(mc);
     smc->use_ohci_by_default = true;
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_5);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_5);
 }
 
 DEFINE_SPAPR_MACHINE(2_5, "2.5", false);
@@ -4246,8 +4256,9 @@ DEFINE_SPAPR_MACHINE(2_5, "2.5", false);
 /*
  * pseries-2.4
  */
-#define SPAPR_COMPAT_2_4 \
-        HW_COMPAT_2_4
+static GlobalProperty spapr_compat_2_4[] = {
+    HW_COMPAT_2_4
+};
 
 static void spapr_machine_2_4_class_options(MachineClass *mc)
 {
@@ -4255,7 +4266,7 @@ static void spapr_machine_2_4_class_options(MachineClass *mc)
 
     spapr_machine_2_5_class_options(mc);
     smc->dr_lmb_enabled = false;
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_4);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_4);
 }
 
 DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
@@ -4263,37 +4274,38 @@ DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
 /*
  * pseries-2.3
  */
-#define SPAPR_COMPAT_2_3 \
-        HW_COMPAT_2_3 \
-        {\
-            .driver   = "spapr-pci-host-bridge",\
-            .property = "dynamic-reconfiguration",\
-            .value    = "off",\
-        },
+static GlobalProperty spapr_compat_2_3[] = {
+    HW_COMPAT_2_3
+    {
+        .driver   = "spapr-pci-host-bridge",
+        .property = "dynamic-reconfiguration",
+        .value    = "off",
+    },
+};
 
 static void spapr_machine_2_3_class_options(MachineClass *mc)
 {
     spapr_machine_2_4_class_options(mc);
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_3);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_3);
 }
 DEFINE_SPAPR_MACHINE(2_3, "2.3", false);
 
 /*
  * pseries-2.2
  */
-
-#define SPAPR_COMPAT_2_2 \
-        HW_COMPAT_2_2 \
-        {\
-            .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,\
-            .property = "mem_win_size",\
-            .value    = "0x20000000",\
-        },
+static GlobalProperty spapr_compat_2_2[] = {
+    HW_COMPAT_2_2
+    {
+        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+        .property = "mem_win_size",
+        .value    = "0x20000000",
+    },
+};
 
 static void spapr_machine_2_2_class_options(MachineClass *mc)
 {
     spapr_machine_2_3_class_options(mc);
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_2);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_2);
     mc->default_machine_opts = "modern-hotplug-events=off,suppress-vmdesc=on";
 }
 DEFINE_SPAPR_MACHINE(2_2, "2.2", false);
@@ -4301,13 +4313,14 @@ DEFINE_SPAPR_MACHINE(2_2, "2.2", false);
 /*
  * pseries-2.1
  */
-#define SPAPR_COMPAT_2_1 \
-        HW_COMPAT_2_1
+static GlobalProperty spapr_compat_2_1[] = {
+    HW_COMPAT_2_1
+};
 
 static void spapr_machine_2_1_class_options(MachineClass *mc)
 {
     spapr_machine_2_2_class_options(mc);
-    SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_1);
+    SET_MACHINE_COMPAT(mc, spapr_compat_2_1);
 }
 DEFINE_SPAPR_MACHINE(2_1, "2.1", false);
 
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index fd9d0b0542..882a9796cf 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -651,99 +651,110 @@ bool css_migration_enabled(void)
     }                                                                         \
     type_init(ccw_machine_register_##suffix)
 
-#define CCW_COMPAT_3_1 \
-        HW_COMPAT_3_1
-
-#define CCW_COMPAT_3_0 \
-        HW_COMPAT_3_0
-
-#define CCW_COMPAT_2_12 \
-        HW_COMPAT_2_12
-
-#define CCW_COMPAT_2_11 \
-        HW_COMPAT_2_11 \
-        {\
-            .driver   = TYPE_SCLP_EVENT_FACILITY,\
-            .property = "allow_all_mask_sizes",\
-            .value    = "off",\
-        },
-
-#define CCW_COMPAT_2_10 \
-        HW_COMPAT_2_10
-
-#define CCW_COMPAT_2_9 \
-        HW_COMPAT_2_9 \
-        {\
-            .driver   = TYPE_S390_STATTRIB,\
-            .property = "migration-enabled",\
-            .value    = "off",\
-        },
-
-#define CCW_COMPAT_2_8 \
-        HW_COMPAT_2_8 \
-        {\
-            .driver   = TYPE_S390_FLIC_COMMON,\
-            .property = "adapter_routes_max_batch",\
-            .value    = "64",\
-        },
-
-#define CCW_COMPAT_2_7 \
-        HW_COMPAT_2_7
-
-#define CCW_COMPAT_2_6 \
-        HW_COMPAT_2_6 \
-        {\
-            .driver   = TYPE_S390_IPL,\
-            .property = "iplbext_migration",\
-            .value    = "off",\
-        }, {\
-            .driver   = TYPE_VIRTUAL_CSS_BRIDGE,\
-            .property = "css_dev_path",\
-            .value    = "off",\
-        },
-
-#define CCW_COMPAT_2_5 \
-        HW_COMPAT_2_5
-
-#define CCW_COMPAT_2_4 \
-        HW_COMPAT_2_4 \
-        {\
-            .driver   = TYPE_S390_SKEYS,\
-            .property = "migration-enabled",\
-            .value    = "off",\
-        },{\
-            .driver   = "virtio-blk-ccw",\
-            .property = "max_revision",\
-            .value    = "0",\
-        },{\
-            .driver   = "virtio-balloon-ccw",\
-            .property = "max_revision",\
-            .value    = "0",\
-        },{\
-            .driver   = "virtio-serial-ccw",\
-            .property = "max_revision",\
-            .value    = "0",\
-        },{\
-            .driver   = "virtio-9p-ccw",\
-            .property = "max_revision",\
-            .value    = "0",\
-        },{\
-            .driver   = "virtio-rng-ccw",\
-            .property = "max_revision",\
-            .value    = "0",\
-        },{\
-            .driver   = "virtio-net-ccw",\
-            .property = "max_revision",\
-            .value    = "0",\
-        },{\
-            .driver   = "virtio-scsi-ccw",\
-            .property = "max_revision",\
-            .value    = "0",\
-        },{\
-            .driver   = "vhost-scsi-ccw",\
-            .property = "max_revision",\
-            .value    = "0",\
-        },
+static GlobalProperty ccw_compat_3_1[] = {
+    HW_COMPAT_3_1
+};
+
+static GlobalProperty ccw_compat_3_0[] = {
+    HW_COMPAT_3_0
+};
+
+static GlobalProperty ccw_compat_2_12[] = {
+    HW_COMPAT_2_12
+};
+
+static GlobalProperty ccw_compat_2_11[] = {
+    HW_COMPAT_2_11
+    {
+        .driver   = TYPE_SCLP_EVENT_FACILITY,
+        .property = "allow_all_mask_sizes",
+        .value    = "off",
+    },
+};
+
+static GlobalProperty ccw_compat_2_10[] = {
+    HW_COMPAT_2_10
+};
+
+static GlobalProperty ccw_compat_2_9[] = {
+    HW_COMPAT_2_9
+    {
+        .driver   = TYPE_S390_STATTRIB,
+        .property = "migration-enabled",
+        .value    = "off",
+    },
+};
+
+static GlobalProperty ccw_compat_2_8[] = {
+    HW_COMPAT_2_8
+    {
+        .driver   = TYPE_S390_FLIC_COMMON,
+        .property = "adapter_routes_max_batch",
+        .value    = "64",
+    },
+};
+
+static GlobalProperty ccw_compat_2_7[] = {
+    HW_COMPAT_2_7
+};
+
+static GlobalProperty ccw_compat_2_6[] = {
+    HW_COMPAT_2_6
+    {
+        .driver   = TYPE_S390_IPL,
+        .property = "iplbext_migration",
+        .value    = "off",
+    }, {
+        .driver   = TYPE_VIRTUAL_CSS_BRIDGE,
+        .property = "css_dev_path",
+        .value    = "off",
+    },
+};
+
+static GlobalProperty ccw_compat_2_5[] = {
+    HW_COMPAT_2_5
+};
+
+static GlobalProperty ccw_compat_2_4[] = {
+    HW_COMPAT_2_4
+    {
+        .driver   = TYPE_S390_SKEYS,
+        .property = "migration-enabled",
+        .value    = "off",
+    },{
+        .driver   = "virtio-blk-ccw",
+        .property = "max_revision",
+        .value    = "0",
+    },{
+        .driver   = "virtio-balloon-ccw",
+        .property = "max_revision",
+        .value    = "0",
+    },{
+        .driver   = "virtio-serial-ccw",
+        .property = "max_revision",
+        .value    = "0",
+    },{
+        .driver   = "virtio-9p-ccw",
+        .property = "max_revision",
+        .value    = "0",
+    },{
+        .driver   = "virtio-rng-ccw",
+        .property = "max_revision",
+        .value    = "0",
+    },{
+        .driver   = "virtio-net-ccw",
+        .property = "max_revision",
+        .value    = "0",
+    },{
+        .driver   = "virtio-scsi-ccw",
+        .property = "max_revision",
+        .value    = "0",
+    },{
+        .driver   = "vhost-scsi-ccw",
+        .property = "max_revision",
+        .value    = "0",
+    },
+};
 
 static void ccw_machine_4_0_instance_options(MachineState *machine)
 {
@@ -762,7 +773,7 @@ static void ccw_machine_3_1_instance_options(MachineState *machine)
 static void ccw_machine_3_1_class_options(MachineClass *mc)
 {
     ccw_machine_4_0_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_3_1);
+    SET_MACHINE_COMPAT(mc, ccw_compat_3_1);
 }
 DEFINE_CCW_MACHINE(3_1, "3.1", false);
 
@@ -777,7 +788,7 @@ static void ccw_machine_3_0_class_options(MachineClass *mc)
 
     s390mc->hpage_1m_allowed = false;
     ccw_machine_3_1_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_3_0);
+    SET_MACHINE_COMPAT(mc, ccw_compat_3_0);
 }
 DEFINE_CCW_MACHINE(3_0, "3.0", false);
 
@@ -791,7 +802,7 @@ static void ccw_machine_2_12_instance_options(MachineState *machine)
 static void ccw_machine_2_12_class_options(MachineClass *mc)
 {
     ccw_machine_3_0_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_12);
+    SET_MACHINE_COMPAT(mc, ccw_compat_2_12);
 }
 DEFINE_CCW_MACHINE(2_12, "2.12", false);
 
@@ -807,7 +818,7 @@ static void ccw_machine_2_11_instance_options(MachineState *machine)
 static void ccw_machine_2_11_class_options(MachineClass *mc)
 {
     ccw_machine_2_12_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_11);
+    SET_MACHINE_COMPAT(mc, ccw_compat_2_11);
 }
 DEFINE_CCW_MACHINE(2_11, "2.11", false);
 
@@ -819,7 +830,7 @@ static void ccw_machine_2_10_instance_options(MachineState *machine)
 static void ccw_machine_2_10_class_options(MachineClass *mc)
 {
     ccw_machine_2_11_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_10);
+    SET_MACHINE_COMPAT(mc, ccw_compat_2_10);
 }
 DEFINE_CCW_MACHINE(2_10, "2.10", false);
 
@@ -838,7 +849,7 @@ static void ccw_machine_2_9_class_options(MachineClass *mc)
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
 
     ccw_machine_2_10_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_9);
+    SET_MACHINE_COMPAT(mc, ccw_compat_2_9);
     s390mc->css_migration_enabled = false;
 }
 DEFINE_CCW_MACHINE(2_9, "2.9", false);
@@ -851,7 +862,7 @@ static void ccw_machine_2_8_instance_options(MachineState *machine)
 static void ccw_machine_2_8_class_options(MachineClass *mc)
 {
     ccw_machine_2_9_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_8);
+    SET_MACHINE_COMPAT(mc, ccw_compat_2_8);
 }
 DEFINE_CCW_MACHINE(2_8, "2.8", false);
 
@@ -866,7 +877,7 @@ static void ccw_machine_2_7_class_options(MachineClass *mc)
 
     s390mc->cpu_model_allowed = false;
     ccw_machine_2_8_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_7);
+    SET_MACHINE_COMPAT(mc, ccw_compat_2_7);
 }
 DEFINE_CCW_MACHINE(2_7, "2.7", false);
 
@@ -881,7 +892,7 @@ static void ccw_machine_2_6_class_options(MachineClass *mc)
 
     s390mc->ri_allowed = false;
     ccw_machine_2_7_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_6);
+    SET_MACHINE_COMPAT(mc, ccw_compat_2_6);
 }
 DEFINE_CCW_MACHINE(2_6, "2.6", false);
 
@@ -893,7 +904,7 @@ static void ccw_machine_2_5_instance_options(MachineState *machine)
 static void ccw_machine_2_5_class_options(MachineClass *mc)
 {
     ccw_machine_2_6_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_5);
+    SET_MACHINE_COMPAT(mc, ccw_compat_2_5);
 }
 DEFINE_CCW_MACHINE(2_5, "2.5", false);
 
@@ -905,7 +916,7 @@ static void ccw_machine_2_4_instance_options(MachineState *machine)
 static void ccw_machine_2_4_class_options(MachineClass *mc)
 {
     ccw_machine_2_5_class_options(mc);
-    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_4);
+    SET_MACHINE_COMPAT(mc, ccw_compat_2_4);
 }
 DEFINE_CCW_MACHINE(2_4, "2.4", false);
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 03/28] hw: apply machine compat properties without touching globals
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 01/28] hw: apply accel compat properties without touching globals Marc-André Lureau
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 02/28] machines: replace COMPAT define with a static array Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:38   ` Cornelia Huck
  2018-12-21 14:20   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 04/28] machine: move compat properties out of globals Marc-André Lureau
                   ` (25 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Similarly to accel properties, move compat properties out of globals
registration, and apply the machine compat properties during
device_post_init().

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +-
 hw/arm/virt.c              | 27 ++++++++----
 hw/core/machine.c          | 19 +--------
 hw/core/qdev.c             |  2 +
 hw/i386/pc_piix.c          | 87 +++++++++++++++++++++++++-------------
 hw/i386/pc_q35.c           | 33 ++++++++++-----
 hw/ppc/spapr.c             | 42 ++++++++++++------
 hw/s390x/s390-virtio-ccw.c | 33 ++++++++++-----
 vl.c                       |  1 -
 9 files changed, 152 insertions(+), 95 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 92aa43a40e..f02d5a1bbd 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -69,7 +69,6 @@ int machine_kvm_shadow_mem(MachineState *machine);
 int machine_phandle_start(MachineState *machine);
 bool machine_dump_guest_core(MachineState *machine);
 bool machine_mem_merge(MachineState *machine);
-void machine_register_compat_props(MachineState *machine);
 HotpluggableCPUList *machine_query_hotpluggable_cpus(MachineState *machine);
 void machine_set_cpu_numa_node(MachineState *machine,
                                const CpuInstanceProperties *props,
@@ -191,7 +190,7 @@ struct MachineClass {
     const char *default_machine_opts;
     const char *default_boot_order;
     const char *default_display;
-    GArray *compat_props;
+    GPtrArray *compat_props;
     const char *hw_version;
     ram_addr_t default_ram_size;
     const char *default_cpu_type;
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index f3155efa07..d47eb6ea49 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1879,7 +1879,8 @@ static GlobalProperty virt_compat_3_1[] = {
 static void virt_machine_3_1_options(MachineClass *mc)
 {
     virt_machine_4_0_options(mc);
-    SET_MACHINE_COMPAT(mc, virt_compat_3_1);
+    compat_props_add(mc->compat_props,
+                     virt_compat_3_1, G_N_ELEMENTS(virt_compat_3_1));
 }
 DEFINE_VIRT_MACHINE(3, 1)
 
@@ -1890,7 +1891,8 @@ static GlobalProperty virt_compat_3_0[] = {
 static void virt_machine_3_0_options(MachineClass *mc)
 {
     virt_machine_3_1_options(mc);
-    SET_MACHINE_COMPAT(mc, virt_compat_3_0);
+    compat_props_add(mc->compat_props,
+                     virt_compat_3_0, G_N_ELEMENTS(virt_compat_3_0));
 }
 DEFINE_VIRT_MACHINE(3, 0)
 
@@ -1903,7 +1905,8 @@ static void virt_machine_2_12_options(MachineClass *mc)
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_3_0_options(mc);
-    SET_MACHINE_COMPAT(mc, virt_compat_2_12);
+    compat_props_add(mc->compat_props,
+                     virt_compat_2_12, G_N_ELEMENTS(virt_compat_2_12));
     vmc->no_highmem_ecam = true;
     mc->max_cpus = 255;
 }
@@ -1918,7 +1921,8 @@ static void virt_machine_2_11_options(MachineClass *mc)
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_2_12_options(mc);
-    SET_MACHINE_COMPAT(mc, virt_compat_2_11);
+    compat_props_add(mc->compat_props,
+                     virt_compat_2_11, G_N_ELEMENTS(virt_compat_2_11));
     vmc->smbios_old_sys_ver = true;
 }
 DEFINE_VIRT_MACHINE(2, 11)
@@ -1930,7 +1934,8 @@ static GlobalProperty virt_compat_2_10[] = {
 static void virt_machine_2_10_options(MachineClass *mc)
 {
     virt_machine_2_11_options(mc);
-    SET_MACHINE_COMPAT(mc, virt_compat_2_10);
+    compat_props_add(mc->compat_props,
+                     virt_compat_2_10, G_N_ELEMENTS(virt_compat_2_10));
     /* before 2.11 we never faulted accesses to bad addresses */
     mc->ignore_memory_transaction_failures = true;
 }
@@ -1943,7 +1948,8 @@ static GlobalProperty virt_compat_2_9[] = {
 static void virt_machine_2_9_options(MachineClass *mc)
 {
     virt_machine_2_10_options(mc);
-    SET_MACHINE_COMPAT(mc, virt_compat_2_9);
+    compat_props_add(mc->compat_props,
+                     virt_compat_2_9, G_N_ELEMENTS(virt_compat_2_9));
 }
 DEFINE_VIRT_MACHINE(2, 9)
 
@@ -1956,7 +1962,8 @@ static void virt_machine_2_8_options(MachineClass *mc)
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_2_9_options(mc);
-    SET_MACHINE_COMPAT(mc, virt_compat_2_8);
+    compat_props_add(mc->compat_props,
+                     virt_compat_2_8, G_N_ELEMENTS(virt_compat_2_8));
     /* For 2.8 and earlier we falsely claimed in the DT that
      * our timers were edge-triggered, not level-triggered.
      */
@@ -1973,7 +1980,8 @@ static void virt_machine_2_7_options(MachineClass *mc)
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_2_8_options(mc);
-    SET_MACHINE_COMPAT(mc, virt_compat_2_7);
+    compat_props_add(mc->compat_props,
+                     virt_compat_2_7, G_N_ELEMENTS(virt_compat_2_7));
     /* ITS was introduced with 2.8 */
     vmc->no_its = true;
     /* Stick with 1K pages for migration compatibility */
@@ -1990,7 +1998,8 @@ static void virt_machine_2_6_options(MachineClass *mc)
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
 
     virt_machine_2_7_options(mc);
-    SET_MACHINE_COMPAT(mc, virt_compat_2_6);
+    compat_props_add(mc->compat_props,
+                     virt_compat_2_6, G_N_ELEMENTS(virt_compat_2_6));
     vmc->disallow_affinity_adjustment = true;
     /* Disable PMU for 2.6 as PMU support was first introduced in 2.7 */
     vmc->no_pmu = true;
diff --git a/hw/core/machine.c b/hw/core/machine.c
index c51423b647..6e24924aba 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -647,6 +647,7 @@ static void machine_class_base_init(ObjectClass *oc, void *data)
         assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX));
         mc->name = g_strndup(cname,
                             strlen(cname) - strlen(TYPE_MACHINE_SUFFIX));
+        mc->compat_props = g_ptr_array_new();
     }
 }
 
@@ -834,24 +835,6 @@ void machine_run_board_init(MachineState *machine)
     machine_class->init(machine);
 }
 
-void machine_register_compat_props(MachineState *machine)
-{
-    MachineClass *mc = MACHINE_GET_CLASS(machine);
-    int i;
-    GlobalProperty *p;
-
-    if (!mc->compat_props) {
-        return;
-    }
-
-    for (i = 0; i < mc->compat_props->len; i++) {
-        p = g_array_index(mc->compat_props, GlobalProperty *, i);
-        /* Machine compat_props must never cause errors: */
-        p->errp = &error_abort;
-        qdev_prop_register_global(p);
-    }
-}
-
 static const TypeInfo machine_info = {
     .name = TYPE_MACHINE,
     .parent = TYPE_OBJECT,
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 53b507164f..d510340bac 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -974,11 +974,13 @@ static void device_post_init(Object *obj)
 {
     if (object_dynamic_cast(qdev_get_machine(), TYPE_MACHINE)) {
         MachineState *m = MACHINE(qdev_get_machine());
+        MachineClass *mc = MACHINE_GET_CLASS(m);
         AccelClass *ac = ACCEL_GET_CLASS(m->accelerator);
 
         if (ac->compat_props) {
             object_apply_global_props(obj, ac->compat_props, &error_abort);
         }
+        object_apply_global_props(obj, mc->compat_props, &error_abort);
     }
 
     qdev_prop_set_globals(DEVICE(obj));
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 8ade7318e0..9baca6d6ee 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -447,7 +447,8 @@ static void pc_i440fx_3_1_machine_options(MachineClass *m)
     pc_i440fx_4_0_machine_options(m);
     m->is_default = 0;
     m->alias = NULL;
-    SET_MACHINE_COMPAT(m, pc_compat_3_1);
+    compat_props_add(m->compat_props,
+                     pc_compat_3_1, G_N_ELEMENTS(pc_compat_3_1));
 }
 
 DEFINE_I440FX_MACHINE(v3_1, "pc-i440fx-3.1", NULL,
@@ -460,7 +461,8 @@ static GlobalProperty pc_compat_3_0[] = {
 static void pc_i440fx_3_0_machine_options(MachineClass *m)
 {
     pc_i440fx_3_1_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_3_0);
+    compat_props_add(m->compat_props,
+                     pc_compat_3_0, G_N_ELEMENTS(pc_compat_3_0));
 }
 
 DEFINE_I440FX_MACHINE(v3_0, "pc-i440fx-3.0", NULL,
@@ -473,7 +475,8 @@ static GlobalProperty pc_compat_2_12[] = {
 static void pc_i440fx_2_12_machine_options(MachineClass *m)
 {
     pc_i440fx_3_0_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_12);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_12, G_N_ELEMENTS(pc_compat_2_12));
 }
 
 DEFINE_I440FX_MACHINE(v2_12, "pc-i440fx-2.12", NULL,
@@ -486,7 +489,8 @@ static GlobalProperty pc_compat_2_11[] = {
 static void pc_i440fx_2_11_machine_options(MachineClass *m)
 {
     pc_i440fx_2_12_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_11);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_11, G_N_ELEMENTS(pc_compat_2_11));
 }
 
 DEFINE_I440FX_MACHINE(v2_11, "pc-i440fx-2.11", NULL,
@@ -499,7 +503,8 @@ static GlobalProperty pc_compat_2_10[] = {
 static void pc_i440fx_2_10_machine_options(MachineClass *m)
 {
     pc_i440fx_2_11_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_10);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_10, G_N_ELEMENTS(pc_compat_2_10));
     m->auto_enable_numa_with_memhp = false;
 }
 
@@ -513,7 +518,8 @@ static GlobalProperty pc_compat_2_9[] = {
 static void pc_i440fx_2_9_machine_options(MachineClass *m)
 {
     pc_i440fx_2_10_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_9);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_9, G_N_ELEMENTS(pc_compat_2_9));
     m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
 }
 
@@ -527,7 +533,8 @@ static GlobalProperty pc_compat_2_8[] = {
 static void pc_i440fx_2_8_machine_options(MachineClass *m)
 {
     pc_i440fx_2_9_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_8);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_8, G_N_ELEMENTS(pc_compat_2_8));
 }
 
 DEFINE_I440FX_MACHINE(v2_8, "pc-i440fx-2.8", NULL,
@@ -540,7 +547,8 @@ static GlobalProperty pc_compat_2_7[] = {
 static void pc_i440fx_2_7_machine_options(MachineClass *m)
 {
     pc_i440fx_2_8_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_7);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_7, G_N_ELEMENTS(pc_compat_2_7));
 }
 
 DEFINE_I440FX_MACHINE(v2_7, "pc-i440fx-2.7", NULL,
@@ -556,7 +564,8 @@ static void pc_i440fx_2_6_machine_options(MachineClass *m)
     pc_i440fx_2_7_machine_options(m);
     pcmc->legacy_cpu_hotplug = true;
     pcmc->linuxboot_dma_enabled = false;
-    SET_MACHINE_COMPAT(m, pc_compat_2_6);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_6, G_N_ELEMENTS(pc_compat_2_6));
 }
 
 DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6", NULL,
@@ -572,7 +581,8 @@ static void pc_i440fx_2_5_machine_options(MachineClass *m)
     pc_i440fx_2_6_machine_options(m);
     pcmc->save_tsc_khz = false;
     m->legacy_fw_cfg_order = 1;
-    SET_MACHINE_COMPAT(m, pc_compat_2_5);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_5, G_N_ELEMENTS(pc_compat_2_5));
 }
 
 DEFINE_I440FX_MACHINE(v2_5, "pc-i440fx-2.5", NULL,
@@ -588,7 +598,8 @@ static void pc_i440fx_2_4_machine_options(MachineClass *m)
     pc_i440fx_2_5_machine_options(m);
     m->hw_version = "2.4.0";
     pcmc->broken_reserved_end = true;
-    SET_MACHINE_COMPAT(m, pc_compat_2_4);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_4, G_N_ELEMENTS(pc_compat_2_4));
 }
 
 DEFINE_I440FX_MACHINE(v2_4, "pc-i440fx-2.4", NULL,
@@ -602,7 +613,8 @@ static void pc_i440fx_2_3_machine_options(MachineClass *m)
 {
     pc_i440fx_2_4_machine_options(m);
     m->hw_version = "2.3.0";
-    SET_MACHINE_COMPAT(m, pc_compatp_2_3);
+    compat_props_add(m->compat_props,
+                     pc_compatp_2_3, G_N_ELEMENTS(pc_compatp_2_3));
 }
 
 DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3,
@@ -618,7 +630,8 @@ static void pc_i440fx_2_2_machine_options(MachineClass *m)
     pc_i440fx_2_3_machine_options(m);
     m->hw_version = "2.2.0";
     m->default_machine_opts = "firmware=bios-256k.bin,suppress-vmdesc=on";
-    SET_MACHINE_COMPAT(m, pc_compatp_2_2);
+    compat_props_add(m->compat_props,
+                     pc_compatp_2_2, G_N_ELEMENTS(pc_compatp_2_2));
     pcmc->rsdp_in_ram = false;
 }
 
@@ -635,7 +648,8 @@ static void pc_i440fx_2_1_machine_options(MachineClass *m)
     pc_i440fx_2_2_machine_options(m);
     m->hw_version = "2.1.0";
     m->default_display = NULL;
-    SET_MACHINE_COMPAT(m, pc_compatp_2_1);
+    compat_props_add(m->compat_props,
+                     pc_compatp_2_1, G_N_ELEMENTS(pc_compatp_2_1));
     pcmc->smbios_uuid_encoded = false;
     pcmc->enforce_aligned_dimm = false;
 }
@@ -652,7 +666,8 @@ static void pc_i440fx_2_0_machine_options(MachineClass *m)
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
     pc_i440fx_2_1_machine_options(m);
     m->hw_version = "2.0.0";
-    SET_MACHINE_COMPAT(m, pc_compatp_2_0);
+    compat_props_add(m->compat_props,
+                     pc_compatp_2_0, G_N_ELEMENTS(pc_compatp_2_0));
     pcmc->smbios_legacy_mode = true;
     pcmc->has_reserved_memory = false;
     /* This value depends on the actual DSDT and SSDT compiled into
@@ -689,7 +704,8 @@ static void pc_i440fx_1_7_machine_options(MachineClass *m)
     m->hw_version = "1.7.0";
     m->default_machine_opts = NULL;
     m->option_rom_has_mr = true;
-    SET_MACHINE_COMPAT(m, pc_compatp_1_7);
+    compat_props_add(m->compat_props,
+                     pc_compatp_1_7, G_N_ELEMENTS(pc_compatp_1_7));
     pcmc->smbios_defaults = false;
     pcmc->gigabyte_align = false;
     pcmc->legacy_acpi_table_size = 6414;
@@ -708,7 +724,8 @@ static void pc_i440fx_1_6_machine_options(MachineClass *m)
     pc_i440fx_1_7_machine_options(m);
     m->hw_version = "1.6.0";
     m->rom_file_has_mr = false;
-    SET_MACHINE_COMPAT(m, pc_compatp_1_6);
+    compat_props_add(m->compat_props,
+                     pc_compatp_1_6, G_N_ELEMENTS(pc_compatp_1_6));
     pcmc->has_acpi_build = false;
 }
 
@@ -723,7 +740,8 @@ static void pc_i440fx_1_5_machine_options(MachineClass *m)
 {
     pc_i440fx_1_6_machine_options(m);
     m->hw_version = "1.5.0";
-    SET_MACHINE_COMPAT(m, pc_compatp_1_5);
+    compat_props_add(m->compat_props,
+                     pc_compatp_1_5, G_N_ELEMENTS(pc_compatp_1_5));
 }
 
 DEFINE_I440FX_MACHINE(v1_5, "pc-i440fx-1.5", pc_compat_1_5,
@@ -738,7 +756,8 @@ static void pc_i440fx_1_4_machine_options(MachineClass *m)
     pc_i440fx_1_5_machine_options(m);
     m->hw_version = "1.4.0";
     m->hot_add_cpu = NULL;
-    SET_MACHINE_COMPAT(m, pc_compatp_1_4);
+    compat_props_add(m->compat_props,
+                     pc_compatp_1_4, G_N_ELEMENTS(pc_compatp_1_4));
 }
 
 DEFINE_I440FX_MACHINE(v1_4, "pc-i440fx-1.4", pc_compat_1_4,
@@ -769,7 +788,8 @@ static void pc_i440fx_1_3_machine_options(MachineClass *m)
 {
     pc_i440fx_1_4_machine_options(m);
     m->hw_version = "1.3.0";
-    SET_MACHINE_COMPAT(m, pc_compatp_1_3);
+    compat_props_add(m->compat_props,
+                     pc_compatp_1_3, G_N_ELEMENTS(pc_compatp_1_3));
 }
 
 DEFINE_I440FX_MACHINE(v1_3, "pc-1.3", pc_compat_1_3,
@@ -809,7 +829,8 @@ static void pc_i440fx_1_2_machine_options(MachineClass *m)
 {
     pc_i440fx_1_3_machine_options(m);
     m->hw_version = "1.2.0";
-    SET_MACHINE_COMPAT(m, pc_compatp_1_2);
+    compat_props_add(m->compat_props,
+                     pc_compatp_1_2, G_N_ELEMENTS(pc_compatp_1_2));
 }
 
 DEFINE_I440FX_MACHINE(v1_2, "pc-1.2", pc_compat_1_2,
@@ -853,7 +874,8 @@ static void pc_i440fx_1_1_machine_options(MachineClass *m)
 {
     pc_i440fx_1_2_machine_options(m);
     m->hw_version = "1.1.0";
-    SET_MACHINE_COMPAT(m, pc_compatp_1_1);
+    compat_props_add(m->compat_props,
+                     pc_compatp_1_1, G_N_ELEMENTS(pc_compatp_1_1));
 }
 
 DEFINE_I440FX_MACHINE(v1_1, "pc-1.1", pc_compat_1_2,
@@ -884,7 +906,8 @@ static void pc_i440fx_1_0_machine_options(MachineClass *m)
 {
     pc_i440fx_1_1_machine_options(m);
     m->hw_version = "1.0";
-    SET_MACHINE_COMPAT(m, pc_compatp_1_0);
+    compat_props_add(m->compat_props,
+                     pc_compatp_1_0, G_N_ELEMENTS(pc_compatp_1_0));
 }
 
 DEFINE_I440FX_MACHINE(v1_0, "pc-1.0", pc_compat_1_2,
@@ -899,7 +922,8 @@ static void pc_i440fx_0_15_machine_options(MachineClass *m)
 {
     pc_i440fx_1_0_machine_options(m);
     m->hw_version = "0.15";
-    SET_MACHINE_COMPAT(m, pc_compatp_0_15);
+    compat_props_add(m->compat_props,
+                     pc_compatp_0_15, G_N_ELEMENTS(pc_compatp_0_15));
 }
 
 DEFINE_I440FX_MACHINE(v0_15, "pc-0.15", pc_compat_1_2,
@@ -939,7 +963,8 @@ static void pc_i440fx_0_14_machine_options(MachineClass *m)
 {
     pc_i440fx_0_15_machine_options(m);
     m->hw_version = "0.14";
-    SET_MACHINE_COMPAT(m, pc_compatp_0_14);
+    compat_props_add(m->compat_props,
+                     pc_compatp_0_14, G_N_ELEMENTS(pc_compatp_0_14));
 }
 
 DEFINE_I440FX_MACHINE(v0_14, "pc-0.14", pc_compat_1_2,
@@ -975,7 +1000,8 @@ static void pc_i440fx_0_13_machine_options(MachineClass *m)
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
     pc_i440fx_0_14_machine_options(m);
     m->hw_version = "0.13";
-    SET_MACHINE_COMPAT(m, pc_compatp_0_13);
+    compat_props_add(m->compat_props,
+                     pc_compatp_0_13, G_N_ELEMENTS(pc_compatp_0_13));
     pcmc->kvmclock_enabled = false;
 }
 
@@ -1011,7 +1037,8 @@ static void pc_i440fx_0_12_machine_options(MachineClass *m)
 {
     pc_i440fx_0_13_machine_options(m);
     m->hw_version = "0.12";
-    SET_MACHINE_COMPAT(m, pc_compat_0_12);
+    compat_props_add(m->compat_props,
+                     pc_compat_0_12, G_N_ELEMENTS(pc_compat_0_12));
 }
 
 DEFINE_I440FX_MACHINE(v0_12, "pc-0.12", pc_compat_0_13,
@@ -1044,7 +1071,8 @@ static void pc_i440fx_0_11_machine_options(MachineClass *m)
     pc_i440fx_0_12_machine_options(m);
     m->hw_version = "0.11";
     m->deprecation_reason = "use a newer machine type instead";
-    SET_MACHINE_COMPAT(m, pc_compat_0_11);
+    compat_props_add(m->compat_props,
+                     pc_compat_0_11, G_N_ELEMENTS(pc_compat_0_11));
 }
 
 DEFINE_I440FX_MACHINE(v0_11, "pc-0.11", pc_compat_0_13,
@@ -1079,7 +1107,8 @@ static void pc_i440fx_0_10_machine_options(MachineClass *m)
 {
     pc_i440fx_0_11_machine_options(m);
     m->hw_version = "0.10";
-    SET_MACHINE_COMPAT(m, pc_compat_0_10);
+    compat_props_add(m->compat_props,
+                     pc_compat_0_10, G_N_ELEMENTS(pc_compat_0_10));
 }
 
 DEFINE_I440FX_MACHINE(v0_10, "pc-0.10", pc_compat_0_13,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 0c02a72e00..72795812e5 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -328,7 +328,8 @@ static void pc_q35_3_1_machine_options(MachineClass *m)
 {
     pc_q35_4_0_machine_options(m);
     m->alias = NULL;
-    SET_MACHINE_COMPAT(m, pc_compat_3_1);
+    compat_props_add(m->compat_props,
+                     pc_compat_3_1, G_N_ELEMENTS(pc_compat_3_1));
 }
 
 DEFINE_Q35_MACHINE(v3_1, "pc-q35-3.1", NULL,
@@ -341,7 +342,8 @@ static GlobalProperty pc_compat_3_0[] = {
 static void pc_q35_3_0_machine_options(MachineClass *m)
 {
     pc_q35_3_1_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_3_0);
+    compat_props_add(m->compat_props,
+                     pc_compat_3_0, G_N_ELEMENTS(pc_compat_3_0));
 }
 
 DEFINE_Q35_MACHINE(v3_0, "pc-q35-3.0", NULL,
@@ -354,7 +356,8 @@ static GlobalProperty pc_compat_2_12[] = {
 static void pc_q35_2_12_machine_options(MachineClass *m)
 {
     pc_q35_3_0_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_12);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_12, G_N_ELEMENTS(pc_compat_2_12));
 }
 
 DEFINE_Q35_MACHINE(v2_12, "pc-q35-2.12", NULL,
@@ -370,7 +373,8 @@ static void pc_q35_2_11_machine_options(MachineClass *m)
 
     pc_q35_2_12_machine_options(m);
     pcmc->default_nic_model = "e1000";
-    SET_MACHINE_COMPAT(m, pc_compat_2_11);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_11, G_N_ELEMENTS(pc_compat_2_11));
 }
 
 DEFINE_Q35_MACHINE(v2_11, "pc-q35-2.11", NULL,
@@ -383,7 +387,8 @@ static GlobalProperty pc_compat_2_10[] = {
 static void pc_q35_2_10_machine_options(MachineClass *m)
 {
     pc_q35_2_11_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_10);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_10, G_N_ELEMENTS(pc_compat_2_10));
     m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
     m->auto_enable_numa_with_memhp = false;
 }
@@ -398,7 +403,8 @@ static GlobalProperty pc_compat_2_9[] = {
 static void pc_q35_2_9_machine_options(MachineClass *m)
 {
     pc_q35_2_10_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_9);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_9, G_N_ELEMENTS(pc_compat_2_9));
 }
 
 DEFINE_Q35_MACHINE(v2_9, "pc-q35-2.9", NULL,
@@ -411,7 +417,8 @@ static GlobalProperty pc_compat_2_8[] = {
 static void pc_q35_2_8_machine_options(MachineClass *m)
 {
     pc_q35_2_9_machine_options(m);
-    SET_MACHINE_COMPAT(m, pc_compat_2_8);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_8, G_N_ELEMENTS(pc_compat_2_8));
 }
 
 DEFINE_Q35_MACHINE(v2_8, "pc-q35-2.8", NULL,
@@ -425,7 +432,8 @@ static void pc_q35_2_7_machine_options(MachineClass *m)
 {
     pc_q35_2_8_machine_options(m);
     m->max_cpus = 255;
-    SET_MACHINE_COMPAT(m, pc_compat_2_7);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_7, G_N_ELEMENTS(pc_compat_2_7));
 }
 
 DEFINE_Q35_MACHINE(v2_7, "pc-q35-2.7", NULL,
@@ -441,7 +449,8 @@ static void pc_q35_2_6_machine_options(MachineClass *m)
     pc_q35_2_7_machine_options(m);
     pcmc->legacy_cpu_hotplug = true;
     pcmc->linuxboot_dma_enabled = false;
-    SET_MACHINE_COMPAT(m, pc_compat_2_6);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_6, G_N_ELEMENTS(pc_compat_2_6));
 }
 
 DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
@@ -457,7 +466,8 @@ static void pc_q35_2_5_machine_options(MachineClass *m)
     pc_q35_2_6_machine_options(m);
     pcmc->save_tsc_khz = false;
     m->legacy_fw_cfg_order = 1;
-    SET_MACHINE_COMPAT(m, pc_compat_2_5);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_5, G_N_ELEMENTS(pc_compat_2_5));
 }
 
 DEFINE_Q35_MACHINE(v2_5, "pc-q35-2.5", NULL,
@@ -473,7 +483,8 @@ static void pc_q35_2_4_machine_options(MachineClass *m)
     pc_q35_2_5_machine_options(m);
     m->hw_version = "2.4.0";
     pcmc->broken_reserved_end = true;
-    SET_MACHINE_COMPAT(m, pc_compat_2_4);
+    compat_props_add(m->compat_props,
+                     pc_compat_2_4, G_N_ELEMENTS(pc_compat_2_4));
 }
 
 DEFINE_Q35_MACHINE(v2_4, "pc-q35-2.4", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 6145a9909d..a6ed88ba95 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3970,7 +3970,8 @@ static GlobalProperty spapr_compat_3_1[] = {
 static void spapr_machine_3_1_class_options(MachineClass *mc)
 {
     spapr_machine_4_0_class_options(mc);
-    SET_MACHINE_COMPAT(mc, spapr_compat_3_1);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_3_1, G_N_ELEMENTS(spapr_compat_3_1));
 }
 
 DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
@@ -3987,7 +3988,8 @@ static void spapr_machine_3_0_class_options(MachineClass *mc)
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
 
     spapr_machine_3_1_class_options(mc);
-    SET_MACHINE_COMPAT(mc, spapr_compat_3_0);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_3_0, G_N_ELEMENTS(spapr_compat_3_0));
 
     smc->legacy_irq_allocation = true;
     smc->irq = &spapr_irq_xics_legacy;
@@ -4017,7 +4019,8 @@ static void spapr_machine_2_12_class_options(MachineClass *mc)
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
 
     spapr_machine_3_0_class_options(mc);
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_12);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_12, G_N_ELEMENTS(spapr_compat_2_12));
 
     /* We depend on kvm_enabled() to choose a default value for the
      * hpt-max-page-size capability. Of course we can't do it here
@@ -4054,7 +4057,8 @@ static void spapr_machine_2_11_class_options(MachineClass *mc)
 
     spapr_machine_2_12_class_options(mc);
     smc->default_caps.caps[SPAPR_CAP_HTM] = SPAPR_CAP_ON;
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_11);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_11, G_N_ELEMENTS(spapr_compat_2_11));
 }
 
 DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
@@ -4069,7 +4073,8 @@ static GlobalProperty spapr_compat_2_10[] = {
 static void spapr_machine_2_10_class_options(MachineClass *mc)
 {
     spapr_machine_2_11_class_options(mc);
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_10);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_10, G_N_ELEMENTS(spapr_compat_2_10));
 }
 
 DEFINE_SPAPR_MACHINE(2_10, "2.10", false);
@@ -4091,7 +4096,8 @@ static void spapr_machine_2_9_class_options(MachineClass *mc)
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
 
     spapr_machine_2_10_class_options(mc);
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_9);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_9, G_N_ELEMENTS(spapr_compat_2_9));
     mc->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
     smc->pre_2_10_has_unused_icps = true;
     smc->resize_hpt_default = SPAPR_RESIZE_HPT_DISABLED;
@@ -4114,7 +4120,8 @@ static GlobalProperty spapr_compat_2_8[] = {
 static void spapr_machine_2_8_class_options(MachineClass *mc)
 {
     spapr_machine_2_9_class_options(mc);
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_8);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_8, G_N_ELEMENTS(spapr_compat_2_8));
     mc->numa_mem_align_shift = 23;
 }
 
@@ -4203,7 +4210,8 @@ static void spapr_machine_2_7_class_options(MachineClass *mc)
     spapr_machine_2_8_class_options(mc);
     mc->default_cpu_type = POWERPC_CPU_TYPE_NAME("power7_v2.3");
     mc->default_machine_opts = "modern-hotplug-events=off";
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_7);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_7, G_N_ELEMENTS(spapr_compat_2_7));
     smc->phb_placement = phb_placement_2_7;
 }
 
@@ -4225,7 +4233,8 @@ static void spapr_machine_2_6_class_options(MachineClass *mc)
 {
     spapr_machine_2_7_class_options(mc);
     mc->has_hotpluggable_cpus = false;
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_6);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_6, G_N_ELEMENTS(spapr_compat_2_6));
 }
 
 DEFINE_SPAPR_MACHINE(2_6, "2.6", false);
@@ -4248,7 +4257,8 @@ static void spapr_machine_2_5_class_options(MachineClass *mc)
 
     spapr_machine_2_6_class_options(mc);
     smc->use_ohci_by_default = true;
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_5);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_5, G_N_ELEMENTS(spapr_compat_2_5));
 }
 
 DEFINE_SPAPR_MACHINE(2_5, "2.5", false);
@@ -4266,7 +4276,8 @@ static void spapr_machine_2_4_class_options(MachineClass *mc)
 
     spapr_machine_2_5_class_options(mc);
     smc->dr_lmb_enabled = false;
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_4);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_4, G_N_ELEMENTS(spapr_compat_2_4));
 }
 
 DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
@@ -4286,7 +4297,8 @@ static GlobalProperty spapr_compat_2_3[] = {
 static void spapr_machine_2_3_class_options(MachineClass *mc)
 {
     spapr_machine_2_4_class_options(mc);
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_3);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_3, G_N_ELEMENTS(spapr_compat_2_3));
 }
 DEFINE_SPAPR_MACHINE(2_3, "2.3", false);
 
@@ -4305,7 +4317,8 @@ static GlobalProperty spapr_compat_2_2[] = {
 static void spapr_machine_2_2_class_options(MachineClass *mc)
 {
     spapr_machine_2_3_class_options(mc);
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_2);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_2, G_N_ELEMENTS(spapr_compat_2_2));
     mc->default_machine_opts = "modern-hotplug-events=off,suppress-vmdesc=on";
 }
 DEFINE_SPAPR_MACHINE(2_2, "2.2", false);
@@ -4320,7 +4333,8 @@ static GlobalProperty spapr_compat_2_1[] = {
 static void spapr_machine_2_1_class_options(MachineClass *mc)
 {
     spapr_machine_2_2_class_options(mc);
-    SET_MACHINE_COMPAT(mc, spapr_compat_2_1);
+    compat_props_add(mc->compat_props,
+                     spapr_compat_2_1, G_N_ELEMENTS(spapr_compat_2_1));
 }
 DEFINE_SPAPR_MACHINE(2_1, "2.1", false);
 
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 882a9796cf..f2faea585e 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -773,7 +773,8 @@ static void ccw_machine_3_1_instance_options(MachineState *machine)
 static void ccw_machine_3_1_class_options(MachineClass *mc)
 {
     ccw_machine_4_0_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_3_1);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_3_1, G_N_ELEMENTS(ccw_compat_3_1));
 }
 DEFINE_CCW_MACHINE(3_1, "3.1", false);
 
@@ -788,7 +789,8 @@ static void ccw_machine_3_0_class_options(MachineClass *mc)
 
     s390mc->hpage_1m_allowed = false;
     ccw_machine_3_1_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_3_0);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_3_0, G_N_ELEMENTS(ccw_compat_3_0));
 }
 DEFINE_CCW_MACHINE(3_0, "3.0", false);
 
@@ -802,7 +804,8 @@ static void ccw_machine_2_12_instance_options(MachineState *machine)
 static void ccw_machine_2_12_class_options(MachineClass *mc)
 {
     ccw_machine_3_0_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_2_12);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_2_12, G_N_ELEMENTS(ccw_compat_2_12));
 }
 DEFINE_CCW_MACHINE(2_12, "2.12", false);
 
@@ -818,7 +821,8 @@ static void ccw_machine_2_11_instance_options(MachineState *machine)
 static void ccw_machine_2_11_class_options(MachineClass *mc)
 {
     ccw_machine_2_12_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_2_11);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_2_11, G_N_ELEMENTS(ccw_compat_2_11));
 }
 DEFINE_CCW_MACHINE(2_11, "2.11", false);
 
@@ -830,7 +834,8 @@ static void ccw_machine_2_10_instance_options(MachineState *machine)
 static void ccw_machine_2_10_class_options(MachineClass *mc)
 {
     ccw_machine_2_11_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_2_10);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_2_10, G_N_ELEMENTS(ccw_compat_2_10));
 }
 DEFINE_CCW_MACHINE(2_10, "2.10", false);
 
@@ -849,7 +854,8 @@ static void ccw_machine_2_9_class_options(MachineClass *mc)
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
 
     ccw_machine_2_10_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_2_9);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_2_9, G_N_ELEMENTS(ccw_compat_2_9));
     s390mc->css_migration_enabled = false;
 }
 DEFINE_CCW_MACHINE(2_9, "2.9", false);
@@ -862,7 +868,8 @@ static void ccw_machine_2_8_instance_options(MachineState *machine)
 static void ccw_machine_2_8_class_options(MachineClass *mc)
 {
     ccw_machine_2_9_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_2_8);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_2_8, G_N_ELEMENTS(ccw_compat_2_8));
 }
 DEFINE_CCW_MACHINE(2_8, "2.8", false);
 
@@ -877,7 +884,8 @@ static void ccw_machine_2_7_class_options(MachineClass *mc)
 
     s390mc->cpu_model_allowed = false;
     ccw_machine_2_8_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_2_7);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_2_7, G_N_ELEMENTS(ccw_compat_2_7));
 }
 DEFINE_CCW_MACHINE(2_7, "2.7", false);
 
@@ -892,7 +900,8 @@ static void ccw_machine_2_6_class_options(MachineClass *mc)
 
     s390mc->ri_allowed = false;
     ccw_machine_2_7_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_2_6);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_2_6, G_N_ELEMENTS(ccw_compat_2_6));
 }
 DEFINE_CCW_MACHINE(2_6, "2.6", false);
 
@@ -904,7 +913,8 @@ static void ccw_machine_2_5_instance_options(MachineState *machine)
 static void ccw_machine_2_5_class_options(MachineClass *mc)
 {
     ccw_machine_2_6_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_2_5);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_2_5, G_N_ELEMENTS(ccw_compat_2_5));
 }
 DEFINE_CCW_MACHINE(2_5, "2.5", false);
 
@@ -916,7 +926,8 @@ static void ccw_machine_2_4_instance_options(MachineState *machine)
 static void ccw_machine_2_4_class_options(MachineClass *mc)
 {
     ccw_machine_2_5_class_options(mc);
-    SET_MACHINE_COMPAT(mc, ccw_compat_2_4);
+    compat_props_add(mc->compat_props,
+                     ccw_compat_2_4, G_N_ELEMENTS(ccw_compat_2_4));
 }
 DEFINE_CCW_MACHINE(2_4, "2.4", false);
 
diff --git a/vl.c b/vl.c
index 7971470539..aa0386952e 100644
--- a/vl.c
+++ b/vl.c
@@ -2984,7 +2984,6 @@ static void user_register_global_props(void)
  */
 static void register_global_properties(MachineState *ms)
 {
-    machine_register_compat_props(ms);
     user_register_global_props();
 }
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 04/28] machine: move compat properties out of globals
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (2 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 03/28] hw: apply machine compat properties without touching globals Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:44   ` Cornelia Huck
  2018-12-21 14:21   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 05/28] hw: remove SET_MACHINE_COMPAT Marc-André Lureau
                   ` (24 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Move the compat arrays inside functions that use them.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 hw/arm/virt.c              |  94 +++--
 hw/i386/pc_piix.c          | 705 ++++++++++++++++++-------------------
 hw/i386/pc_q35.c           | 121 +++----
 hw/ppc/spapr.c             | 254 +++++++------
 hw/s390x/s390-virtio-ccw.c | 239 ++++++-------
 hw/xen/xen-common.c        |  38 +-
 6 files changed, 685 insertions(+), 766 deletions(-)

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index d47eb6ea49..caa61c6201 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1872,98 +1872,88 @@ static void virt_machine_4_0_options(MachineClass *mc)
 }
 DEFINE_VIRT_MACHINE_AS_LATEST(4, 0)
 
-static GlobalProperty virt_compat_3_1[] = {
-    HW_COMPAT_3_1
-};
-
 static void virt_machine_3_1_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_3_1
+    };
+
     virt_machine_4_0_options(mc);
-    compat_props_add(mc->compat_props,
-                     virt_compat_3_1, G_N_ELEMENTS(virt_compat_3_1));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_VIRT_MACHINE(3, 1)
 
-static GlobalProperty virt_compat_3_0[] = {
-    HW_COMPAT_3_0
-};
-
 static void virt_machine_3_0_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_3_0
+    };
+
     virt_machine_3_1_options(mc);
-    compat_props_add(mc->compat_props,
-                     virt_compat_3_0, G_N_ELEMENTS(virt_compat_3_0));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_VIRT_MACHINE(3, 0)
 
-static GlobalProperty virt_compat_2_12[] = {
-    HW_COMPAT_2_12
-};
-
 static void virt_machine_2_12_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_12
+    };
 
     virt_machine_3_0_options(mc);
-    compat_props_add(mc->compat_props,
-                     virt_compat_2_12, G_N_ELEMENTS(virt_compat_2_12));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     vmc->no_highmem_ecam = true;
     mc->max_cpus = 255;
 }
 DEFINE_VIRT_MACHINE(2, 12)
 
-static GlobalProperty virt_compat_2_11[] = {
-    HW_COMPAT_2_11
-};
-
 static void virt_machine_2_11_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_11
+    };
 
     virt_machine_2_12_options(mc);
-    compat_props_add(mc->compat_props,
-                     virt_compat_2_11, G_N_ELEMENTS(virt_compat_2_11));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     vmc->smbios_old_sys_ver = true;
 }
 DEFINE_VIRT_MACHINE(2, 11)
 
-static GlobalProperty virt_compat_2_10[] = {
-    HW_COMPAT_2_10
-};
-
 static void virt_machine_2_10_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_10
+    };
+
     virt_machine_2_11_options(mc);
-    compat_props_add(mc->compat_props,
-                     virt_compat_2_10, G_N_ELEMENTS(virt_compat_2_10));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     /* before 2.11 we never faulted accesses to bad addresses */
     mc->ignore_memory_transaction_failures = true;
 }
 DEFINE_VIRT_MACHINE(2, 10)
 
-static GlobalProperty virt_compat_2_9[] = {
-    HW_COMPAT_2_9
-};
-
 static void virt_machine_2_9_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_9
+    };
+
     virt_machine_2_10_options(mc);
-    compat_props_add(mc->compat_props,
-                     virt_compat_2_9, G_N_ELEMENTS(virt_compat_2_9));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_VIRT_MACHINE(2, 9)
 
-static GlobalProperty virt_compat_2_8[] = {
-    HW_COMPAT_2_8
-};
-
 static void virt_machine_2_8_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_8
+    };
 
     virt_machine_2_9_options(mc);
-    compat_props_add(mc->compat_props,
-                     virt_compat_2_8, G_N_ELEMENTS(virt_compat_2_8));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     /* For 2.8 and earlier we falsely claimed in the DT that
      * our timers were edge-triggered, not level-triggered.
      */
@@ -1971,17 +1961,15 @@ static void virt_machine_2_8_options(MachineClass *mc)
 }
 DEFINE_VIRT_MACHINE(2, 8)
 
-static GlobalProperty virt_compat_2_7[] = {
-    HW_COMPAT_2_7
-};
-
 static void virt_machine_2_7_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_7
+    };
 
     virt_machine_2_8_options(mc);
-    compat_props_add(mc->compat_props,
-                     virt_compat_2_7, G_N_ELEMENTS(virt_compat_2_7));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     /* ITS was introduced with 2.8 */
     vmc->no_its = true;
     /* Stick with 1K pages for migration compatibility */
@@ -1989,17 +1977,15 @@ static void virt_machine_2_7_options(MachineClass *mc)
 }
 DEFINE_VIRT_MACHINE(2, 7)
 
-static GlobalProperty virt_compat_2_6[] = {
-    HW_COMPAT_2_6
-};
-
 static void virt_machine_2_6_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_6
+    };
 
     virt_machine_2_7_options(mc);
-    compat_props_add(mc->compat_props,
-                     virt_compat_2_6, G_N_ELEMENTS(virt_compat_2_6));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     vmc->disallow_affinity_adjustment = true;
     /* Disable PMU for 2.6 as PMU support was first introduced in 2.7 */
     vmc->no_pmu = true;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 9baca6d6ee..d1abe637f1 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -438,218 +438,204 @@ static void pc_i440fx_4_0_machine_options(MachineClass *m)
 DEFINE_I440FX_MACHINE(v4_0, "pc-i440fx-4.0", NULL,
                       pc_i440fx_4_0_machine_options);
 
-static GlobalProperty pc_compat_3_1[] = {
-    PC_COMPAT_3_1
-};
-
 static void pc_i440fx_3_1_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_3_1
+    };
+
     pc_i440fx_4_0_machine_options(m);
     m->is_default = 0;
     m->alias = NULL;
-    compat_props_add(m->compat_props,
-                     pc_compat_3_1, G_N_ELEMENTS(pc_compat_3_1));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v3_1, "pc-i440fx-3.1", NULL,
                       pc_i440fx_3_1_machine_options);
 
-static GlobalProperty pc_compat_3_0[] = {
-    PC_COMPAT_3_0
-};
-
 static void pc_i440fx_3_0_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_3_0
+    };
+
     pc_i440fx_3_1_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_3_0, G_N_ELEMENTS(pc_compat_3_0));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v3_0, "pc-i440fx-3.0", NULL,
                       pc_i440fx_3_0_machine_options);
 
-static GlobalProperty pc_compat_2_12[] = {
-    PC_COMPAT_2_12
-};
-
 static void pc_i440fx_2_12_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_12
+    };
+
     pc_i440fx_3_0_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_12, G_N_ELEMENTS(pc_compat_2_12));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v2_12, "pc-i440fx-2.12", NULL,
                       pc_i440fx_2_12_machine_options);
 
-static GlobalProperty pc_compat_2_11[] = {
-    PC_COMPAT_2_11
-};
-
 static void pc_i440fx_2_11_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_11
+    };
+
     pc_i440fx_2_12_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_11, G_N_ELEMENTS(pc_compat_2_11));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v2_11, "pc-i440fx-2.11", NULL,
                       pc_i440fx_2_11_machine_options);
 
-static GlobalProperty pc_compat_2_10[] = {
-    PC_COMPAT_2_10
-};
-
 static void pc_i440fx_2_10_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_10
+    };
+
     pc_i440fx_2_11_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_10, G_N_ELEMENTS(pc_compat_2_10));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
     m->auto_enable_numa_with_memhp = false;
 }
 
 DEFINE_I440FX_MACHINE(v2_10, "pc-i440fx-2.10", NULL,
                       pc_i440fx_2_10_machine_options);
 
-static GlobalProperty pc_compat_2_9[] = {
-    PC_COMPAT_2_9
-};
-
 static void pc_i440fx_2_9_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_9
+    };
+
     pc_i440fx_2_10_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_9, G_N_ELEMENTS(pc_compat_2_9));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
     m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
 }
 
 DEFINE_I440FX_MACHINE(v2_9, "pc-i440fx-2.9", NULL,
                       pc_i440fx_2_9_machine_options);
 
-static GlobalProperty pc_compat_2_8[] = {
-    PC_COMPAT_2_8
-};
-
 static void pc_i440fx_2_8_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_8
+    };
+
     pc_i440fx_2_9_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_8, G_N_ELEMENTS(pc_compat_2_8));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v2_8, "pc-i440fx-2.8", NULL,
                       pc_i440fx_2_8_machine_options);
 
-static GlobalProperty pc_compat_2_7[] = {
-    PC_COMPAT_2_7
-};
-
 static void pc_i440fx_2_7_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_7
+    };
+
     pc_i440fx_2_8_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_7, G_N_ELEMENTS(pc_compat_2_7));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v2_7, "pc-i440fx-2.7", NULL,
                       pc_i440fx_2_7_machine_options);
 
-static GlobalProperty pc_compat_2_6[] = {
-    PC_COMPAT_2_6
-};
-
 static void pc_i440fx_2_6_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_6
+    };
+
     pc_i440fx_2_7_machine_options(m);
     pcmc->legacy_cpu_hotplug = true;
     pcmc->linuxboot_dma_enabled = false;
-    compat_props_add(m->compat_props,
-                     pc_compat_2_6, G_N_ELEMENTS(pc_compat_2_6));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6", NULL,
                       pc_i440fx_2_6_machine_options);
 
-static GlobalProperty pc_compat_2_5[] = {
-    PC_COMPAT_2_5
-};
-
 static void pc_i440fx_2_5_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_5
+    };
+
     pc_i440fx_2_6_machine_options(m);
     pcmc->save_tsc_khz = false;
     m->legacy_fw_cfg_order = 1;
-    compat_props_add(m->compat_props,
-                     pc_compat_2_5, G_N_ELEMENTS(pc_compat_2_5));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v2_5, "pc-i440fx-2.5", NULL,
                       pc_i440fx_2_5_machine_options);
 
-static GlobalProperty pc_compat_2_4[] = {
-    PC_COMPAT_2_4
-};
-
 static void pc_i440fx_2_4_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_4
+    };
+
     pc_i440fx_2_5_machine_options(m);
     m->hw_version = "2.4.0";
     pcmc->broken_reserved_end = true;
-    compat_props_add(m->compat_props,
-                     pc_compat_2_4, G_N_ELEMENTS(pc_compat_2_4));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v2_4, "pc-i440fx-2.4", NULL,
                       pc_i440fx_2_4_machine_options)
 
-static GlobalProperty pc_compatp_2_3[] = {
-    PC_COMPAT_2_3
-};
-
 static void pc_i440fx_2_3_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_3
+    };
+
     pc_i440fx_2_4_machine_options(m);
     m->hw_version = "2.3.0";
-    compat_props_add(m->compat_props,
-                     pc_compatp_2_3, G_N_ELEMENTS(pc_compatp_2_3));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3,
                       pc_i440fx_2_3_machine_options);
 
-static GlobalProperty pc_compatp_2_2[] = {
-    PC_COMPAT_2_2
-};
-
 static void pc_i440fx_2_2_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_2
+    };
+
     pc_i440fx_2_3_machine_options(m);
     m->hw_version = "2.2.0";
     m->default_machine_opts = "firmware=bios-256k.bin,suppress-vmdesc=on";
-    compat_props_add(m->compat_props,
-                     pc_compatp_2_2, G_N_ELEMENTS(pc_compatp_2_2));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
     pcmc->rsdp_in_ram = false;
 }
 
 DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2,
                       pc_i440fx_2_2_machine_options);
 
-static GlobalProperty pc_compatp_2_1[] = {
-    PC_COMPAT_2_1
-};
-
 static void pc_i440fx_2_1_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_1
+    };
+
     pc_i440fx_2_2_machine_options(m);
     m->hw_version = "2.1.0";
     m->default_display = NULL;
-    compat_props_add(m->compat_props,
-                     pc_compatp_2_1, G_N_ELEMENTS(pc_compatp_2_1));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
     pcmc->smbios_uuid_encoded = false;
     pcmc->enforce_aligned_dimm = false;
 }
@@ -657,17 +643,16 @@ static void pc_i440fx_2_1_machine_options(MachineClass *m)
 DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1,
                       pc_i440fx_2_1_machine_options);
 
-static GlobalProperty pc_compatp_2_0[] = {
-    PC_COMPAT_2_0
-};
-
 static void pc_i440fx_2_0_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_0
+    };
+
     pc_i440fx_2_1_machine_options(m);
     m->hw_version = "2.0.0";
-    compat_props_add(m->compat_props,
-                     pc_compatp_2_0, G_N_ELEMENTS(pc_compatp_2_0));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
     pcmc->smbios_legacy_mode = true;
     pcmc->has_reserved_memory = false;
     /* This value depends on the actual DSDT and SSDT compiled into
@@ -693,19 +678,18 @@ static void pc_i440fx_2_0_machine_options(MachineClass *m)
 DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0,
                       pc_i440fx_2_0_machine_options);
 
-static GlobalProperty pc_compatp_1_7[] = {
-    PC_COMPAT_1_7
-};
-
 static void pc_i440fx_1_7_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_1_7
+    };
+
     pc_i440fx_2_0_machine_options(m);
     m->hw_version = "1.7.0";
     m->default_machine_opts = NULL;
     m->option_rom_has_mr = true;
-    compat_props_add(m->compat_props,
-                     pc_compatp_1_7, G_N_ELEMENTS(pc_compatp_1_7));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
     pcmc->smbios_defaults = false;
     pcmc->gigabyte_align = false;
     pcmc->legacy_acpi_table_size = 6414;
@@ -714,401 +698,388 @@ static void pc_i440fx_1_7_machine_options(MachineClass *m)
 DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7,
                       pc_i440fx_1_7_machine_options);
 
-static GlobalProperty pc_compatp_1_6[] = {
-    PC_COMPAT_1_6
-};
-
 static void pc_i440fx_1_6_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_1_6
+    };
+
     pc_i440fx_1_7_machine_options(m);
     m->hw_version = "1.6.0";
     m->rom_file_has_mr = false;
-    compat_props_add(m->compat_props,
-                     pc_compatp_1_6, G_N_ELEMENTS(pc_compatp_1_6));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
     pcmc->has_acpi_build = false;
 }
 
 DEFINE_I440FX_MACHINE(v1_6, "pc-i440fx-1.6", pc_compat_1_6,
                       pc_i440fx_1_6_machine_options);
 
-static GlobalProperty pc_compatp_1_5[] = {
-    PC_COMPAT_1_5
-};
-
 static void pc_i440fx_1_5_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_1_5
+    };
+
     pc_i440fx_1_6_machine_options(m);
     m->hw_version = "1.5.0";
-    compat_props_add(m->compat_props,
-                     pc_compatp_1_5, G_N_ELEMENTS(pc_compatp_1_5));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v1_5, "pc-i440fx-1.5", pc_compat_1_5,
                       pc_i440fx_1_5_machine_options);
 
-static GlobalProperty pc_compatp_1_4[] = {
-    PC_COMPAT_1_4
-};
-
 static void pc_i440fx_1_4_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_1_4
+    };
+
     pc_i440fx_1_5_machine_options(m);
     m->hw_version = "1.4.0";
     m->hot_add_cpu = NULL;
-    compat_props_add(m->compat_props,
-                     pc_compatp_1_4, G_N_ELEMENTS(pc_compatp_1_4));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v1_4, "pc-i440fx-1.4", pc_compat_1_4,
                       pc_i440fx_1_4_machine_options);
 
-static GlobalProperty pc_compatp_1_3[] = {
-    PC_CPU_MODEL_IDS("1.3.0")
-    {
-        .driver   = "usb-tablet",
-        .property = "usb_version",
-        .value    = stringify(1),
-    },{
-        .driver   = "virtio-net-pci",
-        .property = "ctrl_mac_addr",
-        .value    = "off",
-    },{
-        .driver   = "virtio-net-pci",
-        .property = "mq",
-        .value    = "off",
-    }, {
-        .driver   = "e1000",
-        .property = "autonegotiation",
-        .value    = "off",
-    },
-};
-
 static void pc_i440fx_1_3_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("1.3.0")
+        {
+            .driver   = "usb-tablet",
+            .property = "usb_version",
+            .value    = stringify(1),
+        },{
+            .driver   = "virtio-net-pci",
+            .property = "ctrl_mac_addr",
+            .value    = "off",
+        },{
+            .driver   = "virtio-net-pci",
+            .property = "mq",
+            .value    = "off",
+        }, {
+            .driver   = "e1000",
+            .property = "autonegotiation",
+            .value    = "off",
+        },
+    };
+
     pc_i440fx_1_4_machine_options(m);
     m->hw_version = "1.3.0";
-    compat_props_add(m->compat_props,
-                     pc_compatp_1_3, G_N_ELEMENTS(pc_compatp_1_3));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v1_3, "pc-1.3", pc_compat_1_3,
                       pc_i440fx_1_3_machine_options);
 
 
-static GlobalProperty pc_compatp_1_2[] = {
-    PC_CPU_MODEL_IDS("1.2.0")
-    {
-        .driver   = "nec-usb-xhci",
-        .property = "msi",
-        .value    = "off",
-    },{
-        .driver   = "nec-usb-xhci",
-        .property = "msix",
-        .value    = "off",
-    },{
-        .driver   = "ivshmem",
-        .property = "use64",
-        .value    = "0",
-    },{
-        .driver   = "qxl",
-        .property = "revision",
-        .value    = stringify(3),
-    },{
-        .driver   = "qxl-vga",
-        .property = "revision",
-        .value    = stringify(3),
-    },{
-        .driver   = "VGA",
-        .property = "mmio",
-        .value    = "off",
-    },
-};
-
 static void pc_i440fx_1_2_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("1.2.0")
+        {
+            .driver   = "nec-usb-xhci",
+            .property = "msi",
+            .value    = "off",
+        },{
+            .driver   = "nec-usb-xhci",
+            .property = "msix",
+            .value    = "off",
+        },{
+            .driver   = "ivshmem",
+            .property = "use64",
+            .value    = "0",
+        },{
+            .driver   = "qxl",
+            .property = "revision",
+            .value    = stringify(3),
+        },{
+            .driver   = "qxl-vga",
+            .property = "revision",
+            .value    = stringify(3),
+        },{
+            .driver   = "VGA",
+            .property = "mmio",
+            .value    = "off",
+        },
+    };
+
     pc_i440fx_1_3_machine_options(m);
     m->hw_version = "1.2.0";
-    compat_props_add(m->compat_props,
-                     pc_compatp_1_2, G_N_ELEMENTS(pc_compatp_1_2));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v1_2, "pc-1.2", pc_compat_1_2,
                       pc_i440fx_1_2_machine_options);
 
 
-static GlobalProperty pc_compatp_1_1[] = {
-    PC_CPU_MODEL_IDS("1.1.0")
-    {
-        .driver   = "virtio-scsi-pci",
-        .property = "hotplug",
-        .value    = "off",
-    },{
-        .driver   = "virtio-scsi-pci",
-        .property = "param_change",
-        .value    = "off",
-    },{
-        .driver   = "VGA",
-        .property = "vgamem_mb",
-        .value    = stringify(8),
-    },{
-        .driver   = "vmware-svga",
-        .property = "vgamem_mb",
-        .value    = stringify(8),
-    },{
-        .driver   = "qxl-vga",
-        .property = "vgamem_mb",
-        .value    = stringify(8),
-    },{
-        .driver   = "qxl",
-        .property = "vgamem_mb",
-        .value    = stringify(8),
-    },{
-        .driver   = "virtio-blk-pci",
-        .property = "config-wce",
-        .value    = "off",
-    },
-};
-
 static void pc_i440fx_1_1_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("1.1.0")
+        {
+            .driver   = "virtio-scsi-pci",
+            .property = "hotplug",
+            .value    = "off",
+        },{
+            .driver   = "virtio-scsi-pci",
+            .property = "param_change",
+            .value    = "off",
+        },{
+            .driver   = "VGA",
+            .property = "vgamem_mb",
+            .value    = stringify(8),
+        },{
+            .driver   = "vmware-svga",
+            .property = "vgamem_mb",
+            .value    = stringify(8),
+        },{
+            .driver   = "qxl-vga",
+            .property = "vgamem_mb",
+            .value    = stringify(8),
+        },{
+            .driver   = "qxl",
+            .property = "vgamem_mb",
+            .value    = stringify(8),
+        },{
+            .driver   = "virtio-blk-pci",
+            .property = "config-wce",
+            .value    = "off",
+        },
+    };
+
     pc_i440fx_1_2_machine_options(m);
     m->hw_version = "1.1.0";
-    compat_props_add(m->compat_props,
-                     pc_compatp_1_1, G_N_ELEMENTS(pc_compatp_1_1));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v1_1, "pc-1.1", pc_compat_1_2,
                       pc_i440fx_1_1_machine_options);
 
-static GlobalProperty pc_compatp_1_0[] = {
-    PC_CPU_MODEL_IDS("1.0")
-    {
-        .driver   = TYPE_ISA_FDC,
-        .property = "check_media_rate",
-        .value    = "off",
-    },{
-        .driver   = "virtio-balloon-pci",
-        .property = "class",
-        .value    = stringify(PCI_CLASS_MEMORY_RAM),
-    },{
-        .driver   = "apic-common",
-        .property = "vapic",
-        .value    = "off",
-    },{
-        .driver   = TYPE_USB_DEVICE,
-        .property = "full-path",
-        .value    = "no",
-    },
-};
-
 static void pc_i440fx_1_0_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("1.0")
+        {
+            .driver   = TYPE_ISA_FDC,
+            .property = "check_media_rate",
+            .value    = "off",
+        },{
+            .driver   = "virtio-balloon-pci",
+            .property = "class",
+            .value    = stringify(PCI_CLASS_MEMORY_RAM),
+        },{
+            .driver   = "apic-common",
+            .property = "vapic",
+            .value    = "off",
+        },{
+            .driver   = TYPE_USB_DEVICE,
+            .property = "full-path",
+            .value    = "no",
+        },
+    };
+
     pc_i440fx_1_1_machine_options(m);
     m->hw_version = "1.0";
-    compat_props_add(m->compat_props,
-                     pc_compatp_1_0, G_N_ELEMENTS(pc_compatp_1_0));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v1_0, "pc-1.0", pc_compat_1_2,
                       pc_i440fx_1_0_machine_options);
 
 
-static GlobalProperty pc_compatp_0_15[] = {
-    PC_CPU_MODEL_IDS("0.15")
-};
-
 static void pc_i440fx_0_15_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("0.15")
+    };
+
     pc_i440fx_1_0_machine_options(m);
     m->hw_version = "0.15";
-    compat_props_add(m->compat_props,
-                     pc_compatp_0_15, G_N_ELEMENTS(pc_compatp_0_15));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v0_15, "pc-0.15", pc_compat_1_2,
                       pc_i440fx_0_15_machine_options);
 
 
-static GlobalProperty pc_compatp_0_14[] = {
-    PC_CPU_MODEL_IDS("0.14")
-    {
-        .driver   = "virtio-blk-pci",
-        .property = "event_idx",
-        .value    = "off",
-    },{
-        .driver   = "virtio-serial-pci",
-        .property = "event_idx",
-        .value    = "off",
-    },{
-        .driver   = "virtio-net-pci",
-        .property = "event_idx",
-        .value    = "off",
-    },{
-        .driver   = "virtio-balloon-pci",
-        .property = "event_idx",
-        .value    = "off",
-    },{
-        .driver   = "qxl",
-        .property = "revision",
-        .value    = stringify(2),
-    },{
-        .driver   = "qxl-vga",
-        .property = "revision",
-        .value    = stringify(2),
-    },
-};
-
 static void pc_i440fx_0_14_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("0.14")
+        {
+            .driver   = "virtio-blk-pci",
+            .property = "event_idx",
+            .value    = "off",
+        },{
+            .driver   = "virtio-serial-pci",
+            .property = "event_idx",
+            .value    = "off",
+        },{
+            .driver   = "virtio-net-pci",
+            .property = "event_idx",
+            .value    = "off",
+        },{
+            .driver   = "virtio-balloon-pci",
+            .property = "event_idx",
+            .value    = "off",
+        },{
+            .driver   = "qxl",
+            .property = "revision",
+            .value    = stringify(2),
+        },{
+            .driver   = "qxl-vga",
+            .property = "revision",
+            .value    = stringify(2),
+        },
+    };
+
     pc_i440fx_0_15_machine_options(m);
     m->hw_version = "0.14";
-    compat_props_add(m->compat_props,
-                     pc_compatp_0_14, G_N_ELEMENTS(pc_compatp_0_14));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v0_14, "pc-0.14", pc_compat_1_2,
                       pc_i440fx_0_14_machine_options);
 
-static GlobalProperty pc_compatp_0_13[] = {
-    PC_CPU_MODEL_IDS("0.13")
-    {
-        .driver   = TYPE_PCI_DEVICE,
-        .property = "command_serr_enable",
-        .value    = "off",
-    },{
-        .driver   = "AC97",
-        .property = "use_broken_id",
-        .value    = stringify(1),
-    },{
-        .driver   = "virtio-9p-pci",
-        .property = "vectors",
-        .value    = stringify(0),
-    },{
-        .driver   = "VGA",
-        .property = "rombar",
-        .value    = stringify(0),
-    },{
-        .driver   = "vmware-svga",
-        .property = "rombar",
-        .value    = stringify(0),
-    },
-};
-
 static void pc_i440fx_0_13_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("0.13")
+        {
+            .driver   = TYPE_PCI_DEVICE,
+            .property = "command_serr_enable",
+            .value    = "off",
+        },{
+            .driver   = "AC97",
+            .property = "use_broken_id",
+            .value    = stringify(1),
+        },{
+            .driver   = "virtio-9p-pci",
+            .property = "vectors",
+            .value    = stringify(0),
+        },{
+            .driver   = "VGA",
+            .property = "rombar",
+            .value    = stringify(0),
+        },{
+            .driver   = "vmware-svga",
+            .property = "rombar",
+            .value    = stringify(0),
+        },
+    };
+
     pc_i440fx_0_14_machine_options(m);
     m->hw_version = "0.13";
-    compat_props_add(m->compat_props,
-                     pc_compatp_0_13, G_N_ELEMENTS(pc_compatp_0_13));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
     pcmc->kvmclock_enabled = false;
 }
 
 DEFINE_I440FX_MACHINE(v0_13, "pc-0.13", pc_compat_0_13,
                       pc_i440fx_0_13_machine_options);
 
-static GlobalProperty pc_compat_0_12[] = {
-    PC_CPU_MODEL_IDS("0.12")
-    {
-        .driver   = "virtio-serial-pci",
-        .property = "max_ports",
-        .value    = stringify(1),
-    },{
-        .driver   = "virtio-serial-pci",
-        .property = "vectors",
-        .value    = stringify(0),
-    },{
-        .driver   = "usb-mouse",
-        .property = "serial",
-        .value    = "1",
-    },{
-        .driver   = "usb-tablet",
-        .property = "serial",
-        .value    = "1",
-    },{
-        .driver   = "usb-kbd",
-        .property = "serial",
-        .value    = "1",
-    },
-};
-
 static void pc_i440fx_0_12_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("0.12")
+        {
+            .driver   = "virtio-serial-pci",
+            .property = "max_ports",
+            .value    = stringify(1),
+        },{
+            .driver   = "virtio-serial-pci",
+            .property = "vectors",
+            .value    = stringify(0),
+        },{
+            .driver   = "usb-mouse",
+            .property = "serial",
+            .value    = "1",
+        },{
+            .driver   = "usb-tablet",
+            .property = "serial",
+            .value    = "1",
+        },{
+            .driver   = "usb-kbd",
+            .property = "serial",
+            .value    = "1",
+        },
+    };
+
     pc_i440fx_0_13_machine_options(m);
     m->hw_version = "0.12";
-    compat_props_add(m->compat_props,
-                     pc_compat_0_12, G_N_ELEMENTS(pc_compat_0_12));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v0_12, "pc-0.12", pc_compat_0_13,
                       pc_i440fx_0_12_machine_options);
 
 
-static GlobalProperty pc_compat_0_11[] = {
-    PC_CPU_MODEL_IDS("0.11")
-    {
-        .driver   = "virtio-blk-pci",
-        .property = "vectors",
-        .value    = stringify(0),
-    },{
-        .driver   = TYPE_PCI_DEVICE,
-        .property = "rombar",
-        .value    = stringify(0),
-    },{
-        .driver   = "ide-drive",
-        .property = "ver",
-        .value    = "0.11",
-    },{
-        .driver   = "scsi-disk",
-        .property = "ver",
-        .value    = "0.11",
-    },
-};
-
 static void pc_i440fx_0_11_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("0.11")
+        {
+            .driver   = "virtio-blk-pci",
+            .property = "vectors",
+            .value    = stringify(0),
+        },{
+            .driver   = TYPE_PCI_DEVICE,
+            .property = "rombar",
+            .value    = stringify(0),
+        },{
+            .driver   = "ide-drive",
+            .property = "ver",
+            .value    = "0.11",
+        },{
+            .driver   = "scsi-disk",
+            .property = "ver",
+            .value    = "0.11",
+        },
+    };
+
     pc_i440fx_0_12_machine_options(m);
     m->hw_version = "0.11";
     m->deprecation_reason = "use a newer machine type instead";
-    compat_props_add(m->compat_props,
-                     pc_compat_0_11, G_N_ELEMENTS(pc_compat_0_11));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v0_11, "pc-0.11", pc_compat_0_13,
                       pc_i440fx_0_11_machine_options);
 
-static GlobalProperty pc_compat_0_10[] = {
-    PC_CPU_MODEL_IDS("0.10")
-    {
-        .driver   = "virtio-blk-pci",
-        .property = "class",
-        .value    = stringify(PCI_CLASS_STORAGE_OTHER),
-    },{
-        .driver   = "virtio-serial-pci",
-        .property = "class",
-        .value    = stringify(PCI_CLASS_DISPLAY_OTHER),
-    },{
-        .driver   = "virtio-net-pci",
-        .property = "vectors",
-        .value    = stringify(0),
-    },{
-        .driver   = "ide-drive",
-        .property = "ver",
-        .value    = "0.10",
-    },{
-        .driver   = "scsi-disk",
-        .property = "ver",
-        .value    = "0.10",
-    },
-};
-
 static void pc_i440fx_0_10_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_CPU_MODEL_IDS("0.10")
+        {
+            .driver   = "virtio-blk-pci",
+            .property = "class",
+            .value    = stringify(PCI_CLASS_STORAGE_OTHER),
+        },{
+            .driver   = "virtio-serial-pci",
+            .property = "class",
+            .value    = stringify(PCI_CLASS_DISPLAY_OTHER),
+        },{
+            .driver   = "virtio-net-pci",
+            .property = "vectors",
+            .value    = stringify(0),
+        },{
+            .driver   = "ide-drive",
+            .property = "ver",
+            .value    = "0.10",
+        },{
+            .driver   = "scsi-disk",
+            .property = "ver",
+            .value    = "0.10",
+        },
+    };
+
     pc_i440fx_0_11_machine_options(m);
     m->hw_version = "0.10";
-    compat_props_add(m->compat_props,
-                     pc_compat_0_10, G_N_ELEMENTS(pc_compat_0_10));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_I440FX_MACHINE(v0_10, "pc-0.10", pc_compat_0_13,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 72795812e5..c18bfd68c6 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -320,75 +320,70 @@ static void pc_q35_4_0_machine_options(MachineClass *m)
 DEFINE_Q35_MACHINE(v4_0, "pc-q35-4.0", NULL,
                    pc_q35_4_0_machine_options);
 
-static GlobalProperty pc_compat_3_1[] = {
-    PC_COMPAT_3_1
-};
-
 static void pc_q35_3_1_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_3_1
+    };
+
     pc_q35_4_0_machine_options(m);
     m->alias = NULL;
-    compat_props_add(m->compat_props,
-                     pc_compat_3_1, G_N_ELEMENTS(pc_compat_3_1));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v3_1, "pc-q35-3.1", NULL,
                    pc_q35_3_1_machine_options);
 
-static GlobalProperty pc_compat_3_0[] = {
-    PC_COMPAT_3_0
-};
-
 static void pc_q35_3_0_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_3_0
+    };
+
     pc_q35_3_1_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_3_0, G_N_ELEMENTS(pc_compat_3_0));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v3_0, "pc-q35-3.0", NULL,
                     pc_q35_3_0_machine_options);
 
-static GlobalProperty pc_compat_2_12[] = {
-    PC_COMPAT_2_12
-};
-
 static void pc_q35_2_12_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_12
+    };
+
     pc_q35_3_0_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_12, G_N_ELEMENTS(pc_compat_2_12));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v2_12, "pc-q35-2.12", NULL,
                    pc_q35_2_12_machine_options);
 
-static GlobalProperty pc_compat_2_11[] = {
-    PC_COMPAT_2_11
-};
-
 static void pc_q35_2_11_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_11
+    };
+
 
     pc_q35_2_12_machine_options(m);
     pcmc->default_nic_model = "e1000";
-    compat_props_add(m->compat_props,
-                     pc_compat_2_11, G_N_ELEMENTS(pc_compat_2_11));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v2_11, "pc-q35-2.11", NULL,
                    pc_q35_2_11_machine_options);
 
-static GlobalProperty pc_compat_2_10[] = {
-    PC_COMPAT_2_10
-};
-
 static void pc_q35_2_10_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_10
+    };
+
     pc_q35_2_11_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_10, G_N_ELEMENTS(pc_compat_2_10));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
     m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
     m->auto_enable_numa_with_memhp = false;
 }
@@ -396,95 +391,89 @@ static void pc_q35_2_10_machine_options(MachineClass *m)
 DEFINE_Q35_MACHINE(v2_10, "pc-q35-2.10", NULL,
                    pc_q35_2_10_machine_options);
 
-static GlobalProperty pc_compat_2_9[] = {
-    PC_COMPAT_2_9
-};
-
 static void pc_q35_2_9_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_9
+    };
+
     pc_q35_2_10_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_9, G_N_ELEMENTS(pc_compat_2_9));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v2_9, "pc-q35-2.9", NULL,
                    pc_q35_2_9_machine_options);
 
-static GlobalProperty pc_compat_2_8[] = {
-    PC_COMPAT_2_8
-};
-
 static void pc_q35_2_8_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_8
+    };
+
     pc_q35_2_9_machine_options(m);
-    compat_props_add(m->compat_props,
-                     pc_compat_2_8, G_N_ELEMENTS(pc_compat_2_8));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v2_8, "pc-q35-2.8", NULL,
                    pc_q35_2_8_machine_options);
 
-static GlobalProperty pc_compat_2_7[] = {
-    PC_COMPAT_2_7
-};
-
 static void pc_q35_2_7_machine_options(MachineClass *m)
 {
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_7
+    };
+
     pc_q35_2_8_machine_options(m);
     m->max_cpus = 255;
-    compat_props_add(m->compat_props,
-                     pc_compat_2_7, G_N_ELEMENTS(pc_compat_2_7));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v2_7, "pc-q35-2.7", NULL,
                    pc_q35_2_7_machine_options);
 
-static GlobalProperty pc_compat_2_6[] = {
-    PC_COMPAT_2_6
-};
-
 static void pc_q35_2_6_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_6
+    };
+
     pc_q35_2_7_machine_options(m);
     pcmc->legacy_cpu_hotplug = true;
     pcmc->linuxboot_dma_enabled = false;
-    compat_props_add(m->compat_props,
-                     pc_compat_2_6, G_N_ELEMENTS(pc_compat_2_6));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
                    pc_q35_2_6_machine_options);
 
-static GlobalProperty pc_compat_2_5[] = {
-    PC_COMPAT_2_5
-};
-
 static void pc_q35_2_5_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_5
+    };
+
     pc_q35_2_6_machine_options(m);
     pcmc->save_tsc_khz = false;
     m->legacy_fw_cfg_order = 1;
-    compat_props_add(m->compat_props,
-                     pc_compat_2_5, G_N_ELEMENTS(pc_compat_2_5));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v2_5, "pc-q35-2.5", NULL,
                    pc_q35_2_5_machine_options);
 
-static GlobalProperty pc_compat_2_4[] = {
-    PC_COMPAT_2_4
-};
-
 static void pc_q35_2_4_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
+    static GlobalProperty compat[] = {
+        PC_COMPAT_2_4
+    };
+
     pc_q35_2_5_machine_options(m);
     m->hw_version = "2.4.0";
     pcmc->broken_reserved_end = true;
-    compat_props_add(m->compat_props,
-                     pc_compat_2_4, G_N_ELEMENTS(pc_compat_2_4));
+    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_Q35_MACHINE(v2_4, "pc-q35-2.4", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index a6ed88ba95..2313362ff2 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3963,15 +3963,14 @@ DEFINE_SPAPR_MACHINE(4_0, "4.0", true);
 /*
  * pseries-3.1
  */
-static GlobalProperty spapr_compat_3_1[] = {
-    HW_COMPAT_3_1
-};
-
 static void spapr_machine_3_1_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_3_1
+    };
+
     spapr_machine_4_0_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     spapr_compat_3_1, G_N_ELEMENTS(spapr_compat_3_1));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
@@ -3979,17 +3978,16 @@ DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
 /*
  * pseries-3.0
  */
-static GlobalProperty spapr_compat_3_0[] = {
-    HW_COMPAT_3_0
-};
 
 static void spapr_machine_3_0_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_3_0
+    };
 
     spapr_machine_3_1_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     spapr_compat_3_0, G_N_ELEMENTS(spapr_compat_3_0));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 
     smc->legacy_irq_allocation = true;
     smc->irq = &spapr_irq_xics_legacy;
@@ -4000,27 +3998,25 @@ DEFINE_SPAPR_MACHINE(3_0, "3.0", false);
 /*
  * pseries-2.12
  */
-static GlobalProperty spapr_compat_2_12[] = {
-    HW_COMPAT_2_12
-    {
-        .driver = TYPE_POWERPC_CPU,
-        .property = "pre-3.0-migration",
-        .value    = "on",
-    },
-    {
-        .driver = TYPE_SPAPR_CPU_CORE,
-        .property = "pre-3.0-migration",
-        .value    = "on",
-    },
-};
-
 static void spapr_machine_2_12_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_12
+        {
+            .driver = TYPE_POWERPC_CPU,
+            .property = "pre-3.0-migration",
+            .value    = "on",
+        },
+        {
+            .driver = TYPE_SPAPR_CPU_CORE,
+            .property = "pre-3.0-migration",
+            .value    = "on",
+        },
+    };
 
     spapr_machine_3_0_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_12, G_N_ELEMENTS(spapr_compat_2_12));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 
     /* We depend on kvm_enabled() to choose a default value for the
      * hpt-max-page-size capability. Of course we can't do it here
@@ -4047,18 +4043,17 @@ DEFINE_SPAPR_MACHINE(2_12_sxxm, "2.12-sxxm", false);
 /*
  * pseries-2.11
  */
-static GlobalProperty spapr_compat_2_11[] = {
-    HW_COMPAT_2_11
-};
 
 static void spapr_machine_2_11_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_11
+    };
 
     spapr_machine_2_12_class_options(mc);
     smc->default_caps.caps[SPAPR_CAP_HTM] = SPAPR_CAP_ON;
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_11, G_N_ELEMENTS(spapr_compat_2_11));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
@@ -4066,15 +4061,15 @@ DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
 /*
  * pseries-2.10
  */
-static GlobalProperty spapr_compat_2_10[] = {
-    HW_COMPAT_2_10
-};
 
 static void spapr_machine_2_10_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_10
+    };
+
     spapr_machine_2_11_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_10, G_N_ELEMENTS(spapr_compat_2_10));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_SPAPR_MACHINE(2_10, "2.10", false);
@@ -4082,22 +4077,21 @@ DEFINE_SPAPR_MACHINE(2_10, "2.10", false);
 /*
  * pseries-2.9
  */
-static GlobalProperty spapr_compat_2_9[] = {
-    HW_COMPAT_2_9
-    {
-        .driver = TYPE_POWERPC_CPU,
-        .property = "pre-2.10-migration",
-        .value    = "on",
-    },
-};
 
 static void spapr_machine_2_9_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_9
+        {
+            .driver = TYPE_POWERPC_CPU,
+            .property = "pre-2.10-migration",
+            .value    = "on",
+        },
+    };
 
     spapr_machine_2_10_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_9, G_N_ELEMENTS(spapr_compat_2_9));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     mc->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
     smc->pre_2_10_has_unused_icps = true;
     smc->resize_hpt_default = SPAPR_RESIZE_HPT_DISABLED;
@@ -4108,20 +4102,20 @@ DEFINE_SPAPR_MACHINE(2_9, "2.9", false);
 /*
  * pseries-2.8
  */
-static GlobalProperty spapr_compat_2_8[] = {
-    HW_COMPAT_2_8
-    {
-        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
-        .property = "pcie-extended-configuration-space",
-        .value    = "off",
-    },
-};
 
 static void spapr_machine_2_8_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_8
+        {
+            .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+            .property = "pcie-extended-configuration-space",
+            .value    = "off",
+        },
+    };
+
     spapr_machine_2_9_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_8, G_N_ELEMENTS(spapr_compat_2_8));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     mc->numa_mem_align_shift = 23;
 }
 
@@ -4130,29 +4124,6 @@ DEFINE_SPAPR_MACHINE(2_8, "2.8", false);
 /*
  * pseries-2.7
  */
-static GlobalProperty spapr_compat_2_7[] = {
-    HW_COMPAT_2_7
-    {
-        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
-        .property = "mem_win_size",
-        .value    = stringify(SPAPR_PCI_2_7_MMIO_WIN_SIZE),
-    },
-    {
-        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
-        .property = "mem64_win_size",
-        .value    = "0",
-    },
-    {
-        .driver = TYPE_POWERPC_CPU,
-        .property = "pre-2.8-migration",
-        .value    = "on",
-    },
-    {
-        .driver = TYPE_SPAPR_PCI_HOST_BRIDGE,
-        .property = "pre-2.8-migration",
-        .value    = "on",
-    },
-};
 
 static void phb_placement_2_7(sPAPRMachineState *spapr, uint32_t index,
                               uint64_t *buid, hwaddr *pio,
@@ -4206,12 +4177,34 @@ static void phb_placement_2_7(sPAPRMachineState *spapr, uint32_t index,
 static void spapr_machine_2_7_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_7
+        {
+            .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+            .property = "mem_win_size",
+            .value    = stringify(SPAPR_PCI_2_7_MMIO_WIN_SIZE),
+        },
+        {
+            .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+            .property = "mem64_win_size",
+            .value    = "0",
+        },
+        {
+            .driver = TYPE_POWERPC_CPU,
+            .property = "pre-2.8-migration",
+            .value    = "on",
+        },
+        {
+            .driver = TYPE_SPAPR_PCI_HOST_BRIDGE,
+            .property = "pre-2.8-migration",
+            .value    = "on",
+        },
+    };
 
     spapr_machine_2_8_class_options(mc);
     mc->default_cpu_type = POWERPC_CPU_TYPE_NAME("power7_v2.3");
     mc->default_machine_opts = "modern-hotplug-events=off";
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_7, G_N_ELEMENTS(spapr_compat_2_7));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     smc->phb_placement = phb_placement_2_7;
 }
 
@@ -4220,21 +4213,21 @@ DEFINE_SPAPR_MACHINE(2_7, "2.7", false);
 /*
  * pseries-2.6
  */
-static GlobalProperty spapr_compat_2_6[] = {
-    HW_COMPAT_2_6
-    {
-        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
-        .property = "ddw",
-        .value    = stringify(off),
-    },
-};
 
 static void spapr_machine_2_6_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_6
+        {
+            .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+            .property = "ddw",
+            .value    = stringify(off),
+        },
+    };
+
     spapr_machine_2_7_class_options(mc);
     mc->has_hotpluggable_cpus = false;
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_6, G_N_ELEMENTS(spapr_compat_2_6));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_SPAPR_MACHINE(2_6, "2.6", false);
@@ -4242,23 +4235,22 @@ DEFINE_SPAPR_MACHINE(2_6, "2.6", false);
 /*
  * pseries-2.5
  */
-static GlobalProperty spapr_compat_2_5[] = {
-    HW_COMPAT_2_5
-    {
-        .driver   = "spapr-vlan",
-        .property = "use-rx-buffer-pools",
-        .value    = "off",
-    },
-};
 
 static void spapr_machine_2_5_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_5
+        {
+            .driver   = "spapr-vlan",
+            .property = "use-rx-buffer-pools",
+            .value    = "off",
+        },
+    };
 
     spapr_machine_2_6_class_options(mc);
     smc->use_ohci_by_default = true;
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_5, G_N_ELEMENTS(spapr_compat_2_5));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_SPAPR_MACHINE(2_5, "2.5", false);
@@ -4266,18 +4258,17 @@ DEFINE_SPAPR_MACHINE(2_5, "2.5", false);
 /*
  * pseries-2.4
  */
-static GlobalProperty spapr_compat_2_4[] = {
-    HW_COMPAT_2_4
-};
 
 static void spapr_machine_2_4_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_4
+    };
 
     spapr_machine_2_5_class_options(mc);
     smc->dr_lmb_enabled = false;
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_4, G_N_ELEMENTS(spapr_compat_2_4));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
@@ -4285,40 +4276,39 @@ DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
 /*
  * pseries-2.3
  */
-static GlobalProperty spapr_compat_2_3[] = {
-    HW_COMPAT_2_3
-    {
-        .driver   = "spapr-pci-host-bridge",
-        .property = "dynamic-reconfiguration",
-        .value    = "off",
-    },
-};
 
 static void spapr_machine_2_3_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_3
+        {
+            .driver   = "spapr-pci-host-bridge",
+            .property = "dynamic-reconfiguration",
+            .value    = "off",
+        },
+    };
     spapr_machine_2_4_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_3, G_N_ELEMENTS(spapr_compat_2_3));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_SPAPR_MACHINE(2_3, "2.3", false);
 
 /*
  * pseries-2.2
  */
-static GlobalProperty spapr_compat_2_2[] = {
-    HW_COMPAT_2_2
-    {
-        .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
-        .property = "mem_win_size",
-        .value    = "0x20000000",
-    },
-};
 
 static void spapr_machine_2_2_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_2
+        {
+            .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
+            .property = "mem_win_size",
+            .value    = "0x20000000",
+        },
+    };
+
     spapr_machine_2_3_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_2, G_N_ELEMENTS(spapr_compat_2_2));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     mc->default_machine_opts = "modern-hotplug-events=off,suppress-vmdesc=on";
 }
 DEFINE_SPAPR_MACHINE(2_2, "2.2", false);
@@ -4326,15 +4316,15 @@ DEFINE_SPAPR_MACHINE(2_2, "2.2", false);
 /*
  * pseries-2.1
  */
-static GlobalProperty spapr_compat_2_1[] = {
-    HW_COMPAT_2_1
-};
 
 static void spapr_machine_2_1_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_1
+    };
+
     spapr_machine_2_2_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     spapr_compat_2_1, G_N_ELEMENTS(spapr_compat_2_1));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_SPAPR_MACHINE(2_1, "2.1", false);
 
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index f2faea585e..21f3325c5a 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -651,111 +651,6 @@ bool css_migration_enabled(void)
     }                                                                         \
     type_init(ccw_machine_register_##suffix)
 
-static GlobalProperty ccw_compat_3_1[] = {
-    HW_COMPAT_3_1
-};
-
-static GlobalProperty ccw_compat_3_0[] = {
-    HW_COMPAT_3_0
-};
-
-static GlobalProperty ccw_compat_2_12[] = {
-    HW_COMPAT_2_12
-};
-
-static GlobalProperty ccw_compat_2_11[] = {
-    HW_COMPAT_2_11
-    {
-        .driver   = TYPE_SCLP_EVENT_FACILITY,
-        .property = "allow_all_mask_sizes",
-        .value    = "off",
-    },
-};
-
-static GlobalProperty ccw_compat_2_10[] = {
-    HW_COMPAT_2_10
-};
-
-static GlobalProperty ccw_compat_2_9[] = {
-    HW_COMPAT_2_9
-    {
-        .driver   = TYPE_S390_STATTRIB,
-        .property = "migration-enabled",
-        .value    = "off",
-    },
-};
-
-static GlobalProperty ccw_compat_2_8[] = {
-    HW_COMPAT_2_8
-    {
-        .driver   = TYPE_S390_FLIC_COMMON,
-        .property = "adapter_routes_max_batch",
-        .value    = "64",
-    },
-};
-
-static GlobalProperty ccw_compat_2_7[] = {
-    HW_COMPAT_2_7
-};
-
-static GlobalProperty ccw_compat_2_6[] = {
-    HW_COMPAT_2_6
-    {
-        .driver   = TYPE_S390_IPL,
-        .property = "iplbext_migration",
-        .value    = "off",
-    }, {
-        .driver   = TYPE_VIRTUAL_CSS_BRIDGE,
-        .property = "css_dev_path",
-        .value    = "off",
-    },
-};
-
-static GlobalProperty ccw_compat_2_5[] = {
-    HW_COMPAT_2_5
-};
-
-static GlobalProperty ccw_compat_2_4[] = {
-    HW_COMPAT_2_4
-    {
-        .driver   = TYPE_S390_SKEYS,
-        .property = "migration-enabled",
-        .value    = "off",
-    },{
-        .driver   = "virtio-blk-ccw",
-        .property = "max_revision",
-        .value    = "0",
-    },{
-        .driver   = "virtio-balloon-ccw",
-        .property = "max_revision",
-        .value    = "0",
-    },{
-        .driver   = "virtio-serial-ccw",
-        .property = "max_revision",
-        .value    = "0",
-    },{
-        .driver   = "virtio-9p-ccw",
-        .property = "max_revision",
-        .value    = "0",
-    },{
-        .driver   = "virtio-rng-ccw",
-        .property = "max_revision",
-        .value    = "0",
-    },{
-        .driver   = "virtio-net-ccw",
-        .property = "max_revision",
-        .value    = "0",
-    },{
-        .driver   = "virtio-scsi-ccw",
-        .property = "max_revision",
-        .value    = "0",
-    },{
-        .driver   = "vhost-scsi-ccw",
-        .property = "max_revision",
-        .value    = "0",
-    },
-};
-
 static void ccw_machine_4_0_instance_options(MachineState *machine)
 {
 }
@@ -772,9 +667,12 @@ static void ccw_machine_3_1_instance_options(MachineState *machine)
 
 static void ccw_machine_3_1_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_3_1
+    };
+
     ccw_machine_4_0_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_3_1, G_N_ELEMENTS(ccw_compat_3_1));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(3_1, "3.1", false);
 
@@ -786,11 +684,13 @@ static void ccw_machine_3_0_instance_options(MachineState *machine)
 static void ccw_machine_3_0_class_options(MachineClass *mc)
 {
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_3_0
+    };
 
     s390mc->hpage_1m_allowed = false;
     ccw_machine_3_1_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_3_0, G_N_ELEMENTS(ccw_compat_3_0));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(3_0, "3.0", false);
 
@@ -803,9 +703,12 @@ static void ccw_machine_2_12_instance_options(MachineState *machine)
 
 static void ccw_machine_2_12_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_12
+    };
+
     ccw_machine_3_0_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_2_12, G_N_ELEMENTS(ccw_compat_2_12));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_12, "2.12", false);
 
@@ -820,9 +723,17 @@ static void ccw_machine_2_11_instance_options(MachineState *machine)
 
 static void ccw_machine_2_11_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_11
+        {
+            .driver   = TYPE_SCLP_EVENT_FACILITY,
+            .property = "allow_all_mask_sizes",
+            .value    = "off",
+        },
+    };
+
     ccw_machine_2_12_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_2_11, G_N_ELEMENTS(ccw_compat_2_11));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_11, "2.11", false);
 
@@ -833,9 +744,12 @@ static void ccw_machine_2_10_instance_options(MachineState *machine)
 
 static void ccw_machine_2_10_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_10
+    };
+
     ccw_machine_2_11_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_2_10, G_N_ELEMENTS(ccw_compat_2_10));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_10, "2.10", false);
 
@@ -852,10 +766,17 @@ static void ccw_machine_2_9_instance_options(MachineState *machine)
 static void ccw_machine_2_9_class_options(MachineClass *mc)
 {
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_9
+        {
+            .driver   = TYPE_S390_STATTRIB,
+            .property = "migration-enabled",
+            .value    = "off",
+        },
+    };
 
     ccw_machine_2_10_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_2_9, G_N_ELEMENTS(ccw_compat_2_9));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     s390mc->css_migration_enabled = false;
 }
 DEFINE_CCW_MACHINE(2_9, "2.9", false);
@@ -867,9 +788,17 @@ static void ccw_machine_2_8_instance_options(MachineState *machine)
 
 static void ccw_machine_2_8_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_8
+        {
+            .driver   = TYPE_S390_FLIC_COMMON,
+            .property = "adapter_routes_max_batch",
+            .value    = "64",
+        },
+    };
+
     ccw_machine_2_9_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_2_8, G_N_ELEMENTS(ccw_compat_2_8));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_8, "2.8", false);
 
@@ -881,11 +810,13 @@ static void ccw_machine_2_7_instance_options(MachineState *machine)
 static void ccw_machine_2_7_class_options(MachineClass *mc)
 {
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_7
+    };
 
     s390mc->cpu_model_allowed = false;
     ccw_machine_2_8_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_2_7, G_N_ELEMENTS(ccw_compat_2_7));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_7, "2.7", false);
 
@@ -897,11 +828,22 @@ static void ccw_machine_2_6_instance_options(MachineState *machine)
 static void ccw_machine_2_6_class_options(MachineClass *mc)
 {
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_6
+        {
+            .driver   = TYPE_S390_IPL,
+            .property = "iplbext_migration",
+            .value    = "off",
+        }, {
+            .driver   = TYPE_VIRTUAL_CSS_BRIDGE,
+            .property = "css_dev_path",
+            .value    = "off",
+        },
+    };
 
     s390mc->ri_allowed = false;
     ccw_machine_2_7_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_2_6, G_N_ELEMENTS(ccw_compat_2_6));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_6, "2.6", false);
 
@@ -912,9 +854,12 @@ static void ccw_machine_2_5_instance_options(MachineState *machine)
 
 static void ccw_machine_2_5_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_5
+    };
+
     ccw_machine_2_6_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_2_5, G_N_ELEMENTS(ccw_compat_2_5));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_5, "2.5", false);
 
@@ -925,9 +870,49 @@ static void ccw_machine_2_4_instance_options(MachineState *machine)
 
 static void ccw_machine_2_4_class_options(MachineClass *mc)
 {
+    static GlobalProperty compat[] = {
+        HW_COMPAT_2_4
+        {
+            .driver   = TYPE_S390_SKEYS,
+            .property = "migration-enabled",
+            .value    = "off",
+        },{
+            .driver   = "virtio-blk-ccw",
+            .property = "max_revision",
+            .value    = "0",
+        },{
+            .driver   = "virtio-balloon-ccw",
+            .property = "max_revision",
+            .value    = "0",
+        },{
+            .driver   = "virtio-serial-ccw",
+            .property = "max_revision",
+            .value    = "0",
+        },{
+            .driver   = "virtio-9p-ccw",
+            .property = "max_revision",
+            .value    = "0",
+        },{
+            .driver   = "virtio-rng-ccw",
+            .property = "max_revision",
+            .value    = "0",
+        },{
+            .driver   = "virtio-net-ccw",
+            .property = "max_revision",
+            .value    = "0",
+        },{
+            .driver   = "virtio-scsi-ccw",
+            .property = "max_revision",
+            .value    = "0",
+        },{
+            .driver   = "vhost-scsi-ccw",
+            .property = "max_revision",
+            .value    = "0",
+        },
+    };
+
     ccw_machine_2_5_class_options(mc);
-    compat_props_add(mc->compat_props,
-                     ccw_compat_2_4, G_N_ELEMENTS(ccw_compat_2_4));
+    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_4, "2.4", false);
 
diff --git a/hw/xen/xen-common.c b/hw/xen/xen-common.c
index 4532aa8632..d51148b6b3 100644
--- a/hw/xen/xen-common.c
+++ b/hw/xen/xen-common.c
@@ -159,27 +159,26 @@ static int xen_init(MachineState *ms)
     return 0;
 }
 
-static GlobalProperty xen_compat_props[] = {
-    {
-        .driver = "migration",
-        .property = "store-global-state",
-        .value = "off",
-    },
-    {
-        .driver = "migration",
-        .property = "send-configuration",
-        .value = "off",
-    },
-    {
-        .driver = "migration",
-        .property = "send-section-footer",
-        .value = "off",
-    }
-};
-
 static void xen_accel_class_init(ObjectClass *oc, void *data)
 {
     AccelClass *ac = ACCEL_CLASS(oc);
+    static GlobalProperty compat[] = {
+        {
+            .driver = "migration",
+            .property = "store-global-state",
+            .value = "off",
+        },
+        {
+            .driver = "migration",
+            .property = "send-configuration",
+            .value = "off",
+        },
+        {
+            .driver = "migration",
+            .property = "send-section-footer",
+            .value = "off",
+        }
+    };
 
     ac->name = "Xen";
     ac->init_machine = xen_init;
@@ -187,8 +186,7 @@ static void xen_accel_class_init(ObjectClass *oc, void *data)
     ac->allowed = &xen_allowed;
     ac->compat_props = g_ptr_array_new();
 
-    compat_props_add(ac->compat_props,
-                     xen_compat_props, G_N_ELEMENTS(xen_compat_props));
+    compat_props_add(ac->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
 #define TYPE_XEN_ACCEL ACCEL_CLASS_NAME("xen")
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 05/28] hw: remove SET_MACHINE_COMPAT
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (3 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 04/28] machine: move compat properties out of globals Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:44   ` Cornelia Huck
  2018-12-21 14:22   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 06/28] compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros Marc-André Lureau
                   ` (23 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

No longer needed.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index f02d5a1bbd..f743d9d4a4 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -287,16 +287,4 @@ struct MachineState {
     } \
     type_init(machine_initfn##_register_types)
 
-#define SET_MACHINE_COMPAT(m, compat) \
-    do {                              \
-        int i;                        \
-        if (!m->compat_props) { \
-            m->compat_props = g_array_new(false, false, sizeof(void *)); \
-        } \
-        for (i = 0; i < G_N_ELEMENTS(compat); i++) {          \
-            GlobalProperty *prop = &compat[i];          \
-            g_array_append_val(m->compat_props, prop); \
-        }                                              \
-    } while (0)
-
 #endif
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 06/28] compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (4 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 05/28] hw: remove SET_MACHINE_COMPAT Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:47   ` Cornelia Huck
  2018-12-27  6:35   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 07/28] compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros Marc-André Lureau
                   ` (22 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        | 3 +++
 include/hw/compat.h        | 3 ---
 include/hw/i386/pc.h       | 4 ++--
 hw/arm/virt.c              | 6 +-----
 hw/core/machine.c          | 3 +++
 hw/i386/pc.c               | 3 +++
 hw/i386/pc_piix.c          | 7 ++-----
 hw/i386/pc_q35.c           | 7 ++-----
 hw/ppc/spapr.c             | 6 +-----
 hw/s390x/s390-virtio-ccw.c | 6 +-----
 10 files changed, 18 insertions(+), 30 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index f743d9d4a4..dc8c748c62 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -287,4 +287,7 @@ struct MachineState {
     } \
     type_init(machine_initfn##_register_types)
 
+extern GlobalProperty hw_compat_3_1[];
+extern const size_t hw_compat_3_1_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 70958328fe..6f4d5fc647 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,9 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_3_1 \
-    /* empty */
-
 #define HW_COMPAT_3_0 \
     /* empty */
 
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 9d29c4b1df..dd1d6fd0f3 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -294,8 +294,8 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t);
 int e820_get_num_entries(void);
 bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
 
-#define PC_COMPAT_3_1 \
-    HW_COMPAT_3_1 \
+extern GlobalProperty pc_compat_3_1[];
+extern const size_t pc_compat_3_1_len;
 
 #define PC_COMPAT_3_0 \
     HW_COMPAT_3_0 \
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index caa61c6201..b1ecccfaab 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1874,12 +1874,8 @@ DEFINE_VIRT_MACHINE_AS_LATEST(4, 0)
 
 static void virt_machine_3_1_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_3_1
-    };
-
     virt_machine_4_0_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_3_1, hw_compat_3_1_len);
 }
 DEFINE_VIRT_MACHINE(3, 1)
 
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 6e24924aba..bdeeda68e4 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -22,6 +22,9 @@
 #include "qemu/error-report.h"
 #include "sysemu/qtest.h"
 
+GlobalProperty hw_compat_3_1[] = {};
+const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 115bc2825c..74d8a82f64 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -109,6 +109,9 @@ static struct e820_entry *e820_table;
 static unsigned e820_entries;
 struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX};
 
+GlobalProperty pc_compat_3_1[] = {};
+const size_t pc_compat_3_1_len = G_N_ELEMENTS(pc_compat_3_1);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index d1abe637f1..5342019d83 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -440,14 +440,11 @@ DEFINE_I440FX_MACHINE(v4_0, "pc-i440fx-4.0", NULL,
 
 static void pc_i440fx_3_1_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_3_1
-    };
-
     pc_i440fx_4_0_machine_options(m);
     m->is_default = 0;
     m->alias = NULL;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_3_1, hw_compat_3_1_len);
+    compat_props_add(m->compat_props, pc_compat_3_1, pc_compat_3_1_len);
 }
 
 DEFINE_I440FX_MACHINE(v3_1, "pc-i440fx-3.1", NULL,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index c18bfd68c6..1eb1e82b25 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -322,13 +322,10 @@ DEFINE_Q35_MACHINE(v4_0, "pc-q35-4.0", NULL,
 
 static void pc_q35_3_1_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_3_1
-    };
-
     pc_q35_4_0_machine_options(m);
     m->alias = NULL;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_3_1, hw_compat_3_1_len);
+    compat_props_add(m->compat_props, pc_compat_3_1, pc_compat_3_1_len);
 }
 
 DEFINE_Q35_MACHINE(v3_1, "pc-q35-3.1", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 2313362ff2..038d1859a6 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3965,12 +3965,8 @@ DEFINE_SPAPR_MACHINE(4_0, "4.0", true);
  */
 static void spapr_machine_3_1_class_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_3_1
-    };
-
     spapr_machine_4_0_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_3_1, hw_compat_3_1_len);
 }
 
 DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 21f3325c5a..5e8b48e75b 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -667,12 +667,8 @@ static void ccw_machine_3_1_instance_options(MachineState *machine)
 
 static void ccw_machine_3_1_class_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_3_1
-    };
-
     ccw_machine_4_0_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_3_1, hw_compat_3_1_len);
 }
 DEFINE_CCW_MACHINE(3_1, "3.1", false);
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 07/28] compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (5 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 06/28] compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:50   ` Cornelia Huck
  2018-12-27  6:37   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 08/28] compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros Marc-André Lureau
                   ` (21 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +++
 include/hw/compat.h        |  3 ---
 include/hw/i386/pc.h       | 17 ++---------------
 hw/arm/virt.c              |  6 +-----
 hw/core/machine.c          |  3 +++
 hw/i386/pc.c               | 17 +++++++++++++++++
 hw/i386/pc_piix.c          |  7 ++-----
 hw/i386/pc_q35.c           |  7 ++-----
 hw/ppc/spapr.c             |  5 +----
 hw/s390x/s390-virtio-ccw.c |  5 +----
 10 files changed, 32 insertions(+), 41 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index dc8c748c62..6b94d36d6a 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -290,4 +290,7 @@ struct MachineState {
 extern GlobalProperty hw_compat_3_1[];
 extern const size_t hw_compat_3_1_len;
 
+extern GlobalProperty hw_compat_3_0[];
+extern const size_t hw_compat_3_0_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 6f4d5fc647..c08f4040bb 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,9 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_3_0 \
-    /* empty */
-
 #define HW_COMPAT_2_12 \
     {\
         .driver   = "migration",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index dd1d6fd0f3..197131ff9a 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -297,21 +297,8 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
 extern GlobalProperty pc_compat_3_1[];
 extern const size_t pc_compat_3_1_len;
 
-#define PC_COMPAT_3_0 \
-    HW_COMPAT_3_0 \
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "x-hv-synic-kvm-only",\
-        .value    = "on",\
-    },{\
-        .driver   = "Skylake-Server" "-" TYPE_X86_CPU,\
-        .property = "pku",\
-        .value    = "off",\
-    },{\
-        .driver   = "Skylake-Server-IBRS" "-" TYPE_X86_CPU,\
-        .property = "pku",\
-        .value    = "off",\
-    },
+extern GlobalProperty pc_compat_3_0[];
+extern const size_t pc_compat_3_0_len;
 
 #define PC_COMPAT_2_12 \
     HW_COMPAT_2_12 \
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index b1ecccfaab..d226e7922e 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1881,12 +1881,8 @@ DEFINE_VIRT_MACHINE(3, 1)
 
 static void virt_machine_3_0_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_3_0
-    };
-
     virt_machine_3_1_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_3_0, hw_compat_3_0_len);
 }
 DEFINE_VIRT_MACHINE(3, 0)
 
diff --git a/hw/core/machine.c b/hw/core/machine.c
index bdeeda68e4..cd55366f2e 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -25,6 +25,9 @@
 GlobalProperty hw_compat_3_1[] = {};
 const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
 
+GlobalProperty hw_compat_3_0[] = {};
+const size_t hw_compat_3_0_len = G_N_ELEMENTS(hw_compat_3_0);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 74d8a82f64..7b9271a7ff 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -112,6 +112,23 @@ struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX};
 GlobalProperty pc_compat_3_1[] = {};
 const size_t pc_compat_3_1_len = G_N_ELEMENTS(pc_compat_3_1);
 
+GlobalProperty pc_compat_3_0[] = {
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "x-hv-synic-kvm-only",
+        .value    = "on",
+    },{
+        .driver   = "Skylake-Server" "-" TYPE_X86_CPU,
+        .property = "pku",
+        .value    = "off",
+    },{
+        .driver   = "Skylake-Server-IBRS" "-" TYPE_X86_CPU,
+        .property = "pku",
+        .value    = "off",
+    },
+};
+const size_t pc_compat_3_0_len = G_N_ELEMENTS(pc_compat_3_0);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 5342019d83..c1a9a10911 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -452,12 +452,9 @@ DEFINE_I440FX_MACHINE(v3_1, "pc-i440fx-3.1", NULL,
 
 static void pc_i440fx_3_0_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_3_0
-    };
-
     pc_i440fx_3_1_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_3_0, hw_compat_3_0_len);
+    compat_props_add(m->compat_props, pc_compat_3_0, pc_compat_3_0_len);
 }
 
 DEFINE_I440FX_MACHINE(v3_0, "pc-i440fx-3.0", NULL,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 1eb1e82b25..231b1269d1 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -333,12 +333,9 @@ DEFINE_Q35_MACHINE(v3_1, "pc-q35-3.1", NULL,
 
 static void pc_q35_3_0_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_3_0
-    };
-
     pc_q35_3_1_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_3_0, hw_compat_3_0_len);
+    compat_props_add(m->compat_props, pc_compat_3_0, pc_compat_3_0_len);
 }
 
 DEFINE_Q35_MACHINE(v3_0, "pc-q35-3.0", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 038d1859a6..5c4c6be22f 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3978,12 +3978,9 @@ DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
 static void spapr_machine_3_0_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
-    static GlobalProperty compat[] = {
-        HW_COMPAT_3_0
-    };
 
     spapr_machine_3_1_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_3_0, hw_compat_3_0_len);
 
     smc->legacy_irq_allocation = true;
     smc->irq = &spapr_irq_xics_legacy;
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 5e8b48e75b..e54e6f6dd0 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -680,13 +680,10 @@ static void ccw_machine_3_0_instance_options(MachineState *machine)
 static void ccw_machine_3_0_class_options(MachineClass *mc)
 {
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
-    static GlobalProperty compat[] = {
-        HW_COMPAT_3_0
-    };
 
     s390mc->hpage_1m_allowed = false;
     ccw_machine_3_1_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_3_0, hw_compat_3_0_len);
 }
 DEFINE_CCW_MACHINE(3_0, "3.0", false);
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 08/28] compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (6 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 07/28] compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:52   ` Cornelia Huck
  2018-12-27  6:39   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 09/28] compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros Marc-André Lureau
                   ` (20 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +++
 include/hw/compat.h        | 27 ---------------------------
 include/hw/i386/pc.h       | 21 ++-------------------
 hw/arm/virt.c              |  5 +----
 hw/core/machine.c          | 29 +++++++++++++++++++++++++++++
 hw/i386/pc.c               | 21 +++++++++++++++++++++
 hw/i386/pc_piix.c          |  7 ++-----
 hw/i386/pc_q35.c           |  7 ++-----
 hw/ppc/spapr.c             |  2 +-
 hw/s390x/s390-virtio-ccw.c |  6 +-----
 10 files changed, 62 insertions(+), 66 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 6b94d36d6a..b06444ffed 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -293,4 +293,7 @@ extern const size_t hw_compat_3_1_len;
 extern GlobalProperty hw_compat_3_0[];
 extern const size_t hw_compat_3_0_len;
 
+extern GlobalProperty hw_compat_2_12[];
+extern const size_t hw_compat_2_12_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index c08f4040bb..13242b831a 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,33 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_12 \
-    {\
-        .driver   = "migration",\
-        .property = "decompress-error-check",\
-        .value    = "off",\
-    },{\
-        .driver   = "hda-audio",\
-        .property = "use-timer",\
-        .value    = "false",\
-    },{\
-        .driver   = "cirrus-vga",\
-        .property = "global-vmstate",\
-        .value    = "true",\
-    },{\
-        .driver   = "VGA",\
-        .property = "global-vmstate",\
-        .value    = "true",\
-    },{\
-        .driver   = "vmware-svga",\
-        .property = "global-vmstate",\
-        .value    = "true",\
-    },{\
-        .driver   = "qxl-vga",\
-        .property = "global-vmstate",\
-        .value    = "true",\
-    },
-
 #define HW_COMPAT_2_11 \
     {\
         .driver   = "hpet",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 197131ff9a..91cb3283f0 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -300,25 +300,8 @@ extern const size_t pc_compat_3_1_len;
 extern GlobalProperty pc_compat_3_0[];
 extern const size_t pc_compat_3_0_len;
 
-#define PC_COMPAT_2_12 \
-    HW_COMPAT_2_12 \
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "legacy-cache",\
-        .value    = "on",\
-    },{\
-        .driver   = TYPE_X86_CPU,\
-        .property = "topoext",\
-        .value    = "off",\
-    },{\
-        .driver   = "EPYC-" TYPE_X86_CPU,\
-        .property = "xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "EPYC-IBPB-" TYPE_X86_CPU,\
-        .property = "xlevel",\
-        .value    = stringify(0x8000000a),\
-    },
+extern GlobalProperty pc_compat_2_12[];
+extern const size_t pc_compat_2_12_len;
 
 #define PC_COMPAT_2_11 \
     HW_COMPAT_2_11 \
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index d226e7922e..1b39d9845b 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1889,12 +1889,9 @@ DEFINE_VIRT_MACHINE(3, 0)
 static void virt_machine_2_12_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_12
-    };
 
     virt_machine_3_0_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_12, hw_compat_2_12_len);
     vmc->no_highmem_ecam = true;
     mc->max_cpus = 255;
 }
diff --git a/hw/core/machine.c b/hw/core/machine.c
index cd55366f2e..447fe1db6b 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -28,6 +28,35 @@ const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
 GlobalProperty hw_compat_3_0[] = {};
 const size_t hw_compat_3_0_len = G_N_ELEMENTS(hw_compat_3_0);
 
+GlobalProperty hw_compat_2_12[] = {
+    {
+        .driver   = "migration",
+        .property = "decompress-error-check",
+        .value    = "off",
+    },{
+        .driver   = "hda-audio",
+        .property = "use-timer",
+        .value    = "false",
+    },{
+        .driver   = "cirrus-vga",
+        .property = "global-vmstate",
+        .value    = "true",
+    },{
+        .driver   = "VGA",
+        .property = "global-vmstate",
+        .value    = "true",
+    },{
+        .driver   = "vmware-svga",
+        .property = "global-vmstate",
+        .value    = "true",
+    },{
+        .driver   = "qxl-vga",
+        .property = "global-vmstate",
+        .value    = "true",
+    },
+};
+const size_t hw_compat_2_12_len = G_N_ELEMENTS(hw_compat_2_12);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 7b9271a7ff..84fe7e49af 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -129,6 +129,27 @@ GlobalProperty pc_compat_3_0[] = {
 };
 const size_t pc_compat_3_0_len = G_N_ELEMENTS(pc_compat_3_0);
 
+GlobalProperty pc_compat_2_12[] = {
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "legacy-cache",
+        .value    = "on",
+    },{
+        .driver   = TYPE_X86_CPU,
+        .property = "topoext",
+        .value    = "off",
+    },{
+        .driver   = "EPYC-" TYPE_X86_CPU,
+        .property = "xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "EPYC-IBPB-" TYPE_X86_CPU,
+        .property = "xlevel",
+        .value    = stringify(0x8000000a),
+    },
+};
+const size_t pc_compat_2_12_len = G_N_ELEMENTS(pc_compat_2_12);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index c1a9a10911..16dda48c56 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -462,12 +462,9 @@ DEFINE_I440FX_MACHINE(v3_0, "pc-i440fx-3.0", NULL,
 
 static void pc_i440fx_2_12_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_12
-    };
-
     pc_i440fx_3_0_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_12, hw_compat_2_12_len);
+    compat_props_add(m->compat_props, pc_compat_2_12, pc_compat_2_12_len);
 }
 
 DEFINE_I440FX_MACHINE(v2_12, "pc-i440fx-2.12", NULL,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 231b1269d1..86f08441d6 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -343,12 +343,9 @@ DEFINE_Q35_MACHINE(v3_0, "pc-q35-3.0", NULL,
 
 static void pc_q35_2_12_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_12
-    };
-
     pc_q35_3_0_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_12, hw_compat_2_12_len);
+    compat_props_add(m->compat_props, pc_compat_2_12, pc_compat_2_12_len);
 }
 
 DEFINE_Q35_MACHINE(v2_12, "pc-q35-2.12", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 5c4c6be22f..63453f688f 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3995,7 +3995,6 @@ static void spapr_machine_2_12_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_12
         {
             .driver = TYPE_POWERPC_CPU,
             .property = "pre-3.0-migration",
@@ -4009,6 +4008,7 @@ static void spapr_machine_2_12_class_options(MachineClass *mc)
     };
 
     spapr_machine_3_0_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_12, hw_compat_2_12_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 
     /* We depend on kvm_enabled() to choose a default value for the
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index e54e6f6dd0..ce22a9d511 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -696,12 +696,8 @@ static void ccw_machine_2_12_instance_options(MachineState *machine)
 
 static void ccw_machine_2_12_class_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_12
-    };
-
     ccw_machine_3_0_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_12, hw_compat_2_12_len);
 }
 DEFINE_CCW_MACHINE(2_12, "2.12", false);
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 09/28] compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (7 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 08/28] compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:53   ` Cornelia Huck
  2018-12-27  6:40   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 10/28] compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros Marc-André Lureau
                   ` (19 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +++
 include/hw/compat.h        | 19 -------------------
 include/hw/i386/pc.h       | 13 ++-----------
 hw/arm/virt.c              |  5 +----
 hw/core/machine.c          | 21 +++++++++++++++++++++
 hw/i386/pc.c               | 13 +++++++++++++
 hw/i386/pc_piix.c          |  7 ++-----
 hw/i386/pc_q35.c           |  7 ++-----
 hw/ppc/spapr.c             |  5 +----
 hw/s390x/s390-virtio-ccw.c |  2 +-
 10 files changed, 46 insertions(+), 49 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index b06444ffed..59c3c4b75e 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -296,4 +296,7 @@ extern const size_t hw_compat_3_0_len;
 extern GlobalProperty hw_compat_2_12[];
 extern const size_t hw_compat_2_12_len;
 
+extern GlobalProperty hw_compat_2_11[];
+extern const size_t hw_compat_2_11_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 13242b831a..cf389b4e85 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,25 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_11 \
-    {\
-        .driver   = "hpet",\
-        .property = "hpet-offset-saved",\
-        .value    = "false",\
-    },{\
-        .driver   = "virtio-blk-pci",\
-        .property = "vectors",\
-        .value    = "2",\
-    },{\
-        .driver   = "vhost-user-blk-pci",\
-        .property = "vectors",\
-        .value    = "2",\
-    },{\
-        .driver   = "e1000",\
-        .property = "migrate_tso_props",\
-        .value    = "off",\
-    },
-
 #define HW_COMPAT_2_10 \
     {\
         .driver   = "virtio-mouse-device",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 91cb3283f0..f0f7e76a3e 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -303,17 +303,8 @@ extern const size_t pc_compat_3_0_len;
 extern GlobalProperty pc_compat_2_12[];
 extern const size_t pc_compat_2_12_len;
 
-#define PC_COMPAT_2_11 \
-    HW_COMPAT_2_11 \
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "x-migrate-smi-count",\
-        .value    = "off",\
-    },{\
-        .driver   = "Skylake-Server" "-" TYPE_X86_CPU,\
-        .property = "clflushopt",\
-        .value    = "off",\
-    },
+extern GlobalProperty pc_compat_2_11[];
+extern const size_t pc_compat_2_11_len;
 
 #define PC_COMPAT_2_10 \
     HW_COMPAT_2_10 \
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 1b39d9845b..b7aabd4ac7 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1900,12 +1900,9 @@ DEFINE_VIRT_MACHINE(2, 12)
 static void virt_machine_2_11_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_11
-    };
 
     virt_machine_2_12_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_11, hw_compat_2_11_len);
     vmc->smbios_old_sys_ver = true;
 }
 DEFINE_VIRT_MACHINE(2, 11)
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 447fe1db6b..e8f715542a 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -57,6 +57,27 @@ GlobalProperty hw_compat_2_12[] = {
 };
 const size_t hw_compat_2_12_len = G_N_ELEMENTS(hw_compat_2_12);
 
+GlobalProperty hw_compat_2_11[] = {
+    {
+        .driver   = "hpet",
+        .property = "hpet-offset-saved",
+        .value    = "false",
+    },{
+        .driver   = "virtio-blk-pci",
+        .property = "vectors",
+        .value    = "2",
+    },{
+        .driver   = "vhost-user-blk-pci",
+        .property = "vectors",
+        .value    = "2",
+    },{
+        .driver   = "e1000",
+        .property = "migrate_tso_props",
+        .value    = "off",
+    },
+};
+const size_t hw_compat_2_11_len = G_N_ELEMENTS(hw_compat_2_11);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 84fe7e49af..e42a1eae51 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -150,6 +150,19 @@ GlobalProperty pc_compat_2_12[] = {
 };
 const size_t pc_compat_2_12_len = G_N_ELEMENTS(pc_compat_2_12);
 
+GlobalProperty pc_compat_2_11[] = {
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "x-migrate-smi-count",
+        .value    = "off",
+    },{
+        .driver   = "Skylake-Server" "-" TYPE_X86_CPU,
+        .property = "clflushopt",
+        .value    = "off",
+    },
+};
+const size_t pc_compat_2_11_len = G_N_ELEMENTS(pc_compat_2_11);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 16dda48c56..32daebc05e 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -472,12 +472,9 @@ DEFINE_I440FX_MACHINE(v2_12, "pc-i440fx-2.12", NULL,
 
 static void pc_i440fx_2_11_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_11
-    };
-
     pc_i440fx_2_12_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_11, hw_compat_2_11_len);
+    compat_props_add(m->compat_props, pc_compat_2_11, pc_compat_2_11_len);
 }
 
 DEFINE_I440FX_MACHINE(v2_11, "pc-i440fx-2.11", NULL,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 86f08441d6..bc195b8c58 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -354,14 +354,11 @@ DEFINE_Q35_MACHINE(v2_12, "pc-q35-2.12", NULL,
 static void pc_q35_2_11_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_11
-    };
-
 
     pc_q35_2_12_machine_options(m);
     pcmc->default_nic_model = "e1000";
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_11, hw_compat_2_11_len);
+    compat_props_add(m->compat_props, pc_compat_2_11, pc_compat_2_11_len);
 }
 
 DEFINE_Q35_MACHINE(v2_11, "pc-q35-2.11", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 63453f688f..88e2c8df71 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4040,13 +4040,10 @@ DEFINE_SPAPR_MACHINE(2_12_sxxm, "2.12-sxxm", false);
 static void spapr_machine_2_11_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_11
-    };
 
     spapr_machine_2_12_class_options(mc);
     smc->default_caps.caps[SPAPR_CAP_HTM] = SPAPR_CAP_ON;
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_11, hw_compat_2_11_len);
 }
 
 DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index ce22a9d511..74623becaf 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -713,7 +713,6 @@ static void ccw_machine_2_11_instance_options(MachineState *machine)
 static void ccw_machine_2_11_class_options(MachineClass *mc)
 {
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_11
         {
             .driver   = TYPE_SCLP_EVENT_FACILITY,
             .property = "allow_all_mask_sizes",
@@ -722,6 +721,7 @@ static void ccw_machine_2_11_class_options(MachineClass *mc)
     };
 
     ccw_machine_2_12_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_11, hw_compat_2_11_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_11, "2.11", false);
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 10/28] compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (8 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 09/28] compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:55   ` Cornelia Huck
  2018-12-27  6:41   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 11/28] compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros Marc-André Lureau
                   ` (18 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +++
 include/hw/compat.h        | 11 -----------
 include/hw/i386/pc.h       | 17 ++---------------
 hw/arm/virt.c              |  6 +-----
 hw/core/machine.c          | 13 +++++++++++++
 hw/i386/pc.c               | 17 +++++++++++++++++
 hw/i386/pc_piix.c          |  7 ++-----
 hw/i386/pc_q35.c           |  7 ++-----
 hw/ppc/spapr.c             |  6 +-----
 hw/s390x/s390-virtio-ccw.c |  6 +-----
 10 files changed, 42 insertions(+), 51 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 59c3c4b75e..f701b66183 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -299,4 +299,7 @@ extern const size_t hw_compat_2_12_len;
 extern GlobalProperty hw_compat_2_11[];
 extern const size_t hw_compat_2_11_len;
 
+extern GlobalProperty hw_compat_2_10[];
+extern const size_t hw_compat_2_10_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index cf389b4e85..f414786604 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,17 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_10 \
-    {\
-        .driver   = "virtio-mouse-device",\
-        .property = "wheel-axis",\
-        .value    = "false",\
-    },{\
-        .driver   = "virtio-tablet-device",\
-        .property = "wheel-axis",\
-        .value    = "false",\
-    },
-
 #define HW_COMPAT_2_9 \
     {\
         .driver   = "pci-bridge",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index f0f7e76a3e..d77843a711 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -306,21 +306,8 @@ extern const size_t pc_compat_2_12_len;
 extern GlobalProperty pc_compat_2_11[];
 extern const size_t pc_compat_2_11_len;
 
-#define PC_COMPAT_2_10 \
-    HW_COMPAT_2_10 \
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "x-hv-max-vps",\
-        .value    = "0x40",\
-    },{\
-        .driver   = "i440FX-pcihost",\
-        .property = "x-pci-hole64-fix",\
-        .value    = "off",\
-    },{\
-        .driver   = "q35-pcihost",\
-        .property = "x-pci-hole64-fix",\
-        .value    = "off",\
-    },
+extern GlobalProperty pc_compat_2_10[];
+extern const size_t pc_compat_2_10_len;
 
 #define PC_COMPAT_2_9 \
     HW_COMPAT_2_9 \
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index b7aabd4ac7..e382bdfd96 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1909,12 +1909,8 @@ DEFINE_VIRT_MACHINE(2, 11)
 
 static void virt_machine_2_10_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_10
-    };
-
     virt_machine_2_11_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_10, hw_compat_2_10_len);
     /* before 2.11 we never faulted accesses to bad addresses */
     mc->ignore_memory_transaction_failures = true;
 }
diff --git a/hw/core/machine.c b/hw/core/machine.c
index e8f715542a..7ab83bf4e2 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -78,6 +78,19 @@ GlobalProperty hw_compat_2_11[] = {
 };
 const size_t hw_compat_2_11_len = G_N_ELEMENTS(hw_compat_2_11);
 
+GlobalProperty hw_compat_2_10[] = {
+    {
+        .driver   = "virtio-mouse-device",
+        .property = "wheel-axis",
+        .value    = "false",
+    },{
+        .driver   = "virtio-tablet-device",
+        .property = "wheel-axis",
+        .value    = "false",
+    },
+};
+const size_t hw_compat_2_10_len = G_N_ELEMENTS(hw_compat_2_10);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index e42a1eae51..71b3b2e1d8 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -163,6 +163,23 @@ GlobalProperty pc_compat_2_11[] = {
 };
 const size_t pc_compat_2_11_len = G_N_ELEMENTS(pc_compat_2_11);
 
+GlobalProperty pc_compat_2_10[] = {
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "x-hv-max-vps",
+        .value    = "0x40",
+    },{
+        .driver   = "i440FX-pcihost",
+        .property = "x-pci-hole64-fix",
+        .value    = "off",
+    },{
+        .driver   = "q35-pcihost",
+        .property = "x-pci-hole64-fix",
+        .value    = "off",
+    },
+};
+const size_t pc_compat_2_10_len = G_N_ELEMENTS(pc_compat_2_10);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 32daebc05e..d3e795de20 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -482,12 +482,9 @@ DEFINE_I440FX_MACHINE(v2_11, "pc-i440fx-2.11", NULL,
 
 static void pc_i440fx_2_10_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_10
-    };
-
     pc_i440fx_2_11_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_10, hw_compat_2_10_len);
+    compat_props_add(m->compat_props, pc_compat_2_10, pc_compat_2_10_len);
     m->auto_enable_numa_with_memhp = false;
 }
 
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index bc195b8c58..8d708cd163 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -366,12 +366,9 @@ DEFINE_Q35_MACHINE(v2_11, "pc-q35-2.11", NULL,
 
 static void pc_q35_2_10_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_10
-    };
-
     pc_q35_2_11_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_10, hw_compat_2_10_len);
+    compat_props_add(m->compat_props, pc_compat_2_10, pc_compat_2_10_len);
     m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
     m->auto_enable_numa_with_memhp = false;
 }
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 88e2c8df71..10e91d857c 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4054,12 +4054,8 @@ DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
 
 static void spapr_machine_2_10_class_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_10
-    };
-
     spapr_machine_2_11_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_10, hw_compat_2_10_len);
 }
 
 DEFINE_SPAPR_MACHINE(2_10, "2.10", false);
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 74623becaf..95ad7ba842 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -733,12 +733,8 @@ static void ccw_machine_2_10_instance_options(MachineState *machine)
 
 static void ccw_machine_2_10_class_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_10
-    };
-
     ccw_machine_2_11_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_10, hw_compat_2_10_len);
 }
 DEFINE_CCW_MACHINE(2_10, "2.10", false);
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 11/28] compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (9 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 10/28] compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:56   ` Cornelia Huck
  2018-12-27  6:44   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 12/28] compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros Marc-André Lureau
                   ` (17 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +++
 include/hw/compat.h        | 19 -------------------
 include/hw/i386/pc.h       |  9 ++-------
 hw/arm/virt.c              |  6 +-----
 hw/core/machine.c          | 21 +++++++++++++++++++++
 hw/i386/pc.c               |  9 +++++++++
 hw/i386/pc_piix.c          |  7 ++-----
 hw/i386/pc_q35.c           |  7 ++-----
 hw/ppc/spapr.c             |  2 +-
 hw/s390x/s390-virtio-ccw.c |  2 +-
 10 files changed, 42 insertions(+), 43 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index f701b66183..226d6cfaa7 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -302,4 +302,7 @@ extern const size_t hw_compat_2_11_len;
 extern GlobalProperty hw_compat_2_10[];
 extern const size_t hw_compat_2_10_len;
 
+extern GlobalProperty hw_compat_2_9[];
+extern const size_t hw_compat_2_9_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index f414786604..ef154ca470 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,25 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_9 \
-    {\
-        .driver   = "pci-bridge",\
-        .property = "shpc",\
-        .value    = "off",\
-    },{\
-        .driver   = "intel-iommu",\
-        .property = "pt",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-net-device",\
-        .property = "x-mtu-bypass-backend",\
-        .value    = "off",\
-    },{\
-        .driver   = "pcie-root-port",\
-        .property = "x-migrate-msix",\
-        .value    = "false",\
-    },
-
 #define HW_COMPAT_2_8 \
     {\
         .driver   = "fw_cfg_mem",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index d77843a711..fb79f0b988 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -309,13 +309,8 @@ extern const size_t pc_compat_2_11_len;
 extern GlobalProperty pc_compat_2_10[];
 extern const size_t pc_compat_2_10_len;
 
-#define PC_COMPAT_2_9 \
-    HW_COMPAT_2_9 \
-    {\
-        .driver   = "mch",\
-        .property = "extended-tseg-mbytes",\
-        .value    = stringify(0),\
-    },\
+extern GlobalProperty pc_compat_2_9[];
+extern const size_t pc_compat_2_9_len;
 
 #define PC_COMPAT_2_8 \
     HW_COMPAT_2_8 \
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index e382bdfd96..2db46567bb 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1918,12 +1918,8 @@ DEFINE_VIRT_MACHINE(2, 10)
 
 static void virt_machine_2_9_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_9
-    };
-
     virt_machine_2_10_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_9, hw_compat_2_9_len);
 }
 DEFINE_VIRT_MACHINE(2, 9)
 
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 7ab83bf4e2..2d7e774a5d 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -91,6 +91,27 @@ GlobalProperty hw_compat_2_10[] = {
 };
 const size_t hw_compat_2_10_len = G_N_ELEMENTS(hw_compat_2_10);
 
+GlobalProperty hw_compat_2_9[] = {
+    {
+        .driver   = "pci-bridge",
+        .property = "shpc",
+        .value    = "off",
+    },{
+        .driver   = "intel-iommu",
+        .property = "pt",
+        .value    = "off",
+    },{
+        .driver   = "virtio-net-device",
+        .property = "x-mtu-bypass-backend",
+        .value    = "off",
+    },{
+        .driver   = "pcie-root-port",
+        .property = "x-migrate-msix",
+        .value    = "false",
+    },
+};
+const size_t hw_compat_2_9_len = G_N_ELEMENTS(hw_compat_2_9);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 71b3b2e1d8..f36cc5f79c 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -180,6 +180,15 @@ GlobalProperty pc_compat_2_10[] = {
 };
 const size_t pc_compat_2_10_len = G_N_ELEMENTS(pc_compat_2_10);
 
+GlobalProperty pc_compat_2_9[] = {
+    {
+        .driver   = "mch",
+        .property = "extended-tseg-mbytes",
+        .value    = stringify(0),
+    },
+};
+const size_t pc_compat_2_9_len = G_N_ELEMENTS(pc_compat_2_9);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index d3e795de20..5bc3ad0331 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -493,12 +493,9 @@ DEFINE_I440FX_MACHINE(v2_10, "pc-i440fx-2.10", NULL,
 
 static void pc_i440fx_2_9_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_9
-    };
-
     pc_i440fx_2_10_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_9, hw_compat_2_9_len);
+    compat_props_add(m->compat_props, pc_compat_2_9, pc_compat_2_9_len);
     m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
 }
 
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 8d708cd163..4e57830a6d 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -378,12 +378,9 @@ DEFINE_Q35_MACHINE(v2_10, "pc-q35-2.10", NULL,
 
 static void pc_q35_2_9_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_9
-    };
-
     pc_q35_2_10_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_9, hw_compat_2_9_len);
+    compat_props_add(m->compat_props, pc_compat_2_9, pc_compat_2_9_len);
 }
 
 DEFINE_Q35_MACHINE(v2_9, "pc-q35-2.9", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 10e91d857c..7aa3a09ed4 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4068,7 +4068,6 @@ static void spapr_machine_2_9_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_9
         {
             .driver = TYPE_POWERPC_CPU,
             .property = "pre-2.10-migration",
@@ -4077,6 +4076,7 @@ static void spapr_machine_2_9_class_options(MachineClass *mc)
     };
 
     spapr_machine_2_10_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_9, hw_compat_2_9_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     mc->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
     smc->pre_2_10_has_unused_icps = true;
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 95ad7ba842..549f6e0231 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -752,7 +752,6 @@ static void ccw_machine_2_9_class_options(MachineClass *mc)
 {
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_9
         {
             .driver   = TYPE_S390_STATTRIB,
             .property = "migration-enabled",
@@ -761,6 +760,7 @@ static void ccw_machine_2_9_class_options(MachineClass *mc)
     };
 
     ccw_machine_2_10_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_9, hw_compat_2_9_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     s390mc->css_migration_enabled = false;
 }
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 12/28] compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (10 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 11/28] compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 12:58   ` Cornelia Huck
  2018-12-27  6:45   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 13/28] compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros Marc-André Lureau
                   ` (16 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +++
 include/hw/compat.h        | 43 -----------------------------------
 include/hw/i386/pc.h       | 29 ++----------------------
 hw/arm/virt.c              |  5 +----
 hw/core/machine.c          | 46 ++++++++++++++++++++++++++++++++++++++
 hw/i386/pc.c               | 29 ++++++++++++++++++++++++
 hw/i386/pc_piix.c          |  7 ++----
 hw/i386/pc_q35.c           |  7 ++----
 hw/ppc/spapr.c             |  2 +-
 hw/s390x/s390-virtio-ccw.c |  2 +-
 10 files changed, 87 insertions(+), 86 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 226d6cfaa7..f8aa034d0e 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -305,4 +305,7 @@ extern const size_t hw_compat_2_10_len;
 extern GlobalProperty hw_compat_2_9[];
 extern const size_t hw_compat_2_9_len;
 
+extern GlobalProperty hw_compat_2_8[];
+extern const size_t hw_compat_2_8_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index ef154ca470..65d6748054 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,49 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_8 \
-    {\
-        .driver   = "fw_cfg_mem",\
-        .property = "x-file-slots",\
-        .value    = stringify(0x10),\
-    },{\
-        .driver   = "fw_cfg_io",\
-        .property = "x-file-slots",\
-        .value    = stringify(0x10),\
-    },{\
-        .driver   = "pflash_cfi01",\
-        .property = "old-multiple-chip-handling",\
-        .value    = "on",\
-    },{\
-        .driver   = "pci-bridge",\
-        .property = "shpc",\
-        .value    = "on",\
-    },{\
-        .driver   = TYPE_PCI_DEVICE,\
-        .property = "x-pcie-extcap-init",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-pci",\
-        .property = "x-pcie-deverr-init",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-pci",\
-        .property = "x-pcie-lnkctl-init",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-pci",\
-        .property = "x-pcie-pm-init",\
-        .value    = "off",\
-    },{\
-        .driver   = "cirrus-vga",\
-        .property = "vgamem_mb",\
-        .value    = "8",\
-    },{\
-        .driver   = "isa-cirrus-vga",\
-        .property = "vgamem_mb",\
-        .value    = "8",\
-    },
-
 #define HW_COMPAT_2_7 \
     {\
         .driver   = "virtio-pci",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index fb79f0b988..12c47d2506 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -312,33 +312,8 @@ extern const size_t pc_compat_2_10_len;
 extern GlobalProperty pc_compat_2_9[];
 extern const size_t pc_compat_2_9_len;
 
-#define PC_COMPAT_2_8 \
-    HW_COMPAT_2_8 \
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "tcg-cpuid",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "kvmclock",\
-        .property = "x-mach-use-reliable-get-clock",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "ICH9-LPC",\
-        .property = "x-smi-broadcast",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "vmware-cpuid-freq",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "Haswell-" TYPE_X86_CPU,\
-        .property = "stepping",\
-        .value    = "1",\
-    },
+extern GlobalProperty pc_compat_2_8[];
+extern const size_t pc_compat_2_8_len;
 
 #define PC_COMPAT_2_7 \
     HW_COMPAT_2_7 \
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 2db46567bb..850a02cf43 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1926,12 +1926,9 @@ DEFINE_VIRT_MACHINE(2, 9)
 static void virt_machine_2_8_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_8
-    };
 
     virt_machine_2_9_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_8, hw_compat_2_8_len);
     /* For 2.8 and earlier we falsely claimed in the DT that
      * our timers were edge-triggered, not level-triggered.
      */
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 2d7e774a5d..b3ea5bd777 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -21,6 +21,7 @@
 #include "sysemu/numa.h"
 #include "qemu/error-report.h"
 #include "sysemu/qtest.h"
+#include "hw/pci/pci.h"
 
 GlobalProperty hw_compat_3_1[] = {};
 const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
@@ -112,6 +113,51 @@ GlobalProperty hw_compat_2_9[] = {
 };
 const size_t hw_compat_2_9_len = G_N_ELEMENTS(hw_compat_2_9);
 
+GlobalProperty hw_compat_2_8[] = {
+    {
+        .driver   = "fw_cfg_mem",
+        .property = "x-file-slots",
+        .value    = stringify(0x10),
+    },{
+        .driver   = "fw_cfg_io",
+        .property = "x-file-slots",
+        .value    = stringify(0x10),
+    },{
+        .driver   = "pflash_cfi01",
+        .property = "old-multiple-chip-handling",
+        .value    = "on",
+    },{
+        .driver   = "pci-bridge",
+        .property = "shpc",
+        .value    = "on",
+    },{
+        .driver   = TYPE_PCI_DEVICE,
+        .property = "x-pcie-extcap-init",
+        .value    = "off",
+    },{
+        .driver   = "virtio-pci",
+        .property = "x-pcie-deverr-init",
+        .value    = "off",
+    },{
+        .driver   = "virtio-pci",
+        .property = "x-pcie-lnkctl-init",
+        .value    = "off",
+    },{
+        .driver   = "virtio-pci",
+        .property = "x-pcie-pm-init",
+        .value    = "off",
+    },{
+        .driver   = "cirrus-vga",
+        .property = "vgamem_mb",
+        .value    = "8",
+    },{
+        .driver   = "isa-cirrus-vga",
+        .property = "vgamem_mb",
+        .value    = "8",
+    },
+};
+const size_t hw_compat_2_8_len = G_N_ELEMENTS(hw_compat_2_8);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index f36cc5f79c..517ead567c 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -189,6 +189,35 @@ GlobalProperty pc_compat_2_9[] = {
 };
 const size_t pc_compat_2_9_len = G_N_ELEMENTS(pc_compat_2_9);
 
+GlobalProperty pc_compat_2_8[] = {
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "tcg-cpuid",
+        .value    = "off",
+    },
+    {
+        .driver   = "kvmclock",
+        .property = "x-mach-use-reliable-get-clock",
+        .value    = "off",
+    },
+    {
+        .driver   = "ICH9-LPC",
+        .property = "x-smi-broadcast",
+        .value    = "off",
+    },
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "vmware-cpuid-freq",
+        .value    = "off",
+    },
+    {
+        .driver   = "Haswell-" TYPE_X86_CPU,
+        .property = "stepping",
+        .value    = "1",
+    },
+};
+const size_t pc_compat_2_8_len = G_N_ELEMENTS(pc_compat_2_8);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 5bc3ad0331..deb5500624 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -504,12 +504,9 @@ DEFINE_I440FX_MACHINE(v2_9, "pc-i440fx-2.9", NULL,
 
 static void pc_i440fx_2_8_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_8
-    };
-
     pc_i440fx_2_9_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_8, hw_compat_2_8_len);
+    compat_props_add(m->compat_props, pc_compat_2_8, pc_compat_2_8_len);
 }
 
 DEFINE_I440FX_MACHINE(v2_8, "pc-i440fx-2.8", NULL,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 4e57830a6d..57b46e1ecb 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -388,12 +388,9 @@ DEFINE_Q35_MACHINE(v2_9, "pc-q35-2.9", NULL,
 
 static void pc_q35_2_8_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_8
-    };
-
     pc_q35_2_9_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_8, hw_compat_2_8_len);
+    compat_props_add(m->compat_props, pc_compat_2_8, pc_compat_2_8_len);
 }
 
 DEFINE_Q35_MACHINE(v2_8, "pc-q35-2.8", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 7aa3a09ed4..d2e46362fb 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4092,7 +4092,6 @@ DEFINE_SPAPR_MACHINE(2_9, "2.9", false);
 static void spapr_machine_2_8_class_options(MachineClass *mc)
 {
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_8
         {
             .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
             .property = "pcie-extended-configuration-space",
@@ -4101,6 +4100,7 @@ static void spapr_machine_2_8_class_options(MachineClass *mc)
     };
 
     spapr_machine_2_9_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_8, hw_compat_2_8_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     mc->numa_mem_align_shift = 23;
 }
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 549f6e0231..22e96ab353 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -774,7 +774,6 @@ static void ccw_machine_2_8_instance_options(MachineState *machine)
 static void ccw_machine_2_8_class_options(MachineClass *mc)
 {
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_8
         {
             .driver   = TYPE_S390_FLIC_COMMON,
             .property = "adapter_routes_max_batch",
@@ -783,6 +782,7 @@ static void ccw_machine_2_8_class_options(MachineClass *mc)
     };
 
     ccw_machine_2_9_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_8, hw_compat_2_8_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_8, "2.8", false);
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 13/28] compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (11 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 12/28] compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 13:00   ` Cornelia Huck
  2018-12-27  6:47   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 14/28] compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros Marc-André Lureau
                   ` (15 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +++
 include/hw/compat.h        | 23 -----------------------
 include/hw/i386/pc.h       | 34 ++--------------------------------
 hw/arm/virt.c              |  5 +----
 hw/core/machine.c          | 25 +++++++++++++++++++++++++
 hw/i386/pc.c               | 34 ++++++++++++++++++++++++++++++++++
 hw/i386/pc_piix.c          |  7 ++-----
 hw/i386/pc_q35.c           |  7 ++-----
 hw/ppc/spapr.c             |  2 +-
 hw/s390x/s390-virtio-ccw.c |  5 +----
 10 files changed, 71 insertions(+), 74 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index f8aa034d0e..611b34b26a 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -308,4 +308,7 @@ extern const size_t hw_compat_2_9_len;
 extern GlobalProperty hw_compat_2_8[];
 extern const size_t hw_compat_2_8_len;
 
+extern GlobalProperty hw_compat_2_7[];
+extern const size_t hw_compat_2_7_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 65d6748054..7ceab17401 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,29 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_7 \
-    {\
-        .driver   = "virtio-pci",\
-        .property = "page-per-vq",\
-        .value    = "on",\
-    },{\
-        .driver   = "virtio-serial-device",\
-        .property = "emergency-write",\
-        .value    = "off",\
-    },{\
-        .driver   = "ioapic",\
-        .property = "version",\
-        .value    = "0x11",\
-    },{\
-        .driver   = "intel-iommu",\
-        .property = "x-buggy-eim",\
-        .value    = "true",\
-    },{\
-        .driver   = "virtio-pci",\
-        .property = "x-ignore-backend-features",\
-        .value    = "on",\
-    },
-
 #define HW_COMPAT_2_6 \
     {\
         .driver   = "virtio-mmio",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 12c47d2506..504fbc79a9 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -315,38 +315,8 @@ extern const size_t pc_compat_2_9_len;
 extern GlobalProperty pc_compat_2_8[];
 extern const size_t pc_compat_2_8_len;
 
-#define PC_COMPAT_2_7 \
-    HW_COMPAT_2_7 \
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "l3-cache",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "full-cpuid-auto-level",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
-        .property = "family",\
-        .value    = "15",\
-    },\
-    {\
-        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
-        .property = "model",\
-        .value    = "6",\
-    },\
-    {\
-        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
-        .property = "stepping",\
-        .value    = "1",\
-    },\
-    {\
-        .driver   = "isa-pcspk",\
-        .property = "migrate",\
-        .value    = "off",\
-    },
+extern GlobalProperty pc_compat_2_7[];
+extern const size_t pc_compat_2_7_len;
 
 #define PC_COMPAT_2_6 \
     HW_COMPAT_2_6 \
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 850a02cf43..e01d19e5e1 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1939,12 +1939,9 @@ DEFINE_VIRT_MACHINE(2, 8)
 static void virt_machine_2_7_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_7
-    };
 
     virt_machine_2_8_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_7, hw_compat_2_7_len);
     /* ITS was introduced with 2.8 */
     vmc->no_its = true;
     /* Stick with 1K pages for migration compatibility */
diff --git a/hw/core/machine.c b/hw/core/machine.c
index b3ea5bd777..92f4c71354 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -158,6 +158,31 @@ GlobalProperty hw_compat_2_8[] = {
 };
 const size_t hw_compat_2_8_len = G_N_ELEMENTS(hw_compat_2_8);
 
+GlobalProperty hw_compat_2_7[] = {
+    {
+        .driver   = "virtio-pci",
+        .property = "page-per-vq",
+        .value    = "on",
+    },{
+        .driver   = "virtio-serial-device",
+        .property = "emergency-write",
+        .value    = "off",
+    },{
+        .driver   = "ioapic",
+        .property = "version",
+        .value    = "0x11",
+    },{
+        .driver   = "intel-iommu",
+        .property = "x-buggy-eim",
+        .value    = "true",
+    },{
+        .driver   = "virtio-pci",
+        .property = "x-ignore-backend-features",
+        .value    = "on",
+    },
+};
+const size_t hw_compat_2_7_len = G_N_ELEMENTS(hw_compat_2_7);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 517ead567c..96c64ccc4f 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -218,6 +218,40 @@ GlobalProperty pc_compat_2_8[] = {
 };
 const size_t pc_compat_2_8_len = G_N_ELEMENTS(pc_compat_2_8);
 
+GlobalProperty pc_compat_2_7[] = {
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "l3-cache",
+        .value    = "off",
+    },
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "full-cpuid-auto-level",
+        .value    = "off",
+    },
+    {
+        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,
+        .property = "family",
+        .value    = "15",
+    },
+    {
+        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,
+        .property = "model",
+        .value    = "6",
+    },
+    {
+        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,
+        .property = "stepping",
+        .value    = "1",
+    },
+    {
+        .driver   = "isa-pcspk",
+        .property = "migrate",
+        .value    = "off",
+    },
+};
+const size_t pc_compat_2_7_len = G_N_ELEMENTS(pc_compat_2_7);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index deb5500624..b956b4abe0 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -514,12 +514,9 @@ DEFINE_I440FX_MACHINE(v2_8, "pc-i440fx-2.8", NULL,
 
 static void pc_i440fx_2_7_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_7
-    };
-
     pc_i440fx_2_8_machine_options(m);
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_7, hw_compat_2_7_len);
+    compat_props_add(m->compat_props, pc_compat_2_7, pc_compat_2_7_len);
 }
 
 DEFINE_I440FX_MACHINE(v2_7, "pc-i440fx-2.7", NULL,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 57b46e1ecb..e321f14cb5 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -398,13 +398,10 @@ DEFINE_Q35_MACHINE(v2_8, "pc-q35-2.8", NULL,
 
 static void pc_q35_2_7_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_7
-    };
-
     pc_q35_2_8_machine_options(m);
     m->max_cpus = 255;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_7, hw_compat_2_7_len);
+    compat_props_add(m->compat_props, pc_compat_2_7, pc_compat_2_7_len);
 }
 
 DEFINE_Q35_MACHINE(v2_7, "pc-q35-2.7", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index d2e46362fb..445996c0b4 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4164,7 +4164,6 @@ static void spapr_machine_2_7_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_7
         {
             .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
             .property = "mem_win_size",
@@ -4190,6 +4189,7 @@ static void spapr_machine_2_7_class_options(MachineClass *mc)
     spapr_machine_2_8_class_options(mc);
     mc->default_cpu_type = POWERPC_CPU_TYPE_NAME("power7_v2.3");
     mc->default_machine_opts = "modern-hotplug-events=off";
+    compat_props_add(mc->compat_props, hw_compat_2_7, hw_compat_2_7_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     smc->phb_placement = phb_placement_2_7;
 }
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 22e96ab353..f28feedd4b 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -795,13 +795,10 @@ static void ccw_machine_2_7_instance_options(MachineState *machine)
 static void ccw_machine_2_7_class_options(MachineClass *mc)
 {
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_7
-    };
 
     s390mc->cpu_model_allowed = false;
     ccw_machine_2_8_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_7, hw_compat_2_7_len);
 }
 DEFINE_CCW_MACHINE(2_7, "2.7", false);
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 14/28] compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (12 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 13/28] compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 13:03   ` Cornelia Huck
  2018-12-27  6:48   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 15/28] compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros Marc-André Lureau
                   ` (14 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +++
 include/hw/compat.h        | 15 ---------------
 include/hw/i386/pc.h       | 23 ++---------------------
 hw/arm/virt.c              |  5 +----
 hw/core/machine.c          | 17 +++++++++++++++++
 hw/i386/pc.c               | 23 +++++++++++++++++++++++
 hw/i386/pc_piix.c          |  6 ++----
 hw/i386/pc_q35.c           |  6 ++----
 hw/ppc/spapr.c             |  2 +-
 hw/s390x/s390-virtio-ccw.c |  2 +-
 10 files changed, 52 insertions(+), 50 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 611b34b26a..a9d413cdb7 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -311,4 +311,7 @@ extern const size_t hw_compat_2_8_len;
 extern GlobalProperty hw_compat_2_7[];
 extern const size_t hw_compat_2_7_len;
 
+extern GlobalProperty hw_compat_2_6[];
+extern const size_t hw_compat_2_6_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 7ceab17401..c744233fb6 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,21 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_6 \
-    {\
-        .driver   = "virtio-mmio",\
-        .property = "format_transport_address",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-pci",\
-        .property = "disable-modern",\
-        .value    = "on",\
-    },{\
-        .driver   = "virtio-pci",\
-        .property = "disable-legacy",\
-        .value    = "off",\
-    },
-
 #define HW_COMPAT_2_5 \
     {\
         .driver   = "isa-fdc",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 504fbc79a9..ca62def2c9 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -318,27 +318,8 @@ extern const size_t pc_compat_2_8_len;
 extern GlobalProperty pc_compat_2_7[];
 extern const size_t pc_compat_2_7_len;
 
-#define PC_COMPAT_2_6 \
-    HW_COMPAT_2_6 \
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "cpuid-0xb",\
-        .value    = "off",\
-    },{\
-        .driver   = "vmxnet3",\
-        .property = "romfile",\
-        .value    = "",\
-    },\
-    {\
-        .driver = TYPE_X86_CPU,\
-        .property = "fill-mtrr-mask",\
-        .value = "off",\
-    },\
-    {\
-        .driver   = "apic-common",\
-        .property = "legacy-instance-id",\
-        .value    = "on",\
-    },
+extern GlobalProperty pc_compat_2_6[];
+extern const size_t pc_compat_2_6_len;
 
 #define PC_COMPAT_2_5 \
     HW_COMPAT_2_5
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index e01d19e5e1..5fe2eebb02 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1952,12 +1952,9 @@ DEFINE_VIRT_MACHINE(2, 7)
 static void virt_machine_2_6_options(MachineClass *mc)
 {
     VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_6
-    };
 
     virt_machine_2_7_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_6, hw_compat_2_6_len);
     vmc->disallow_affinity_adjustment = true;
     /* Disable PMU for 2.6 as PMU support was first introduced in 2.7 */
     vmc->no_pmu = true;
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 92f4c71354..5f1af02c86 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -183,6 +183,23 @@ GlobalProperty hw_compat_2_7[] = {
 };
 const size_t hw_compat_2_7_len = G_N_ELEMENTS(hw_compat_2_7);
 
+GlobalProperty hw_compat_2_6[] = {
+    {
+        .driver   = "virtio-mmio",
+        .property = "format_transport_address",
+        .value    = "off",
+    },{
+        .driver   = "virtio-pci",
+        .property = "disable-modern",
+        .value    = "on",
+    },{
+        .driver   = "virtio-pci",
+        .property = "disable-legacy",
+        .value    = "off",
+    },
+};
+const size_t hw_compat_2_6_len = G_N_ELEMENTS(hw_compat_2_6);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 96c64ccc4f..f719115f17 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -252,6 +252,29 @@ GlobalProperty pc_compat_2_7[] = {
 };
 const size_t pc_compat_2_7_len = G_N_ELEMENTS(pc_compat_2_7);
 
+GlobalProperty pc_compat_2_6[] = {
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "cpuid-0xb",
+        .value    = "off",
+    },{
+        .driver   = "vmxnet3",
+        .property = "romfile",
+        .value    = "",
+    },
+    {
+        .driver = TYPE_X86_CPU,
+        .property = "fill-mtrr-mask",
+        .value = "off",
+    },
+    {
+        .driver   = "apic-common",
+        .property = "legacy-instance-id",
+        .value    = "on",
+    }
+};
+const size_t pc_compat_2_6_len = G_N_ELEMENTS(pc_compat_2_6);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index b956b4abe0..5f3dc8a809 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -525,14 +525,12 @@ DEFINE_I440FX_MACHINE(v2_7, "pc-i440fx-2.7", NULL,
 static void pc_i440fx_2_6_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_6
-    };
 
     pc_i440fx_2_7_machine_options(m);
     pcmc->legacy_cpu_hotplug = true;
     pcmc->linuxboot_dma_enabled = false;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_6, hw_compat_2_6_len);
+    compat_props_add(m->compat_props, pc_compat_2_6, pc_compat_2_6_len);
 }
 
 DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6", NULL,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index e321f14cb5..063df36cad 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -410,14 +410,12 @@ DEFINE_Q35_MACHINE(v2_7, "pc-q35-2.7", NULL,
 static void pc_q35_2_6_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_6
-    };
 
     pc_q35_2_7_machine_options(m);
     pcmc->legacy_cpu_hotplug = true;
     pcmc->linuxboot_dma_enabled = false;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_6, hw_compat_2_6_len);
+    compat_props_add(m->compat_props, pc_compat_2_6, pc_compat_2_6_len);
 }
 
 DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 445996c0b4..797f480564 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4203,7 +4203,6 @@ DEFINE_SPAPR_MACHINE(2_7, "2.7", false);
 static void spapr_machine_2_6_class_options(MachineClass *mc)
 {
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_6
         {
             .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
             .property = "ddw",
@@ -4213,6 +4212,7 @@ static void spapr_machine_2_6_class_options(MachineClass *mc)
 
     spapr_machine_2_7_class_options(mc);
     mc->has_hotpluggable_cpus = false;
+    compat_props_add(mc->compat_props, hw_compat_2_6, hw_compat_2_6_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index f28feedd4b..6137c97875 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -811,7 +811,6 @@ static void ccw_machine_2_6_class_options(MachineClass *mc)
 {
     S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_6
         {
             .driver   = TYPE_S390_IPL,
             .property = "iplbext_migration",
@@ -825,6 +824,7 @@ static void ccw_machine_2_6_class_options(MachineClass *mc)
 
     s390mc->ri_allowed = false;
     ccw_machine_2_7_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_6, hw_compat_2_6_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_6, "2.6", false);
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 15/28] compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (13 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 14/28] compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 13:04   ` Cornelia Huck
  2018-12-27  6:50   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 16/28] compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros Marc-André Lureau
                   ` (13 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 +++
 include/hw/compat.h        | 24 ------------------------
 include/hw/i386/pc.h       |  4 ++--
 hw/core/machine.c          | 26 ++++++++++++++++++++++++++
 hw/i386/pc.c               |  3 +++
 hw/i386/pc_piix.c          |  6 ++----
 hw/i386/pc_q35.c           |  6 ++----
 hw/ppc/spapr.c             |  2 +-
 hw/s390x/s390-virtio-ccw.c |  6 +-----
 9 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index a9d413cdb7..36e1269eb1 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -314,4 +314,7 @@ extern const size_t hw_compat_2_7_len;
 extern GlobalProperty hw_compat_2_6[];
 extern const size_t hw_compat_2_6_len;
 
+extern GlobalProperty hw_compat_2_5[];
+extern const size_t hw_compat_2_5_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index c744233fb6..a6eced34c6 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,30 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_5 \
-    {\
-        .driver   = "isa-fdc",\
-        .property = "fallback",\
-        .value    = "144",\
-    },{\
-        .driver   = "pvscsi",\
-        .property = "x-old-pci-configuration",\
-        .value    = "on",\
-    },{\
-        .driver   = "pvscsi",\
-        .property = "x-disable-pcie",\
-        .value    = "on",\
-    },\
-    {\
-        .driver   = "vmxnet3",\
-        .property = "x-old-msi-offsets",\
-        .value    = "on",\
-    },{\
-        .driver   = "vmxnet3",\
-        .property = "x-disable-pcie",\
-        .value    = "on",\
-    },
-
 #define HW_COMPAT_2_4 \
     {\
         .driver   = "virtio-blk-device",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index ca62def2c9..9a32031f25 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -321,8 +321,8 @@ extern const size_t pc_compat_2_7_len;
 extern GlobalProperty pc_compat_2_6[];
 extern const size_t pc_compat_2_6_len;
 
-#define PC_COMPAT_2_5 \
-    HW_COMPAT_2_5
+extern GlobalProperty pc_compat_2_5[];
+extern const size_t pc_compat_2_5_len;
 
 /* Helper for setting model-id for CPU models that changed model-id
  * depending on QEMU versions up to QEMU 2.4.
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 5f1af02c86..1022b538a5 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -200,6 +200,32 @@ GlobalProperty hw_compat_2_6[] = {
 };
 const size_t hw_compat_2_6_len = G_N_ELEMENTS(hw_compat_2_6);
 
+GlobalProperty hw_compat_2_5[] = {
+    {
+        .driver   = "isa-fdc",
+        .property = "fallback",
+        .value    = "144",
+    },{
+        .driver   = "pvscsi",
+        .property = "x-old-pci-configuration",
+        .value    = "on",
+    },{
+        .driver   = "pvscsi",
+        .property = "x-disable-pcie",
+        .value    = "on",
+    },
+    {
+        .driver   = "vmxnet3",
+        .property = "x-old-msi-offsets",
+        .value    = "on",
+    },{
+        .driver   = "vmxnet3",
+        .property = "x-disable-pcie",
+        .value    = "on",
+    },
+};
+const size_t hw_compat_2_5_len = G_N_ELEMENTS(hw_compat_2_5);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index f719115f17..ac54c2e39d 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -275,6 +275,9 @@ GlobalProperty pc_compat_2_6[] = {
 };
 const size_t pc_compat_2_6_len = G_N_ELEMENTS(pc_compat_2_6);
 
+GlobalProperty pc_compat_2_5[] = {};
+const size_t pc_compat_2_5_len = G_N_ELEMENTS(pc_compat_2_5);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 5f3dc8a809..4f5168534a 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -539,14 +539,12 @@ DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6", NULL,
 static void pc_i440fx_2_5_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_5
-    };
 
     pc_i440fx_2_6_machine_options(m);
     pcmc->save_tsc_khz = false;
     m->legacy_fw_cfg_order = 1;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
+    compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
 }
 
 DEFINE_I440FX_MACHINE(v2_5, "pc-i440fx-2.5", NULL,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 063df36cad..a33d5d3610 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -424,14 +424,12 @@ DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
 static void pc_q35_2_5_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_5
-    };
 
     pc_q35_2_6_machine_options(m);
     pcmc->save_tsc_khz = false;
     m->legacy_fw_cfg_order = 1;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
+    compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
 }
 
 DEFINE_Q35_MACHINE(v2_5, "pc-q35-2.5", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 797f480564..c808ec90f0 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4226,7 +4226,6 @@ static void spapr_machine_2_5_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_5
         {
             .driver   = "spapr-vlan",
             .property = "use-rx-buffer-pools",
@@ -4236,6 +4235,7 @@ static void spapr_machine_2_5_class_options(MachineClass *mc)
 
     spapr_machine_2_6_class_options(mc);
     smc->use_ohci_by_default = true;
+    compat_props_add(mc->compat_props, hw_compat_2_5, hw_compat_2_5_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 6137c97875..1ab53a1332 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -836,12 +836,8 @@ static void ccw_machine_2_5_instance_options(MachineState *machine)
 
 static void ccw_machine_2_5_class_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_5
-    };
-
     ccw_machine_2_6_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_5, hw_compat_2_5_len);
 }
 DEFINE_CCW_MACHINE(2_5, "2.5", false);
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 16/28] compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (14 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 15/28] compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 13:05   ` Cornelia Huck
  2018-12-27  6:51   ` Igor Mammedov
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 17/28] compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros Marc-André Lureau
                   ` (12 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h        |  3 ++
 include/hw/compat.h        | 27 --------------
 include/hw/i386/pc.h       | 74 ++------------------------------------
 hw/core/machine.c          | 29 +++++++++++++++
 hw/i386/pc.c               | 71 ++++++++++++++++++++++++++++++++++++
 hw/i386/pc_piix.c          |  6 ++--
 hw/i386/pc_q35.c           |  6 ++--
 hw/ppc/spapr.c             |  5 +--
 hw/s390x/s390-virtio-ccw.c |  2 +-
 9 files changed, 112 insertions(+), 111 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 36e1269eb1..053e362f28 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -317,4 +317,7 @@ extern const size_t hw_compat_2_6_len;
 extern GlobalProperty hw_compat_2_5[];
 extern const size_t hw_compat_2_5_len;
 
+extern GlobalProperty hw_compat_2_4[];
+extern const size_t hw_compat_2_4_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index a6eced34c6..05ff05e159 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,33 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_4 \
-    {\
-        .driver   = "virtio-blk-device",\
-        .property = "scsi",\
-        .value    = "true",\
-    },{\
-        .driver   = "e1000",\
-        .property = "extra_mac_registers",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-pci",\
-        .property = "x-disable-pcie",\
-        .value    = "on",\
-    },{\
-        .driver   = "virtio-pci",\
-        .property = "migrate-extra",\
-        .value    = "off",\
-    },{\
-        .driver   = "fw_cfg_mem",\
-        .property = "dma_enabled",\
-        .value    = "off",\
-    },{\
-        .driver   = "fw_cfg_io",\
-        .property = "dma_enabled",\
-        .value    = "off",\
-    },
-
 #define HW_COMPAT_2_3 \
     {\
         .driver   = "virtio-blk-pci",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 9a32031f25..a9045f6bea 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -324,6 +324,9 @@ extern const size_t pc_compat_2_6_len;
 extern GlobalProperty pc_compat_2_5[];
 extern const size_t pc_compat_2_5_len;
 
+extern GlobalProperty pc_compat_2_4[];
+extern const size_t pc_compat_2_4_len;
+
 /* Helper for setting model-id for CPU models that changed model-id
  * depending on QEMU versions up to QEMU 2.4.
  */
@@ -344,77 +347,6 @@ extern const size_t pc_compat_2_5_len;
         .value    = "QEMU Virtual CPU version " v,\
     },
 
-#define PC_COMPAT_2_4 \
-    HW_COMPAT_2_4 \
-    PC_CPU_MODEL_IDS("2.4.0") \
-    {\
-        .driver   = "Haswell-" TYPE_X86_CPU,\
-        .property = "abm",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "Haswell-noTSX-" TYPE_X86_CPU,\
-        .property = "abm",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "Broadwell-" TYPE_X86_CPU,\
-        .property = "abm",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "Broadwell-noTSX-" TYPE_X86_CPU,\
-        .property = "abm",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "host" "-" TYPE_X86_CPU,\
-        .property = "host-cache-info",\
-        .value    = "on",\
-    },\
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "check",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "qemu64" "-" TYPE_X86_CPU,\
-        .property = "sse4a",\
-        .value    = "on",\
-    },\
-    {\
-        .driver   = "qemu64" "-" TYPE_X86_CPU,\
-        .property = "abm",\
-        .value    = "on",\
-    },\
-    {\
-        .driver   = "qemu64" "-" TYPE_X86_CPU,\
-        .property = "popcnt",\
-        .value    = "on",\
-    },\
-    {\
-        .driver   = "qemu32" "-" TYPE_X86_CPU,\
-        .property = "popcnt",\
-        .value    = "on",\
-    },{\
-        .driver   = "Opteron_G2" "-" TYPE_X86_CPU,\
-        .property = "rdtscp",\
-        .value    = "on",\
-    },{\
-        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
-        .property = "rdtscp",\
-        .value    = "on",\
-    },{\
-        .driver   = "Opteron_G4" "-" TYPE_X86_CPU,\
-        .property = "rdtscp",\
-        .value    = "on",\
-    },{\
-        .driver   = "Opteron_G5" "-" TYPE_X86_CPU,\
-        .property = "rdtscp",\
-        .value    = "on",\
-    },
-
-
 #define PC_COMPAT_2_3 \
     HW_COMPAT_2_3 \
     PC_CPU_MODEL_IDS("2.3.0") \
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 1022b538a5..a14e343cba 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -226,6 +226,35 @@ GlobalProperty hw_compat_2_5[] = {
 };
 const size_t hw_compat_2_5_len = G_N_ELEMENTS(hw_compat_2_5);
 
+GlobalProperty hw_compat_2_4[] = {
+    {
+        .driver   = "virtio-blk-device",
+        .property = "scsi",
+        .value    = "true",
+    },{
+        .driver   = "e1000",
+        .property = "extra_mac_registers",
+        .value    = "off",
+    },{
+        .driver   = "virtio-pci",
+        .property = "x-disable-pcie",
+        .value    = "on",
+    },{
+        .driver   = "virtio-pci",
+        .property = "migrate-extra",
+        .value    = "off",
+    },{
+        .driver   = "fw_cfg_mem",
+        .property = "dma_enabled",
+        .value    = "off",
+    },{
+        .driver   = "fw_cfg_io",
+        .property = "dma_enabled",
+        .value    = "off",
+    }
+};
+const size_t hw_compat_2_4_len = G_N_ELEMENTS(hw_compat_2_4);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index ac54c2e39d..ed40071f66 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -278,6 +278,77 @@ const size_t pc_compat_2_6_len = G_N_ELEMENTS(pc_compat_2_6);
 GlobalProperty pc_compat_2_5[] = {};
 const size_t pc_compat_2_5_len = G_N_ELEMENTS(pc_compat_2_5);
 
+GlobalProperty pc_compat_2_4[] = {
+    PC_CPU_MODEL_IDS("2.4.0")
+    {
+        .driver   = "Haswell-" TYPE_X86_CPU,
+        .property = "abm",
+        .value    = "off",
+    },
+    {
+        .driver   = "Haswell-noTSX-" TYPE_X86_CPU,
+        .property = "abm",
+        .value    = "off",
+    },
+    {
+        .driver   = "Broadwell-" TYPE_X86_CPU,
+        .property = "abm",
+        .value    = "off",
+    },
+    {
+        .driver   = "Broadwell-noTSX-" TYPE_X86_CPU,
+        .property = "abm",
+        .value    = "off",
+    },
+    {
+        .driver   = "host" "-" TYPE_X86_CPU,
+        .property = "host-cache-info",
+        .value    = "on",
+    },
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "check",
+        .value    = "off",
+    },
+    {
+        .driver   = "qemu64" "-" TYPE_X86_CPU,
+        .property = "sse4a",
+        .value    = "on",
+    },
+    {
+        .driver   = "qemu64" "-" TYPE_X86_CPU,
+        .property = "abm",
+        .value    = "on",
+    },
+    {
+        .driver   = "qemu64" "-" TYPE_X86_CPU,
+        .property = "popcnt",
+        .value    = "on",
+    },
+    {
+        .driver   = "qemu32" "-" TYPE_X86_CPU,
+        .property = "popcnt",
+        .value    = "on",
+    },{
+        .driver   = "Opteron_G2" "-" TYPE_X86_CPU,
+        .property = "rdtscp",
+        .value    = "on",
+    },{
+        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,
+        .property = "rdtscp",
+        .value    = "on",
+    },{
+        .driver   = "Opteron_G4" "-" TYPE_X86_CPU,
+        .property = "rdtscp",
+        .value    = "on",
+    },{
+        .driver   = "Opteron_G5" "-" TYPE_X86_CPU,
+        .property = "rdtscp",
+        .value    = "on",
+    }
+};
+const size_t pc_compat_2_4_len = G_N_ELEMENTS(pc_compat_2_4);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 4f5168534a..1465d367d1 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -553,14 +553,12 @@ DEFINE_I440FX_MACHINE(v2_5, "pc-i440fx-2.5", NULL,
 static void pc_i440fx_2_4_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_4
-    };
 
     pc_i440fx_2_5_machine_options(m);
     m->hw_version = "2.4.0";
     pcmc->broken_reserved_end = true;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_4, hw_compat_2_4_len);
+    compat_props_add(m->compat_props, pc_compat_2_4, pc_compat_2_4_len);
 }
 
 DEFINE_I440FX_MACHINE(v2_4, "pc-i440fx-2.4", NULL,
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index a33d5d3610..418a6f9b8f 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -438,14 +438,12 @@ DEFINE_Q35_MACHINE(v2_5, "pc-q35-2.5", NULL,
 static void pc_q35_2_4_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_4
-    };
 
     pc_q35_2_5_machine_options(m);
     m->hw_version = "2.4.0";
     pcmc->broken_reserved_end = true;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_4, hw_compat_2_4_len);
+    compat_props_add(m->compat_props, pc_compat_2_4, pc_compat_2_4_len);
 }
 
 DEFINE_Q35_MACHINE(v2_4, "pc-q35-2.4", NULL,
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index c808ec90f0..9ab8484579 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4248,13 +4248,10 @@ DEFINE_SPAPR_MACHINE(2_5, "2.5", false);
 static void spapr_machine_2_4_class_options(MachineClass *mc)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_4
-    };
 
     spapr_machine_2_5_class_options(mc);
     smc->dr_lmb_enabled = false;
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_4, hw_compat_2_4_len);
 }
 
 DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 1ab53a1332..bf5f2f463c 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -849,7 +849,6 @@ static void ccw_machine_2_4_instance_options(MachineState *machine)
 static void ccw_machine_2_4_class_options(MachineClass *mc)
 {
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_4
         {
             .driver   = TYPE_S390_SKEYS,
             .property = "migration-enabled",
@@ -890,6 +889,7 @@ static void ccw_machine_2_4_class_options(MachineClass *mc)
     };
 
     ccw_machine_2_5_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_4, hw_compat_2_4_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_CCW_MACHINE(2_4, "2.4", false);
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 17/28] compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (15 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 16/28] compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros Marc-André Lureau
@ 2018-12-21  9:03 ` Marc-André Lureau
  2018-12-21 13:07   ` Cornelia Huck
  2018-12-27  6:52   ` Igor Mammedov
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 18/28] compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros Marc-André Lureau
                   ` (11 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:03 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.  I decided to rename the conflicting
pc_compat_2_3() function with pc_compat_2_3_fn().

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h  |  3 ++
 include/hw/compat.h  | 39 --------------------
 include/hw/i386/pc.h | 88 ++------------------------------------------
 hw/core/machine.c    | 41 +++++++++++++++++++++
 hw/i386/pc.c         | 86 +++++++++++++++++++++++++++++++++++++++++++
 hw/i386/pc_piix.c    | 13 +++----
 hw/ppc/spapr.c       |  2 +-
 7 files changed, 139 insertions(+), 133 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 053e362f28..a51d896a70 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -320,4 +320,7 @@ extern const size_t hw_compat_2_5_len;
 extern GlobalProperty hw_compat_2_4[];
 extern const size_t hw_compat_2_4_len;
 
+extern GlobalProperty hw_compat_2_3[];
+extern const size_t hw_compat_2_3_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 05ff05e159..fbe64d5983 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,45 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_3 \
-    {\
-        .driver   = "virtio-blk-pci",\
-        .property = "any_layout",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-balloon-pci",\
-        .property = "any_layout",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-serial-pci",\
-        .property = "any_layout",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-9p-pci",\
-        .property = "any_layout",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-rng-pci",\
-        .property = "any_layout",\
-        .value    = "off",\
-    },{\
-        .driver   = TYPE_PCI_DEVICE,\
-        .property = "x-pcie-lnksta-dllla",\
-        .value    = "off",\
-    },{\
-        .driver   = "migration",\
-        .property = "send-configuration",\
-        .value    = "off",\
-    },{\
-        .driver   = "migration",\
-        .property = "send-section-footer",\
-        .value    = "off",\
-    },{\
-        .driver   = "migration",\
-        .property = "store-global-state",\
-        .value    = "off",\
-    },
-
 #define HW_COMPAT_2_2 \
     /* empty */
 
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index a9045f6bea..def40cd545 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -327,6 +327,9 @@ extern const size_t pc_compat_2_5_len;
 extern GlobalProperty pc_compat_2_4[];
 extern const size_t pc_compat_2_4_len;
 
+extern GlobalProperty pc_compat_2_3[];
+extern const size_t pc_compat_2_3_len;
+
 /* Helper for setting model-id for CPU models that changed model-id
  * depending on QEMU versions up to QEMU 2.4.
  */
@@ -347,91 +350,6 @@ extern const size_t pc_compat_2_4_len;
         .value    = "QEMU Virtual CPU version " v,\
     },
 
-#define PC_COMPAT_2_3 \
-    HW_COMPAT_2_3 \
-    PC_CPU_MODEL_IDS("2.3.0") \
-    {\
-        .driver   = TYPE_X86_CPU,\
-        .property = "arat",\
-        .value    = "off",\
-    },{\
-        .driver   = "qemu64" "-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(4),\
-    },{\
-        .driver   = "kvm64" "-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(5),\
-    },{\
-        .driver   = "pentium3" "-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(2),\
-    },{\
-        .driver   = "n270" "-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(5),\
-    },{\
-        .driver   = "Conroe" "-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(4),\
-    },{\
-        .driver   = "Penryn" "-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(4),\
-    },{\
-        .driver   = "Nehalem" "-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(4),\
-    },{\
-        .driver   = "n270" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "Penryn" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "Conroe" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "Nehalem" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "Westmere" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "SandyBridge" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "IvyBridge" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "Haswell" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "Haswell-noTSX" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "Broadwell" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver   = "Broadwell-noTSX" "-" TYPE_X86_CPU,\
-        .property = "min-xlevel",\
-        .value    = stringify(0x8000000a),\
-    },{\
-        .driver = TYPE_X86_CPU,\
-        .property = "kvm-no-smi-migration",\
-        .value    = "on",\
-    },
-
 #define PC_COMPAT_2_2 \
     HW_COMPAT_2_2 \
     PC_CPU_MODEL_IDS("2.2.0") \
diff --git a/hw/core/machine.c b/hw/core/machine.c
index a14e343cba..449f7ec8f6 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -255,6 +255,47 @@ GlobalProperty hw_compat_2_4[] = {
 };
 const size_t hw_compat_2_4_len = G_N_ELEMENTS(hw_compat_2_4);
 
+GlobalProperty hw_compat_2_3[] = {
+    {
+        .driver   = "virtio-blk-pci",
+        .property = "any_layout",
+        .value    = "off",
+    },{
+        .driver   = "virtio-balloon-pci",
+        .property = "any_layout",
+        .value    = "off",
+    },{
+        .driver   = "virtio-serial-pci",
+        .property = "any_layout",
+        .value    = "off",
+    },{
+        .driver   = "virtio-9p-pci",
+        .property = "any_layout",
+        .value    = "off",
+    },{
+        .driver   = "virtio-rng-pci",
+        .property = "any_layout",
+        .value    = "off",
+    },{
+        .driver   = TYPE_PCI_DEVICE,
+        .property = "x-pcie-lnksta-dllla",
+        .value    = "off",
+    },{
+        .driver   = "migration",
+        .property = "send-configuration",
+        .value    = "off",
+    },{
+        .driver   = "migration",
+        .property = "send-section-footer",
+        .value    = "off",
+    },{
+        .driver   = "migration",
+        .property = "store-global-state",
+        .value    = "off",
+    },
+};
+const size_t hw_compat_2_3_len = G_N_ELEMENTS(hw_compat_2_3);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index ed40071f66..c49fceed8e 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -349,6 +349,92 @@ GlobalProperty pc_compat_2_4[] = {
 };
 const size_t pc_compat_2_4_len = G_N_ELEMENTS(pc_compat_2_4);
 
+GlobalProperty pc_compat_2_3[] = {
+    PC_CPU_MODEL_IDS("2.3.0")
+    {
+        .driver   = TYPE_X86_CPU,
+        .property = "arat",
+        .value    = "off",
+    },{
+        .driver   = "qemu64" "-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(4),
+    },{
+        .driver   = "kvm64" "-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(5),
+    },{
+        .driver   = "pentium3" "-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(2),
+    },{
+        .driver   = "n270" "-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(5),
+    },{
+        .driver   = "Conroe" "-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(4),
+    },{
+        .driver   = "Penryn" "-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(4),
+    },{
+        .driver   = "Nehalem" "-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(4),
+    },{
+        .driver   = "n270" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "Penryn" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "Conroe" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "Nehalem" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "Westmere" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "SandyBridge" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "IvyBridge" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "Haswell" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "Haswell-noTSX" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "Broadwell" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver   = "Broadwell-noTSX" "-" TYPE_X86_CPU,
+        .property = "min-xlevel",
+        .value    = stringify(0x8000000a),
+    },{
+        .driver = TYPE_X86_CPU,
+        .property = "kvm-no-smi-migration",
+        .value    = "on",
+    },
+};
+const size_t pc_compat_2_3_len = G_N_ELEMENTS(pc_compat_2_3);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 1465d367d1..d06fdf2bb9 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -310,7 +310,7 @@ static void pc_init1(MachineState *machine,
  * HW_COMPAT_*, PC_COMPAT_*, or * pc_*_machine_options().
  */
 
-static void pc_compat_2_3(MachineState *machine)
+static void pc_compat_2_3_fn(MachineState *machine)
 {
     PCMachineState *pcms = PC_MACHINE(machine);
     if (kvm_enabled()) {
@@ -320,7 +320,7 @@ static void pc_compat_2_3(MachineState *machine)
 
 static void pc_compat_2_2(MachineState *machine)
 {
-    pc_compat_2_3(machine);
+    pc_compat_2_3_fn(machine);
 }
 
 static void pc_compat_2_1(MachineState *machine)
@@ -566,16 +566,13 @@ DEFINE_I440FX_MACHINE(v2_4, "pc-i440fx-2.4", NULL,
 
 static void pc_i440fx_2_3_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_3
-    };
-
     pc_i440fx_2_4_machine_options(m);
     m->hw_version = "2.3.0";
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_3, hw_compat_2_3_len);
+    compat_props_add(m->compat_props, pc_compat_2_3, pc_compat_2_3_len);
 }
 
-DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3,
+DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3_fn,
                       pc_i440fx_2_3_machine_options);
 
 static void pc_i440fx_2_2_machine_options(MachineClass *m)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 9ab8484579..29f88f2372 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4263,7 +4263,6 @@ DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
 static void spapr_machine_2_3_class_options(MachineClass *mc)
 {
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_3
         {
             .driver   = "spapr-pci-host-bridge",
             .property = "dynamic-reconfiguration",
@@ -4271,6 +4270,7 @@ static void spapr_machine_2_3_class_options(MachineClass *mc)
         },
     };
     spapr_machine_2_4_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_3, hw_compat_2_3_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
 }
 DEFINE_SPAPR_MACHINE(2_3, "2.3", false);
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 18/28] compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (16 preceding siblings ...)
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 17/28] compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21 13:08   ` Cornelia Huck
  2018-12-27  6:53   ` Igor Mammedov
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 19/28] compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros Marc-André Lureau
                   ` (10 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.  I decided to rename the conflicting
pc_compat_2_2() function with pc_compat_2_2_fn().

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h  |  3 ++
 include/hw/compat.h  |  3 --
 include/hw/i386/pc.h | 97 ++------------------------------------------
 hw/core/machine.c    |  3 ++
 hw/i386/pc.c         | 95 +++++++++++++++++++++++++++++++++++++++++++
 hw/i386/pc_piix.c    | 12 +++---
 hw/ppc/spapr.c       |  2 +-
 7 files changed, 110 insertions(+), 105 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index a51d896a70..0b0a1f4079 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -323,4 +323,7 @@ extern const size_t hw_compat_2_4_len;
 extern GlobalProperty hw_compat_2_3[];
 extern const size_t hw_compat_2_3_len;
 
+extern GlobalProperty hw_compat_2_2[];
+extern const size_t hw_compat_2_2_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index fbe64d5983..3bd91908e4 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,9 +1,6 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_2 \
-    /* empty */
-
 #define HW_COMPAT_2_1 \
     {\
         .driver   = "intel-hda",\
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index def40cd545..49b45bb79d 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -330,6 +330,9 @@ extern const size_t pc_compat_2_4_len;
 extern GlobalProperty pc_compat_2_3[];
 extern const size_t pc_compat_2_3_len;
 
+extern GlobalProperty pc_compat_2_2[];
+extern const size_t pc_compat_2_2_len;
+
 /* Helper for setting model-id for CPU models that changed model-id
  * depending on QEMU versions up to QEMU 2.4.
  */
@@ -350,100 +353,6 @@ extern const size_t pc_compat_2_3_len;
         .value    = "QEMU Virtual CPU version " v,\
     },
 
-#define PC_COMPAT_2_2 \
-    HW_COMPAT_2_2 \
-    PC_CPU_MODEL_IDS("2.2.0") \
-    {\
-        .driver = "kvm64" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "kvm32" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Conroe" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Penryn" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Nehalem" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Westmere" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "SandyBridge" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Haswell" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Broadwell" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Opteron_G1" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Opteron_G2" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Opteron_G3" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Opteron_G4" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Opteron_G5" "-" TYPE_X86_CPU,\
-        .property = "vme",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Haswell" "-" TYPE_X86_CPU,\
-        .property = "f16c",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Haswell" "-" TYPE_X86_CPU,\
-        .property = "rdrand",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Broadwell" "-" TYPE_X86_CPU,\
-        .property = "f16c",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Broadwell" "-" TYPE_X86_CPU,\
-        .property = "rdrand",\
-        .value = "off",\
-    },
-
 #define PC_COMPAT_2_1 \
     HW_COMPAT_2_1 \
     PC_CPU_MODEL_IDS("2.1.0") \
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 449f7ec8f6..8f387e9063 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -296,6 +296,9 @@ GlobalProperty hw_compat_2_3[] = {
 };
 const size_t hw_compat_2_3_len = G_N_ELEMENTS(hw_compat_2_3);
 
+GlobalProperty hw_compat_2_2[] = {};
+const size_t hw_compat_2_2_len = G_N_ELEMENTS(hw_compat_2_2);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index c49fceed8e..aeba5a770e 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -435,6 +435,101 @@ GlobalProperty pc_compat_2_3[] = {
 };
 const size_t pc_compat_2_3_len = G_N_ELEMENTS(pc_compat_2_3);
 
+GlobalProperty pc_compat_2_2[] = {
+    PC_CPU_MODEL_IDS("2.2.0")
+    {
+        .driver = "kvm64" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "kvm32" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Conroe" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Penryn" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Nehalem" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Westmere" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "SandyBridge" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Haswell" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Broadwell" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Opteron_G1" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Opteron_G2" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Opteron_G3" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Opteron_G4" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Opteron_G5" "-" TYPE_X86_CPU,
+        .property = "vme",
+        .value = "off",
+    },
+    {
+        .driver = "Haswell" "-" TYPE_X86_CPU,
+        .property = "f16c",
+        .value = "off",
+    },
+    {
+        .driver = "Haswell" "-" TYPE_X86_CPU,
+        .property = "rdrand",
+        .value = "off",
+    },
+    {
+        .driver = "Broadwell" "-" TYPE_X86_CPU,
+        .property = "f16c",
+        .value = "off",
+    },
+    {
+        .driver = "Broadwell" "-" TYPE_X86_CPU,
+        .property = "rdrand",
+        .value = "off",
+    },
+};
+const size_t pc_compat_2_2_len = G_N_ELEMENTS(pc_compat_2_2);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index d06fdf2bb9..6c250e64fc 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -318,14 +318,14 @@ static void pc_compat_2_3_fn(MachineState *machine)
     }
 }
 
-static void pc_compat_2_2(MachineState *machine)
+static void pc_compat_2_2_fn(MachineState *machine)
 {
     pc_compat_2_3_fn(machine);
 }
 
 static void pc_compat_2_1(MachineState *machine)
 {
-    pc_compat_2_2(machine);
+    pc_compat_2_2_fn(machine);
     x86_cpu_change_kvm_default("svm", NULL);
 }
 
@@ -578,18 +578,16 @@ DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3_fn,
 static void pc_i440fx_2_2_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_2
-    };
 
     pc_i440fx_2_3_machine_options(m);
     m->hw_version = "2.2.0";
     m->default_machine_opts = "firmware=bios-256k.bin,suppress-vmdesc=on";
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_2, hw_compat_2_2_len);
+    compat_props_add(m->compat_props, pc_compat_2_2, pc_compat_2_2_len);
     pcmc->rsdp_in_ram = false;
 }
 
-DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2,
+DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2_fn,
                       pc_i440fx_2_2_machine_options);
 
 static void pc_i440fx_2_1_machine_options(MachineClass *m)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 29f88f2372..2e71eb08e9 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4282,7 +4282,6 @@ DEFINE_SPAPR_MACHINE(2_3, "2.3", false);
 static void spapr_machine_2_2_class_options(MachineClass *mc)
 {
     static GlobalProperty compat[] = {
-        HW_COMPAT_2_2
         {
             .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
             .property = "mem_win_size",
@@ -4291,6 +4290,7 @@ static void spapr_machine_2_2_class_options(MachineClass *mc)
     };
 
     spapr_machine_2_3_class_options(mc);
+    compat_props_add(mc->compat_props, hw_compat_2_2, hw_compat_2_2_len);
     compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
     mc->default_machine_opts = "modern-hotplug-events=off,suppress-vmdesc=on";
 }
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 19/28] compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (17 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 18/28] compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21 13:09   ` Cornelia Huck
  2018-12-27  6:54   ` Igor Mammedov
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 20/28] include: remove compat.h Marc-André Lureau
                   ` (9 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.  I decided to rename the conflicting
pc_compat_2_1() function with pc_compat_2_1_fn().

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/boards.h  |  3 +++
 include/hw/compat.h  | 31 -------------------------------
 include/hw/i386/pc.h | 17 +++--------------
 hw/core/machine.c    | 33 +++++++++++++++++++++++++++++++++
 hw/i386/pc.c         | 15 +++++++++++++++
 hw/i386/pc_piix.c    | 12 +++++-------
 hw/ppc/spapr.c       |  6 +-----
 7 files changed, 60 insertions(+), 57 deletions(-)

diff --git a/include/hw/boards.h b/include/hw/boards.h
index 0b0a1f4079..d4aca54968 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -326,4 +326,7 @@ extern const size_t hw_compat_2_3_len;
 extern GlobalProperty hw_compat_2_2[];
 extern const size_t hw_compat_2_2_len;
 
+extern GlobalProperty hw_compat_2_1[];
+extern const size_t hw_compat_2_1_len;
+
 #endif
diff --git a/include/hw/compat.h b/include/hw/compat.h
index 3bd91908e4..b2d0bdd599 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,35 +1,4 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
-#define HW_COMPAT_2_1 \
-    {\
-        .driver   = "intel-hda",\
-        .property = "old_msi_addr",\
-        .value    = "on",\
-    },{\
-        .driver   = "VGA",\
-        .property = "qemu-extended-regs",\
-        .value    = "off",\
-    },{\
-        .driver   = "secondary-vga",\
-        .property = "qemu-extended-regs",\
-        .value    = "off",\
-    },{\
-        .driver   = "virtio-scsi-pci",\
-        .property = "any_layout",\
-        .value    = "off",\
-    },{\
-        .driver   = "usb-mouse",\
-        .property = "usb_version",\
-        .value    = stringify(1),\
-    },{\
-        .driver   = "usb-kbd",\
-        .property = "usb_version",\
-        .value    = stringify(1),\
-    },{\
-        .driver   = "virtio-pci",\
-        .property = "virtio-pci-bus-master-bug-migration",\
-        .value    = "on",\
-    },
-
 #endif /* HW_COMPAT_H */
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 49b45bb79d..784ea7a92c 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -333,6 +333,9 @@ extern const size_t pc_compat_2_3_len;
 extern GlobalProperty pc_compat_2_2[];
 extern const size_t pc_compat_2_2_len;
 
+extern GlobalProperty pc_compat_2_1[];
+extern const size_t pc_compat_2_1_len;
+
 /* Helper for setting model-id for CPU models that changed model-id
  * depending on QEMU versions up to QEMU 2.4.
  */
@@ -353,20 +356,6 @@ extern const size_t pc_compat_2_2_len;
         .value    = "QEMU Virtual CPU version " v,\
     },
 
-#define PC_COMPAT_2_1 \
-    HW_COMPAT_2_1 \
-    PC_CPU_MODEL_IDS("2.1.0") \
-    {\
-        .driver = "coreduo" "-" TYPE_X86_CPU,\
-        .property = "vmx",\
-        .value = "on",\
-    },\
-    {\
-        .driver = "core2duo" "-" TYPE_X86_CPU,\
-        .property = "vmx",\
-        .value = "on",\
-    },
-
 #define PC_COMPAT_2_0 \
     PC_CPU_MODEL_IDS("2.0.0") \
     {\
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 8f387e9063..7570408caa 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -299,6 +299,39 @@ const size_t hw_compat_2_3_len = G_N_ELEMENTS(hw_compat_2_3);
 GlobalProperty hw_compat_2_2[] = {};
 const size_t hw_compat_2_2_len = G_N_ELEMENTS(hw_compat_2_2);
 
+GlobalProperty hw_compat_2_1[] = {
+    {
+        .driver   = "intel-hda",
+        .property = "old_msi_addr",
+        .value    = "on",
+    },{
+        .driver   = "VGA",
+        .property = "qemu-extended-regs",
+        .value    = "off",
+    },{
+        .driver   = "secondary-vga",
+        .property = "qemu-extended-regs",
+        .value    = "off",
+    },{
+        .driver   = "virtio-scsi-pci",
+        .property = "any_layout",
+        .value    = "off",
+    },{
+        .driver   = "usb-mouse",
+        .property = "usb_version",
+        .value    = stringify(1),
+    },{
+        .driver   = "usb-kbd",
+        .property = "usb_version",
+        .value    = stringify(1),
+    },{
+        .driver   = "virtio-pci",
+        .property = "virtio-pci-bus-master-bug-migration",
+        .value    = "on",
+    },
+};
+const size_t hw_compat_2_1_len = G_N_ELEMENTS(hw_compat_2_1);
+
 static char *machine_get_accel(Object *obj, Error **errp)
 {
     MachineState *ms = MACHINE(obj);
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index aeba5a770e..f0c8f54aaf 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -530,6 +530,21 @@ GlobalProperty pc_compat_2_2[] = {
 };
 const size_t pc_compat_2_2_len = G_N_ELEMENTS(pc_compat_2_2);
 
+GlobalProperty pc_compat_2_1[] = {
+    PC_CPU_MODEL_IDS("2.1.0")
+    {
+        .driver = "coreduo" "-" TYPE_X86_CPU,
+        .property = "vmx",
+        .value = "on",
+    },
+    {
+        .driver = "core2duo" "-" TYPE_X86_CPU,
+        .property = "vmx",
+        .value = "on",
+    },
+};
+const size_t pc_compat_2_1_len = G_N_ELEMENTS(pc_compat_2_1);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 6c250e64fc..c7b5e0a3ad 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -323,7 +323,7 @@ static void pc_compat_2_2_fn(MachineState *machine)
     pc_compat_2_3_fn(machine);
 }
 
-static void pc_compat_2_1(MachineState *machine)
+static void pc_compat_2_1_fn(MachineState *machine)
 {
     pc_compat_2_2_fn(machine);
     x86_cpu_change_kvm_default("svm", NULL);
@@ -331,7 +331,7 @@ static void pc_compat_2_1(MachineState *machine)
 
 static void pc_compat_2_0(MachineState *machine)
 {
-    pc_compat_2_1(machine);
+    pc_compat_2_1_fn(machine);
 }
 
 static void pc_compat_1_7(MachineState *machine)
@@ -593,19 +593,17 @@ DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2_fn,
 static void pc_i440fx_2_1_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_1
-    };
 
     pc_i440fx_2_2_machine_options(m);
     m->hw_version = "2.1.0";
     m->default_display = NULL;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, hw_compat_2_1, hw_compat_2_1_len);
+    compat_props_add(m->compat_props, pc_compat_2_1, pc_compat_2_1_len);
     pcmc->smbios_uuid_encoded = false;
     pcmc->enforce_aligned_dimm = false;
 }
 
-DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1,
+DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1_fn,
                       pc_i440fx_2_1_machine_options);
 
 static void pc_i440fx_2_0_machine_options(MachineClass *m)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 2e71eb08e9..1c5b0e40b1 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4302,12 +4302,8 @@ DEFINE_SPAPR_MACHINE(2_2, "2.2", false);
 
 static void spapr_machine_2_1_class_options(MachineClass *mc)
 {
-    static GlobalProperty compat[] = {
-        HW_COMPAT_2_1
-    };
-
     spapr_machine_2_2_class_options(mc);
-    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(mc->compat_props, hw_compat_2_1, hw_compat_2_1_len);
 }
 DEFINE_SPAPR_MACHINE(2_1, "2.1", false);
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 20/28] include: remove compat.h
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (18 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 19/28] compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21 13:10   ` Cornelia Huck
  2018-12-27  6:56   ` Igor Mammedov
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 21/28] compat: remove remaining PC_COMPAT macros Marc-André Lureau
                   ` (8 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

The header is now empty.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/compat.h        | 4 ----
 include/hw/i386/pc.h       | 1 -
 hw/arm/virt.c              | 1 -
 hw/ppc/spapr.c             | 1 -
 hw/s390x/s390-virtio-ccw.c | 1 -
 5 files changed, 8 deletions(-)
 delete mode 100644 include/hw/compat.h

diff --git a/include/hw/compat.h b/include/hw/compat.h
deleted file mode 100644
index b2d0bdd599..0000000000
--- a/include/hw/compat.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef HW_COMPAT_H
-#define HW_COMPAT_H
-
-#endif /* HW_COMPAT_H */
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 784ea7a92c..6b7bf334cd 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -13,7 +13,6 @@
 #include "qemu/bitmap.h"
 #include "sysemu/sysemu.h"
 #include "hw/pci/pci.h"
-#include "hw/compat.h"
 #include "hw/mem/pc-dimm.h"
 #include "hw/mem/nvdimm.h"
 #include "hw/acpi/acpi_dev_interface.h"
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 5fe2eebb02..9570f06f04 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -43,7 +43,6 @@
 #include "sysemu/numa.h"
 #include "sysemu/sysemu.h"
 #include "sysemu/kvm.h"
-#include "hw/compat.h"
 #include "hw/loader.h"
 #include "exec/address-spaces.h"
 #include "qemu/bitops.h"
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 1c5b0e40b1..653a4528ac 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -70,7 +70,6 @@
 #include "hw/nmi.h"
 #include "hw/intc/intc.h"
 
-#include "hw/compat.h"
 #include "qemu/cutils.h"
 #include "hw/ppc/spapr_cpu_core.h"
 #include "hw/mem/memory-device.h"
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index bf5f2f463c..c737507053 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -28,7 +28,6 @@
 #include "hw/s390x/storage-keys.h"
 #include "hw/s390x/storage-attributes.h"
 #include "hw/s390x/event-facility.h"
-#include "hw/compat.h"
 #include "ipl.h"
 #include "hw/s390x/s390-virtio-ccw.h"
 #include "hw/s390x/css-bridge.h"
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 21/28] compat: remove remaining PC_COMPAT macros
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (19 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 20/28] include: remove compat.h Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21 13:12   ` Cornelia Huck
  2018-12-27  6:58   ` Igor Mammedov
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 22/28] qdev: make a separate helper function to apply compat properties Marc-André Lureau
                   ` (7 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Use static arrays instead.  I decided to rename the conflicting
pc_compat_2_1() function with pc_compat_2_1_fn().

Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/i386/pc.h | 236 +++----------------------------------------
 hw/i386/pc.c         | 232 ++++++++++++++++++++++++++++++++++++++++++
 hw/i386/pc_piix.c    |  57 ++++-------
 3 files changed, 267 insertions(+), 258 deletions(-)

diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 6b7bf334cd..84720bede9 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -335,6 +335,21 @@ extern const size_t pc_compat_2_2_len;
 extern GlobalProperty pc_compat_2_1[];
 extern const size_t pc_compat_2_1_len;
 
+extern GlobalProperty pc_compat_2_0[];
+extern const size_t pc_compat_2_0_len;
+
+extern GlobalProperty pc_compat_1_7[];
+extern const size_t pc_compat_1_7_len;
+
+extern GlobalProperty pc_compat_1_6[];
+extern const size_t pc_compat_1_6_len;
+
+extern GlobalProperty pc_compat_1_5[];
+extern const size_t pc_compat_1_5_len;
+
+extern GlobalProperty pc_compat_1_4[];
+extern const size_t pc_compat_1_4_len;
+
 /* Helper for setting model-id for CPU models that changed model-id
  * depending on QEMU versions up to QEMU 2.4.
  */
@@ -355,227 +370,6 @@ extern const size_t pc_compat_2_1_len;
         .value    = "QEMU Virtual CPU version " v,\
     },
 
-#define PC_COMPAT_2_0 \
-    PC_CPU_MODEL_IDS("2.0.0") \
-    {\
-        .driver   = "virtio-scsi-pci",\
-        .property = "any_layout",\
-        .value    = "off",\
-    },{\
-        .driver   = "PIIX4_PM",\
-        .property = "memory-hotplug-support",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "apic",\
-        .property = "version",\
-        .value    = stringify(0x11),\
-    },\
-    {\
-        .driver   = "nec-usb-xhci",\
-        .property = "superspeed-ports-first",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "nec-usb-xhci",\
-        .property = "force-pcie-endcap",\
-        .value    = "on",\
-    },\
-    {\
-        .driver   = "pci-serial",\
-        .property = "prog_if",\
-        .value    = stringify(0),\
-    },\
-    {\
-        .driver   = "pci-serial-2x",\
-        .property = "prog_if",\
-        .value    = stringify(0),\
-    },\
-    {\
-        .driver   = "pci-serial-4x",\
-        .property = "prog_if",\
-        .value    = stringify(0),\
-    },\
-    {\
-        .driver   = "virtio-net-pci",\
-        .property = "guest_announce",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "ICH9-LPC",\
-        .property = "memory-hotplug-support",\
-        .value    = "off",\
-    },{\
-        .driver   = "xio3130-downstream",\
-        .property = COMPAT_PROP_PCP,\
-        .value    = "off",\
-    },{\
-        .driver   = "ioh3420",\
-        .property = COMPAT_PROP_PCP,\
-        .value    = "off",\
-    },
-
-#define PC_COMPAT_1_7 \
-    PC_CPU_MODEL_IDS("1.7.0") \
-    {\
-        .driver   = TYPE_USB_DEVICE,\
-        .property = "msos-desc",\
-        .value    = "no",\
-    },\
-    {\
-        .driver   = "PIIX4_PM",\
-        .property = "acpi-pci-hotplug-with-bridge-support",\
-        .value    = "off",\
-    },\
-    {\
-        .driver   = "hpet",\
-        .property = HPET_INTCAP,\
-        .value    = stringify(4),\
-    },
-
-#define PC_COMPAT_1_6 \
-    PC_CPU_MODEL_IDS("1.6.0") \
-    {\
-        .driver   = "e1000",\
-        .property = "mitigation",\
-        .value    = "off",\
-    },{\
-        .driver   = "qemu64-" TYPE_X86_CPU,\
-        .property = "model",\
-        .value    = stringify(2),\
-    },{\
-        .driver   = "qemu32-" TYPE_X86_CPU,\
-        .property = "model",\
-        .value    = stringify(3),\
-    },{\
-        .driver   = "i440FX-pcihost",\
-        .property = "short_root_bus",\
-        .value    = stringify(1),\
-    },{\
-        .driver   = "q35-pcihost",\
-        .property = "short_root_bus",\
-        .value    = stringify(1),\
-    },
-
-#define PC_COMPAT_1_5 \
-    PC_CPU_MODEL_IDS("1.5.0") \
-    {\
-        .driver   = "Conroe-" TYPE_X86_CPU,\
-        .property = "model",\
-        .value    = stringify(2),\
-    },{\
-        .driver   = "Conroe-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(2),\
-    },{\
-        .driver   = "Penryn-" TYPE_X86_CPU,\
-        .property = "model",\
-        .value    = stringify(2),\
-    },{\
-        .driver   = "Penryn-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(2),\
-    },{\
-        .driver   = "Nehalem-" TYPE_X86_CPU,\
-        .property = "model",\
-        .value    = stringify(2),\
-    },{\
-        .driver   = "Nehalem-" TYPE_X86_CPU,\
-        .property = "min-level",\
-        .value    = stringify(2),\
-    },{\
-        .driver   = "virtio-net-pci",\
-        .property = "any_layout",\
-        .value    = "off",\
-    },{\
-        .driver = TYPE_X86_CPU,\
-        .property = "pmu",\
-        .value = "on",\
-    },{\
-        .driver   = "i440FX-pcihost",\
-        .property = "short_root_bus",\
-        .value    = stringify(0),\
-    },{\
-        .driver   = "q35-pcihost",\
-        .property = "short_root_bus",\
-        .value    = stringify(0),\
-    },
-
-#define PC_COMPAT_1_4 \
-    PC_CPU_MODEL_IDS("1.4.0") \
-    {\
-        .driver   = "scsi-hd",\
-        .property = "discard_granularity",\
-        .value    = stringify(0),\
-    },{\
-        .driver   = "scsi-cd",\
-        .property = "discard_granularity",\
-        .value    = stringify(0),\
-    },{\
-        .driver   = "scsi-disk",\
-        .property = "discard_granularity",\
-        .value    = stringify(0),\
-    },{\
-        .driver   = "ide-hd",\
-        .property = "discard_granularity",\
-        .value    = stringify(0),\
-    },{\
-        .driver   = "ide-cd",\
-        .property = "discard_granularity",\
-        .value    = stringify(0),\
-    },{\
-        .driver   = "ide-drive",\
-        .property = "discard_granularity",\
-        .value    = stringify(0),\
-    },{\
-        .driver   = "virtio-blk-pci",\
-        .property = "discard_granularity",\
-        .value    = stringify(0),\
-    },{\
-        .driver   = "virtio-serial-pci",\
-        .property = "vectors",\
-        /* DEV_NVECTORS_UNSPECIFIED as a uint32_t string */\
-        .value    = stringify(0xFFFFFFFF),\
-    },{ \
-        .driver   = "virtio-net-pci", \
-        .property = "ctrl_guest_offloads", \
-        .value    = "off", \
-    },{\
-        .driver   = "e1000",\
-        .property = "romfile",\
-        .value    = "pxe-e1000.rom",\
-    },{\
-        .driver   = "ne2k_pci",\
-        .property = "romfile",\
-        .value    = "pxe-ne2k_pci.rom",\
-    },{\
-        .driver   = "pcnet",\
-        .property = "romfile",\
-        .value    = "pxe-pcnet.rom",\
-    },{\
-        .driver   = "rtl8139",\
-        .property = "romfile",\
-        .value    = "pxe-rtl8139.rom",\
-    },{\
-        .driver   = "virtio-net-pci",\
-        .property = "romfile",\
-        .value    = "pxe-virtio.rom",\
-    },{\
-        .driver   = "486-" TYPE_X86_CPU,\
-        .property = "model",\
-        .value    = stringify(0),\
-    },\
-    {\
-        .driver = "n270" "-" TYPE_X86_CPU,\
-        .property = "movbe",\
-        .value = "off",\
-    },\
-    {\
-        .driver = "Westmere" "-" TYPE_X86_CPU,\
-        .property = "pclmulqdq",\
-        .value = "off",\
-    },
-
 #define DEFINE_PC_MACHINE(suffix, namestr, initfn, optsfn) \
     static void pc_machine_##suffix##_class_init(ObjectClass *oc, void *data) \
     { \
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index f0c8f54aaf..76c7f84c37 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -72,6 +72,7 @@
 #include "qapi/visitor.h"
 #include "qom/cpu.h"
 #include "hw/nmi.h"
+#include "hw/usb.h"
 #include "hw/i386/intel_iommu.h"
 #include "hw/net/ne2000-isa.h"
 
@@ -545,6 +546,237 @@ GlobalProperty pc_compat_2_1[] = {
 };
 const size_t pc_compat_2_1_len = G_N_ELEMENTS(pc_compat_2_1);
 
+GlobalProperty pc_compat_2_0[] = {
+    PC_CPU_MODEL_IDS("2.0.0")
+    {
+        .driver   = "virtio-scsi-pci",
+        .property = "any_layout",
+        .value    = "off",
+    },{
+        .driver   = "PIIX4_PM",
+        .property = "memory-hotplug-support",
+        .value    = "off",
+    },
+    {
+        .driver   = "apic",
+        .property = "version",
+        .value    = stringify(0x11),
+    },
+    {
+        .driver   = "nec-usb-xhci",
+        .property = "superspeed-ports-first",
+        .value    = "off",
+    },
+    {
+        .driver   = "nec-usb-xhci",
+        .property = "force-pcie-endcap",
+        .value    = "on",
+    },
+    {
+        .driver   = "pci-serial",
+        .property = "prog_if",
+        .value    = stringify(0),
+    },
+    {
+        .driver   = "pci-serial-2x",
+        .property = "prog_if",
+        .value    = stringify(0),
+    },
+    {
+        .driver   = "pci-serial-4x",
+        .property = "prog_if",
+        .value    = stringify(0),
+    },
+    {
+        .driver   = "virtio-net-pci",
+        .property = "guest_announce",
+        .value    = "off",
+    },
+    {
+        .driver   = "ICH9-LPC",
+        .property = "memory-hotplug-support",
+        .value    = "off",
+    },{
+        .driver   = "xio3130-downstream",
+        .property = COMPAT_PROP_PCP,
+        .value    = "off",
+    },{
+        .driver   = "ioh3420",
+        .property = COMPAT_PROP_PCP,
+        .value    = "off",
+    },
+};
+const size_t pc_compat_2_0_len = G_N_ELEMENTS(pc_compat_2_0);
+
+GlobalProperty pc_compat_1_7[] = {
+    PC_CPU_MODEL_IDS("1.7.0")
+    {
+        .driver   = TYPE_USB_DEVICE,
+        .property = "msos-desc",
+        .value    = "no",
+    },
+    {
+        .driver   = "PIIX4_PM",
+        .property = "acpi-pci-hotplug-with-bridge-support",
+        .value    = "off",
+    },
+    {
+        .driver   = "hpet",
+        .property = HPET_INTCAP,
+        .value    = stringify(4),
+    },
+};
+const size_t pc_compat_1_7_len = G_N_ELEMENTS(pc_compat_1_7);
+
+GlobalProperty pc_compat_1_6[] = {
+    PC_CPU_MODEL_IDS("1.6.0")
+    {
+        .driver   = "e1000",
+        .property = "mitigation",
+        .value    = "off",
+    },{
+        .driver   = "qemu64-" TYPE_X86_CPU,
+        .property = "model",
+        .value    = stringify(2),
+    },{
+        .driver   = "qemu32-" TYPE_X86_CPU,
+        .property = "model",
+        .value    = stringify(3),
+    },{
+        .driver   = "i440FX-pcihost",
+        .property = "short_root_bus",
+        .value    = stringify(1),
+    },{
+        .driver   = "q35-pcihost",
+        .property = "short_root_bus",
+        .value    = stringify(1),
+    },
+};
+const size_t pc_compat_1_6_len = G_N_ELEMENTS(pc_compat_1_6);
+
+GlobalProperty pc_compat_1_5[] = {
+    PC_CPU_MODEL_IDS("1.5.0")
+    {
+        .driver   = "Conroe-" TYPE_X86_CPU,
+        .property = "model",
+        .value    = stringify(2),
+    },{
+        .driver   = "Conroe-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(2),
+    },{
+        .driver   = "Penryn-" TYPE_X86_CPU,
+        .property = "model",
+        .value    = stringify(2),
+    },{
+        .driver   = "Penryn-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(2),
+    },{
+        .driver   = "Nehalem-" TYPE_X86_CPU,
+        .property = "model",
+        .value    = stringify(2),
+    },{
+        .driver   = "Nehalem-" TYPE_X86_CPU,
+        .property = "min-level",
+        .value    = stringify(2),
+    },{
+        .driver   = "virtio-net-pci",
+        .property = "any_layout",
+        .value    = "off",
+    },{
+        .driver = TYPE_X86_CPU,
+        .property = "pmu",
+        .value = "on",
+    },{
+        .driver   = "i440FX-pcihost",
+        .property = "short_root_bus",
+        .value    = stringify(0),
+    },{
+        .driver   = "q35-pcihost",
+        .property = "short_root_bus",
+        .value    = stringify(0),
+    },
+};
+const size_t pc_compat_1_5_len = G_N_ELEMENTS(pc_compat_1_5);
+
+GlobalProperty pc_compat_1_4[] = {
+    PC_CPU_MODEL_IDS("1.4.0")
+    {
+        .driver   = "scsi-hd",
+        .property = "discard_granularity",
+        .value    = stringify(0),
+    },{
+        .driver   = "scsi-cd",
+        .property = "discard_granularity",
+        .value    = stringify(0),
+    },{
+        .driver   = "scsi-disk",
+        .property = "discard_granularity",
+        .value    = stringify(0),
+    },{
+        .driver   = "ide-hd",
+        .property = "discard_granularity",
+        .value    = stringify(0),
+    },{
+        .driver   = "ide-cd",
+        .property = "discard_granularity",
+        .value    = stringify(0),
+    },{
+        .driver   = "ide-drive",
+        .property = "discard_granularity",
+        .value    = stringify(0),
+    },{
+        .driver   = "virtio-blk-pci",
+        .property = "discard_granularity",
+        .value    = stringify(0),
+    },{
+        .driver   = "virtio-serial-pci",
+        .property = "vectors",
+        /* DEV_NVECTORS_UNSPECIFIED as a uint32_t string */
+        .value    = stringify(0xFFFFFFFF),
+    },{
+        .driver   = "virtio-net-pci",
+        .property = "ctrl_guest_offloads",
+        .value    = "off",
+    },{
+        .driver   = "e1000",
+        .property = "romfile",
+        .value    = "pxe-e1000.rom",
+    },{
+        .driver   = "ne2k_pci",
+        .property = "romfile",
+        .value    = "pxe-ne2k_pci.rom",
+    },{
+        .driver   = "pcnet",
+        .property = "romfile",
+        .value    = "pxe-pcnet.rom",
+    },{
+        .driver   = "rtl8139",
+        .property = "romfile",
+        .value    = "pxe-rtl8139.rom",
+    },{
+        .driver   = "virtio-net-pci",
+        .property = "romfile",
+        .value    = "pxe-virtio.rom",
+    },{
+        .driver   = "486-" TYPE_X86_CPU,
+        .property = "model",
+        .value    = stringify(0),
+    },
+    {
+        .driver = "n270" "-" TYPE_X86_CPU,
+        .property = "movbe",
+        .value = "off",
+    },
+    {
+        .driver = "Westmere" "-" TYPE_X86_CPU,
+        .property = "pclmulqdq",
+        .value = "off",
+    },
+};
+const size_t pc_compat_1_4_len = G_N_ELEMENTS(pc_compat_1_4);
+
 void gsi_handler(void *opaque, int n, int level)
 {
     GSIState *s = opaque;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index c7b5e0a3ad..1c77119877 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -329,35 +329,35 @@ static void pc_compat_2_1_fn(MachineState *machine)
     x86_cpu_change_kvm_default("svm", NULL);
 }
 
-static void pc_compat_2_0(MachineState *machine)
+static void pc_compat_2_0_fn(MachineState *machine)
 {
     pc_compat_2_1_fn(machine);
 }
 
-static void pc_compat_1_7(MachineState *machine)
+static void pc_compat_1_7_fn(MachineState *machine)
 {
-    pc_compat_2_0(machine);
+    pc_compat_2_0_fn(machine);
     x86_cpu_change_kvm_default("x2apic", NULL);
 }
 
-static void pc_compat_1_6(MachineState *machine)
+static void pc_compat_1_6_fn(MachineState *machine)
 {
-    pc_compat_1_7(machine);
+    pc_compat_1_7_fn(machine);
 }
 
-static void pc_compat_1_5(MachineState *machine)
+static void pc_compat_1_5_fn(MachineState *machine)
 {
-    pc_compat_1_6(machine);
+    pc_compat_1_6_fn(machine);
 }
 
-static void pc_compat_1_4(MachineState *machine)
+static void pc_compat_1_4_fn(MachineState *machine)
 {
-    pc_compat_1_5(machine);
+    pc_compat_1_5_fn(machine);
 }
 
 static void pc_compat_1_3(MachineState *machine)
 {
-    pc_compat_1_4(machine);
+    pc_compat_1_4_fn(machine);
     enable_compat_apic_id_mode();
 }
 
@@ -609,13 +609,10 @@ DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1_fn,
 static void pc_i440fx_2_0_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_2_0
-    };
 
     pc_i440fx_2_1_machine_options(m);
     m->hw_version = "2.0.0";
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, pc_compat_2_0, pc_compat_2_0_len);
     pcmc->smbios_legacy_mode = true;
     pcmc->has_reserved_memory = false;
     /* This value depends on the actual DSDT and SSDT compiled into
@@ -638,73 +635,59 @@ static void pc_i440fx_2_0_machine_options(MachineClass *m)
     pcmc->acpi_data_size = 0x10000;
 }
 
-DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0,
+DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0_fn,
                       pc_i440fx_2_0_machine_options);
 
 static void pc_i440fx_1_7_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_1_7
-    };
 
     pc_i440fx_2_0_machine_options(m);
     m->hw_version = "1.7.0";
     m->default_machine_opts = NULL;
     m->option_rom_has_mr = true;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, pc_compat_1_7, pc_compat_1_7_len);
     pcmc->smbios_defaults = false;
     pcmc->gigabyte_align = false;
     pcmc->legacy_acpi_table_size = 6414;
 }
 
-DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7,
+DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7_fn,
                       pc_i440fx_1_7_machine_options);
 
 static void pc_i440fx_1_6_machine_options(MachineClass *m)
 {
     PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
-    static GlobalProperty compat[] = {
-        PC_COMPAT_1_6
-    };
 
     pc_i440fx_1_7_machine_options(m);
     m->hw_version = "1.6.0";
     m->rom_file_has_mr = false;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, pc_compat_1_6, pc_compat_1_6_len);
     pcmc->has_acpi_build = false;
 }
 
-DEFINE_I440FX_MACHINE(v1_6, "pc-i440fx-1.6", pc_compat_1_6,
+DEFINE_I440FX_MACHINE(v1_6, "pc-i440fx-1.6", pc_compat_1_6_fn,
                       pc_i440fx_1_6_machine_options);
 
 static void pc_i440fx_1_5_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_1_5
-    };
-
     pc_i440fx_1_6_machine_options(m);
     m->hw_version = "1.5.0";
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, pc_compat_1_5, pc_compat_1_5_len);
 }
 
-DEFINE_I440FX_MACHINE(v1_5, "pc-i440fx-1.5", pc_compat_1_5,
+DEFINE_I440FX_MACHINE(v1_5, "pc-i440fx-1.5", pc_compat_1_5_fn,
                       pc_i440fx_1_5_machine_options);
 
 static void pc_i440fx_1_4_machine_options(MachineClass *m)
 {
-    static GlobalProperty compat[] = {
-        PC_COMPAT_1_4
-    };
-
     pc_i440fx_1_5_machine_options(m);
     m->hw_version = "1.4.0";
     m->hot_add_cpu = NULL;
-    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
+    compat_props_add(m->compat_props, pc_compat_1_4, pc_compat_1_4_len);
 }
 
-DEFINE_I440FX_MACHINE(v1_4, "pc-i440fx-1.4", pc_compat_1_4,
+DEFINE_I440FX_MACHINE(v1_4, "pc-i440fx-1.4", pc_compat_1_4_fn,
                       pc_i440fx_1_4_machine_options);
 
 static void pc_i440fx_1_3_machine_options(MachineClass *m)
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 22/28] qdev: make a separate helper function to apply compat properties
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (20 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 21/28] compat: remove remaining PC_COMPAT macros Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21 14:38   ` Igor Mammedov
  2018-12-21 15:25   ` Cornelia Huck
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 23/28] qdev: all globals are now user-provided Marc-André Lureau
                   ` (6 subsequent siblings)
  28 siblings, 2 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

This will allow to apply compat properties on other objects than QDev easily.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 include/hw/qdev-core.h | 2 ++
 hw/core/qdev.c         | 6 +++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 84e612f473..5989fb6565 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -422,6 +422,8 @@ const char *qdev_fw_name(DeviceState *dev);
 
 Object *qdev_get_machine(void);
 
+void object_apply_compat_props(Object *obj);
+
 /* FIXME: make this a link<> */
 void qdev_set_parent_bus(DeviceState *dev, BusState *bus);
 
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index d510340bac..3769a2bccb 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -970,7 +970,7 @@ static void device_initfn(Object *obj)
     QLIST_INIT(&dev->gpios);
 }
 
-static void device_post_init(Object *obj)
+void object_apply_compat_props(Object *obj)
 {
     if (object_dynamic_cast(qdev_get_machine(), TYPE_MACHINE)) {
         MachineState *m = MACHINE(qdev_get_machine());
@@ -982,7 +982,11 @@ static void device_post_init(Object *obj)
         }
         object_apply_global_props(obj, mc->compat_props, &error_abort);
     }
+}
 
+static void device_post_init(Object *obj)
+{
+    object_apply_compat_props(obj);
     qdev_prop_set_globals(DEVICE(obj));
 }
 
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 23/28] qdev: all globals are now user-provided
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (21 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 22/28] qdev: make a separate helper function to apply compat properties Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21 15:26   ` Cornelia Huck
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 24/28] qdev-props: convert global_props to GPtrArray Marc-André Lureau
                   ` (5 subsequent siblings)
  28 siblings, 1 reply; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

All globals are now either provided via -global or through -cpu
features (CPU features are implemented by registering globals).

If the global isn't being used, it should warn in either case.

We can thus consider that all global_props are "user-provided"
globals. No need to track this per-globals anymore.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 include/hw/qdev-core.h         |  3 --
 hw/core/qdev-properties.c      |  4 ---
 tests/test-qdev-global-props.c | 57 ++++------------------------------
 vl.c                           |  1 -
 4 files changed, 6 insertions(+), 59 deletions(-)

diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 5989fb6565..86b05baeeb 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -249,8 +249,6 @@ struct PropertyInfo {
 
 /**
  * GlobalProperty:
- * @user_provided: Set to true if property comes from user-provided config
- * (command-line or config file).
  * @used: Set to true if property was used when initializing a device.
  * @errp: Error destination, used like first argument of error_setg()
  *        in case property setting fails later. If @errp is NULL, we
@@ -262,7 +260,6 @@ typedef struct GlobalProperty {
     const char *driver;
     const char *property;
     const char *value;
-    bool user_provided;
     bool used;
     Error **errp;
 } GlobalProperty;
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index bd84c4ea4c..43c30a57f4 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1192,9 +1192,6 @@ int qdev_prop_check_globals(void)
         if (prop->used) {
             continue;
         }
-        if (!prop->user_provided) {
-            continue;
-        }
         oc = object_class_by_name(prop->driver);
         oc = object_class_dynamic_cast(oc, TYPE_DEVICE);
         if (!oc) {
@@ -1233,7 +1230,6 @@ void qdev_prop_set_globals(DeviceState *dev)
             if (!dev->hotplugged && prop->errp) {
                 error_propagate(prop->errp, err);
             } else {
-                assert(prop->user_provided);
                 warn_report_err(err);
             }
         }
diff --git a/tests/test-qdev-global-props.c b/tests/test-qdev-global-props.c
index b1eb505442..60231b1372 100644
--- a/tests/test-qdev-global-props.c
+++ b/tests/test-qdev-global-props.c
@@ -216,12 +216,12 @@ static void test_dynamic_globalprop_subprocess(void)
 {
     MyType *mt;
     static GlobalProperty props[] = {
-        { TYPE_DYNAMIC_PROPS, "prop1", "101", true },
-        { TYPE_DYNAMIC_PROPS, "prop2", "102", true },
-        { TYPE_DYNAMIC_PROPS"-bad", "prop3", "103", true },
-        { TYPE_UNUSED_HOTPLUG, "prop4", "104", true },
-        { TYPE_UNUSED_NOHOTPLUG, "prop5", "105", true },
-        { TYPE_NONDEVICE, "prop6", "106", true },
+        { TYPE_DYNAMIC_PROPS, "prop1", "101", },
+        { TYPE_DYNAMIC_PROPS, "prop2", "102", },
+        { TYPE_DYNAMIC_PROPS"-bad", "prop3", "103", },
+        { TYPE_UNUSED_HOTPLUG, "prop4", "104", },
+        { TYPE_UNUSED_NOHOTPLUG, "prop5", "105", },
+        { TYPE_NONDEVICE, "prop6", "106", },
         {}
     };
     int global_error;
@@ -256,46 +256,6 @@ static void test_dynamic_globalprop(void)
     g_test_trap_assert_stdout("");
 }
 
-/* Test setting of dynamic properties using user_provided=false properties */
-static void test_dynamic_globalprop_nouser_subprocess(void)
-{
-    MyType *mt;
-    static GlobalProperty props[] = {
-        { TYPE_DYNAMIC_PROPS, "prop1", "101" },
-        { TYPE_DYNAMIC_PROPS, "prop2", "102" },
-        { TYPE_DYNAMIC_PROPS"-bad", "prop3", "103" },
-        { TYPE_UNUSED_HOTPLUG, "prop4", "104" },
-        { TYPE_UNUSED_NOHOTPLUG, "prop5", "105" },
-        { TYPE_NONDEVICE, "prop6", "106" },
-        {}
-    };
-    int global_error;
-
-    register_global_properties(props);
-
-    mt = DYNAMIC_TYPE(object_new(TYPE_DYNAMIC_PROPS));
-    qdev_init_nofail(DEVICE(mt));
-
-    g_assert_cmpuint(mt->prop1, ==, 101);
-    g_assert_cmpuint(mt->prop2, ==, 102);
-    global_error = qdev_prop_check_globals();
-    g_assert_cmpuint(global_error, ==, 0);
-    g_assert(props[0].used);
-    g_assert(props[1].used);
-    g_assert(!props[2].used);
-    g_assert(!props[3].used);
-    g_assert(!props[4].used);
-    g_assert(!props[5].used);
-}
-
-static void test_dynamic_globalprop_nouser(void)
-{
-    g_test_trap_subprocess("/qdev/properties/dynamic/global/nouser/subprocess", 0, 0);
-    g_test_trap_assert_passed();
-    g_test_trap_assert_stderr("");
-    g_test_trap_assert_stdout("");
-}
-
 /* Test if global props affecting subclasses are applied in the right order */
 static void test_subclass_global_props(void)
 {
@@ -345,11 +305,6 @@ int main(int argc, char **argv)
     g_test_add_func("/qdev/properties/dynamic/global",
                     test_dynamic_globalprop);
 
-    g_test_add_func("/qdev/properties/dynamic/global/nouser/subprocess",
-                    test_dynamic_globalprop_nouser_subprocess);
-    g_test_add_func("/qdev/properties/dynamic/global/nouser",
-                    test_dynamic_globalprop_nouser);
-
     g_test_add_func("/qdev/properties/global/subclass",
                     test_subclass_global_props);
 
diff --git a/vl.c b/vl.c
index aa0386952e..7a99a93908 100644
--- a/vl.c
+++ b/vl.c
@@ -2952,7 +2952,6 @@ static int global_init_func(void *opaque, QemuOpts *opts, Error **errp)
     g->driver   = qemu_opt_get(opts, "driver");
     g->property = qemu_opt_get(opts, "property");
     g->value    = qemu_opt_get(opts, "value");
-    g->user_provided = true;
     g->errp = &error_fatal;
     qdev_prop_register_global(g);
     return 0;
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 24/28] qdev-props: convert global_props to GPtrArray
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (22 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 23/28] qdev: all globals are now user-provided Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21 15:28   ` Cornelia Huck
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 25/28] qdev-props: remove errp from GlobalProperty Marc-André Lureau
                   ` (4 subsequent siblings)
  28 siblings, 1 reply; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

A step towards being able to call a common function,
object_apply_global_props().

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/core/qdev-properties.c | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 43c30a57f4..3467e0485c 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1173,22 +1173,32 @@ void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value)
     *ptr = value;
 }
 
-static GList *global_props;
+static GPtrArray *global_props(void)
+{
+    static GPtrArray *gp;
+
+    if (!gp) {
+        gp = g_ptr_array_new();
+    }
+
+    return gp;
+}
 
 void qdev_prop_register_global(GlobalProperty *prop)
 {
-    global_props = g_list_append(global_props, prop);
+    g_ptr_array_add(global_props(), prop);
 }
 
 int qdev_prop_check_globals(void)
 {
-    GList *l;
-    int ret = 0;
+    int i, ret = 0;
 
-    for (l = global_props; l; l = l->next) {
-        GlobalProperty *prop = l->data;
+    for (i = 0; i < global_props()->len; i++) {
+        GlobalProperty *prop;
         ObjectClass *oc;
         DeviceClass *dc;
+
+        prop = g_ptr_array_index(global_props(), i);
         if (prop->used) {
             continue;
         }
@@ -1213,12 +1223,13 @@ int qdev_prop_check_globals(void)
 
 void qdev_prop_set_globals(DeviceState *dev)
 {
-    GList *l;
+    int i;
 
-    for (l = global_props; l; l = l->next) {
-        GlobalProperty *prop = l->data;
+    for (i = 0; i < global_props()->len; i++) {
+        GlobalProperty *prop;
         Error *err = NULL;
 
+        prop = g_ptr_array_index(global_props(), i);
         if (object_dynamic_cast(OBJECT(dev), prop->driver) == NULL) {
             continue;
         }
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 25/28] qdev-props: remove errp from GlobalProperty
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (23 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 24/28] qdev-props: convert global_props to GPtrArray Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21 15:34   ` Cornelia Huck
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 26/28] qdev-props: call object_apply_global_props() Marc-André Lureau
                   ` (3 subsequent siblings)
  28 siblings, 1 reply; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

All qdev_prop_register_global() set &error_fatal for errp, except
'-rtc driftfix=slew', which arguably should also use &error_fatal, as
otherwise failing to apply the property would only report a warning.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 include/hw/qdev-core.h    | 6 ------
 hw/core/qdev-properties.c | 4 ++--
 qom/cpu.c                 | 1 -
 target/i386/cpu.c         | 1 -
 target/sparc/cpu.c        | 1 -
 vl.c                      | 1 -
 6 files changed, 2 insertions(+), 12 deletions(-)

diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index 86b05baeeb..b6ce69c4ac 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -250,18 +250,12 @@ struct PropertyInfo {
 /**
  * GlobalProperty:
  * @used: Set to true if property was used when initializing a device.
- * @errp: Error destination, used like first argument of error_setg()
- *        in case property setting fails later. If @errp is NULL, we
- *        print warnings instead of ignoring errors silently. For
- *        hotplugged devices, errp is always ignored and warnings are
- *        printed instead.
  */
 typedef struct GlobalProperty {
     const char *driver;
     const char *property;
     const char *value;
     bool used;
-    Error **errp;
 } GlobalProperty;
 
 static inline void
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index 3467e0485c..a2d25d3d37 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1238,8 +1238,8 @@ void qdev_prop_set_globals(DeviceState *dev)
         if (err != NULL) {
             error_prepend(&err, "can't apply global %s.%s=%s: ",
                           prop->driver, prop->property, prop->value);
-            if (!dev->hotplugged && prop->errp) {
-                error_propagate(prop->errp, err);
+            if (!dev->hotplugged) {
+                error_propagate(&error_fatal, err);
             } else {
                 warn_report_err(err);
             }
diff --git a/qom/cpu.c b/qom/cpu.c
index 9ad1372d57..5442a7323b 100644
--- a/qom/cpu.c
+++ b/qom/cpu.c
@@ -312,7 +312,6 @@ static void cpu_common_parse_features(const char *typename, char *features,
             prop->driver = typename;
             prop->property = g_strdup(featurestr);
             prop->value = g_strdup(val);
-            prop->errp = &error_fatal;
             qdev_prop_register_global(prop);
         } else {
             error_setg(errp, "Expected key=value format, found %s.",
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 677a3bd5fb..fa37203d89 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -3568,7 +3568,6 @@ static void x86_cpu_parse_featurestr(const char *typename, char *features,
         prop->driver = typename;
         prop->property = g_strdup(name);
         prop->value = g_strdup(val);
-        prop->errp = &error_fatal;
         qdev_prop_register_global(prop);
     }
 
diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
index 0f090ece54..4a4445bdf5 100644
--- a/target/sparc/cpu.c
+++ b/target/sparc/cpu.c
@@ -111,7 +111,6 @@ cpu_add_feat_as_prop(const char *typename, const char *name, const char *val)
     prop->driver = typename;
     prop->property = g_strdup(name);
     prop->value = g_strdup(val);
-    prop->errp = &error_fatal;
     qdev_prop_register_global(prop);
 }
 
diff --git a/vl.c b/vl.c
index 7a99a93908..72a0968fda 100644
--- a/vl.c
+++ b/vl.c
@@ -2952,7 +2952,6 @@ static int global_init_func(void *opaque, QemuOpts *opts, Error **errp)
     g->driver   = qemu_opt_get(opts, "driver");
     g->property = qemu_opt_get(opts, "property");
     g->value    = qemu_opt_get(opts, "value");
-    g->errp = &error_fatal;
     qdev_prop_register_global(g);
     return 0;
 }
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 26/28] qdev-props: call object_apply_global_props()
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (24 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 25/28] qdev-props: remove errp from GlobalProperty Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21 15:35   ` Cornelia Huck
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 27/28] arm: replace instance_post_init() Marc-André Lureau
                   ` (2 subsequent siblings)
  28 siblings, 1 reply; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

It's now possible to use the common function.

Teach object_apply_global_props() to warn if Error argument is NULL.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 hw/core/qdev-properties.c | 24 ++----------------------
 qom/object.c              | 12 +++++++++++-
 2 files changed, 13 insertions(+), 23 deletions(-)

diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
index a2d25d3d37..6061090dc2 100644
--- a/hw/core/qdev-properties.c
+++ b/hw/core/qdev-properties.c
@@ -1223,28 +1223,8 @@ int qdev_prop_check_globals(void)
 
 void qdev_prop_set_globals(DeviceState *dev)
 {
-    int i;
-
-    for (i = 0; i < global_props()->len; i++) {
-        GlobalProperty *prop;
-        Error *err = NULL;
-
-        prop = g_ptr_array_index(global_props(), i);
-        if (object_dynamic_cast(OBJECT(dev), prop->driver) == NULL) {
-            continue;
-        }
-        prop->used = true;
-        object_property_parse(OBJECT(dev), prop->value, prop->property, &err);
-        if (err != NULL) {
-            error_prepend(&err, "can't apply global %s.%s=%s: ",
-                          prop->driver, prop->property, prop->value);
-            if (!dev->hotplugged) {
-                error_propagate(&error_fatal, err);
-            } else {
-                warn_report_err(err);
-            }
-        }
-    }
+    object_apply_global_props(OBJECT(dev), global_props(),
+                              dev->hotplugged ? NULL : &error_fatal);
 }
 
 /* --- 64bit unsigned int 'size' type --- */
diff --git a/qom/object.c b/qom/object.c
index dbdab0aead..aa6f3a2a71 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -390,7 +390,17 @@ void object_apply_global_props(Object *obj, const GPtrArray *props, Error **errp
         if (err != NULL) {
             error_prepend(&err, "can't apply global %s.%s=%s: ",
                           p->driver, p->property, p->value);
-            error_propagate(errp, err);
+            /*
+             * If errp != NULL, propagate error and return.
+             * If errp == NULL, report a warning, but keep going
+             * with the remaining globals.
+             */
+            if (errp) {
+                error_propagate(errp, err);
+                return;
+            } else {
+                warn_report_err(err);
+            }
         }
     }
 }
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 27/28] arm: replace instance_post_init()
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (25 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 26/28] qdev-props: call object_apply_global_props() Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 28/28] hostmem: use object id for memory region name with >= 4.0 Marc-André Lureau
  2019-01-04 11:42 ` [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
  28 siblings, 0 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

Replace arm_cpu_post_init() instance callback by calling it from leaf
classes, to avoid potential ordering issue with other post_init callbacks.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Suggested-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 target/arm/cpu-qom.h |  3 +++
 target/arm/cpu.h     |  2 ++
 target/arm/cpu.c     | 30 ++++++++++++++++++++++++------
 target/arm/cpu64.c   | 24 ++++++++++++++++++++----
 4 files changed, 49 insertions(+), 10 deletions(-)

diff --git a/target/arm/cpu-qom.h b/target/arm/cpu-qom.h
index d135ff8e06..2049fa9612 100644
--- a/target/arm/cpu-qom.h
+++ b/target/arm/cpu-qom.h
@@ -35,6 +35,8 @@ struct arm_boot_info;
 
 #define TYPE_ARM_MAX_CPU "max-" TYPE_ARM_CPU
 
+typedef struct ARMCPUInfo ARMCPUInfo;
+
 /**
  * ARMCPUClass:
  * @parent_realize: The parent class' realize handler.
@@ -47,6 +49,7 @@ typedef struct ARMCPUClass {
     CPUClass parent_class;
     /*< public >*/
 
+    const ARMCPUInfo *info;
     DeviceRealize parent_realize;
     void (*parent_reset)(CPUState *cpu);
 } ARMCPUClass;
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index c943f35dd9..3aedfeeaf1 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -884,6 +884,8 @@ static inline ARMCPU *arm_env_get_cpu(CPUARMState *env)
     return container_of(env, ARMCPU, env);
 }
 
+void arm_cpu_post_init(Object *obj);
+
 uint64_t arm_cpu_mp_affinity(int idx, uint8_t clustersz);
 
 #define ENV_GET_CPU(e) CPU(arm_env_get_cpu(e))
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index c8505eaaee..baf430c092 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -740,7 +740,7 @@ static Property arm_cpu_pmsav7_dregion_property =
 static Property arm_cpu_initsvtor_property =
             DEFINE_PROP_UINT32("init-svtor", ARMCPU, init_svtor, 0);
 
-static void arm_cpu_post_init(Object *obj)
+void arm_cpu_post_init(Object *obj)
 {
     ARMCPU *cpu = ARM_CPU(obj);
 
@@ -1457,8 +1457,10 @@ static void cortex_m33_initfn(Object *obj)
 
 static void arm_v7m_class_init(ObjectClass *oc, void *data)
 {
+    ARMCPUClass *acc = ARM_CPU_CLASS(oc);
     CPUClass *cc = CPU_CLASS(oc);
 
+    acc->info = data;
 #ifndef CONFIG_USER_ONLY
     cc->do_interrupt = arm_v7m_cpu_do_interrupt;
 #endif
@@ -1959,11 +1961,11 @@ static void arm_max_initfn(Object *obj)
 
 #endif /* !defined(CONFIG_USER_ONLY) || !defined(TARGET_AARCH64) */
 
-typedef struct ARMCPUInfo {
+struct ARMCPUInfo {
     const char *name;
     void (*initfn)(Object *obj);
     void (*class_init)(ObjectClass *oc, void *data);
-} ARMCPUInfo;
+};
 
 static const ARMCPUInfo arm_cpus[] = {
 #if !defined(CONFIG_USER_ONLY) || !defined(TARGET_AARCH64)
@@ -2113,6 +2115,7 @@ static void arm_host_initfn(Object *obj)
     ARMCPU *cpu = ARM_CPU(obj);
 
     kvm_arm_set_cpu_features_from_host(cpu);
+    arm_cpu_post_init(ARM_CPU(obj));
 }
 
 static const TypeInfo host_arm_cpu_type_info = {
@@ -2127,14 +2130,30 @@ static const TypeInfo host_arm_cpu_type_info = {
 
 #endif
 
+static void arm_cpu_instance_init(Object *obj)
+{
+    ARMCPUClass *acc = ARM_CPU_GET_CLASS(obj);
+
+    acc->info->initfn(obj);
+    arm_cpu_post_init(obj);
+}
+
+static void cpu_register_class_init(ObjectClass *oc, void *data)
+{
+    ARMCPUClass *acc = ARM_CPU_CLASS(oc);
+
+    acc->info = data;
+}
+
 static void cpu_register(const ARMCPUInfo *info)
 {
     TypeInfo type_info = {
         .parent = TYPE_ARM_CPU,
         .instance_size = sizeof(ARMCPU),
-        .instance_init = info->initfn,
+        .instance_init = arm_cpu_instance_init,
         .class_size = sizeof(ARMCPUClass),
-        .class_init = info->class_init,
+        .class_init = info->class_init ?: cpu_register_class_init,
+        .class_data = (void *)info,
     };
 
     type_info.name = g_strdup_printf("%s-" TYPE_ARM_CPU, info->name);
@@ -2147,7 +2166,6 @@ static const TypeInfo arm_cpu_type_info = {
     .parent = TYPE_CPU,
     .instance_size = sizeof(ARMCPU),
     .instance_init = arm_cpu_initfn,
-    .instance_post_init = arm_cpu_post_init,
     .instance_finalize = arm_cpu_finalizefn,
     .abstract = true,
     .class_size = sizeof(ARMCPUClass),
diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
index 1d57be0c91..4b544a1c58 100644
--- a/target/arm/cpu64.c
+++ b/target/arm/cpu64.c
@@ -364,11 +364,11 @@ static void aarch64_max_initfn(Object *obj)
     }
 }
 
-typedef struct ARMCPUInfo {
+struct ARMCPUInfo {
     const char *name;
     void (*initfn)(Object *obj);
     void (*class_init)(ObjectClass *oc, void *data);
-} ARMCPUInfo;
+};
 
 static const ARMCPUInfo aarch64_cpus[] = {
     { .name = "cortex-a57",         .initfn = aarch64_a57_initfn },
@@ -452,14 +452,30 @@ static void aarch64_cpu_class_init(ObjectClass *oc, void *data)
     cc->gdb_arch_name = aarch64_gdb_arch_name;
 }
 
+static void aarch64_cpu_instance_init(Object *obj)
+{
+    ARMCPUClass *acc = ARM_CPU_GET_CLASS(obj);
+
+    acc->info->initfn(obj);
+    arm_cpu_post_init(obj);
+}
+
+static void cpu_register_class_init(ObjectClass *oc, void *data)
+{
+    ARMCPUClass *acc = ARM_CPU_CLASS(oc);
+
+    acc->info = data;
+}
+
 static void aarch64_cpu_register(const ARMCPUInfo *info)
 {
     TypeInfo type_info = {
         .parent = TYPE_AARCH64_CPU,
         .instance_size = sizeof(ARMCPU),
-        .instance_init = info->initfn,
+        .instance_init = aarch64_cpu_instance_init,
         .class_size = sizeof(ARMCPUClass),
-        .class_init = info->class_init,
+        .class_init = info->class_init ?: cpu_register_class_init,
+        .class_data = (void *)info,
     };
 
     type_info.name = g_strdup_printf("%s-" TYPE_ARM_CPU, info->name);
-- 
2.20.1.2.gb21ebb671b

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

* [Qemu-devel] [PATCH v7 28/28] hostmem: use object id for memory region name with >= 4.0
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (26 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 27/28] arm: replace instance_post_init() Marc-André Lureau
@ 2018-12-21  9:04 ` Marc-André Lureau
  2019-01-04 11:42 ` [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
  28 siblings, 0 replies; 80+ messages in thread
From: Marc-André Lureau @ 2018-12-21  9:04 UTC (permalink / raw)
  To: qemu-devel; +Cc: imammedo, ehabkost

hostmem-file and hostmem-memfd use the whole object path for the
memory region name, and hostname-ram uses only the path component (the
object id, or canonical path basename):

qemu -m 1024 -object memory-backend-file,id=mem,size=1G,mem-path=/tmp/foo -numa node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used              Total
            /objects/mem    4 KiB  0x0000000000000000 0x0000000040000000 0x0000000040000000

qemu -m 1024 -object memory-backend-memfd,id=mem,size=1G -numa node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used              Total
            /objects/mem    4 KiB  0x0000000000000000 0x0000000040000000 0x0000000040000000

qemu -m 1024 -object memory-backend-ram,id=mem,size=1G -numa node,memdev=mem -monitor stdio
(qemu) info ramblock
              Block Name    PSize              Offset               Used              Total
                     mem    4 KiB  0x0000000000000000 0x0000000040000000 0x0000000040000000

For consistency, change to use object id for -file and -memfd as well
with >= 4.0.

Having a consistent naming allows to migrate to different hostmem
backends.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
---
 include/sysemu/hostmem.h |  3 ++-
 backends/hostmem-file.c  |  8 ++++----
 backends/hostmem-memfd.c |  2 +-
 backends/hostmem-ram.c   |  9 ++++-----
 backends/hostmem.c       | 36 ++++++++++++++++++++++++++++++++++++
 hw/core/machine.c        | 12 +++++++++++-
 6 files changed, 58 insertions(+), 12 deletions(-)

diff --git a/include/sysemu/hostmem.h b/include/sysemu/hostmem.h
index 6e6bd2c1cb..a023b372a4 100644
--- a/include/sysemu/hostmem.h
+++ b/include/sysemu/hostmem.h
@@ -53,7 +53,7 @@ struct HostMemoryBackend {
 
     /* protected */
     uint64_t size;
-    bool merge, dump;
+    bool merge, dump, use_canonical_path;
     bool prealloc, force_prealloc, is_mapped, share;
     DECLARE_BITMAP(host_nodes, MAX_NODES + 1);
     HostMemPolicy policy;
@@ -67,5 +67,6 @@ MemoryRegion *host_memory_backend_get_memory(HostMemoryBackend *backend);
 void host_memory_backend_set_mapped(HostMemoryBackend *backend, bool mapped);
 bool host_memory_backend_is_mapped(HostMemoryBackend *backend);
 size_t host_memory_backend_pagesize(HostMemoryBackend *memdev);
+char *host_memory_backend_get_name(HostMemoryBackend *backend);
 
 #endif
diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c
index 78f058dee2..7a34e25c43 100644
--- a/backends/hostmem-file.c
+++ b/backends/hostmem-file.c
@@ -43,7 +43,7 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
 {
     HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(backend);
 #ifdef CONFIG_POSIX
-    gchar *path;
+    gchar *name;
 #endif
 
     if (!backend->size) {
@@ -58,14 +58,14 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
     error_setg(errp, "-mem-path not supported on this host");
 #else
     backend->force_prealloc = mem_prealloc;
-    path = object_get_canonical_path(OBJECT(backend));
+    name = host_memory_backend_get_name(backend);
     memory_region_init_ram_from_file(&backend->mr, OBJECT(backend),
-                                     path,
+                                     name,
                                      backend->size, fb->align,
                                      (backend->share ? RAM_SHARED : 0) |
                                      (fb->is_pmem ? RAM_PMEM : 0),
                                      fb->mem_path, errp);
-    g_free(path);
+    g_free(name);
 #endif
 }
 
diff --git a/backends/hostmem-memfd.c b/backends/hostmem-memfd.c
index 2eb9c827a5..98c9bf3240 100644
--- a/backends/hostmem-memfd.c
+++ b/backends/hostmem-memfd.c
@@ -53,7 +53,7 @@ memfd_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
         return;
     }
 
-    name = object_get_canonical_path(OBJECT(backend));
+    name = host_memory_backend_get_name(backend);
     memory_region_init_ram_from_fd(&backend->mr, OBJECT(backend),
                                    name, backend->size,
                                    backend->share, fd, errp);
diff --git a/backends/hostmem-ram.c b/backends/hostmem-ram.c
index 7ddd08d370..24b65d9ae3 100644
--- a/backends/hostmem-ram.c
+++ b/backends/hostmem-ram.c
@@ -16,21 +16,20 @@
 
 #define TYPE_MEMORY_BACKEND_RAM "memory-backend-ram"
 
-
 static void
 ram_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
 {
-    char *path;
+    char *name;
 
     if (!backend->size) {
         error_setg(errp, "can't create backend with size 0");
         return;
     }
 
-    path = object_get_canonical_path_component(OBJECT(backend));
-    memory_region_init_ram_shared_nomigrate(&backend->mr, OBJECT(backend), path,
+    name = host_memory_backend_get_name(backend);
+    memory_region_init_ram_shared_nomigrate(&backend->mr, OBJECT(backend), name,
                            backend->size, backend->share, errp);
-    g_free(path);
+    g_free(name);
 }
 
 static void
diff --git a/backends/hostmem.c b/backends/hostmem.c
index af800284e0..0c8ef17653 100644
--- a/backends/hostmem.c
+++ b/backends/hostmem.c
@@ -28,6 +28,16 @@ QEMU_BUILD_BUG_ON(HOST_MEM_POLICY_BIND != MPOL_BIND);
 QEMU_BUILD_BUG_ON(HOST_MEM_POLICY_INTERLEAVE != MPOL_INTERLEAVE);
 #endif
 
+char *
+host_memory_backend_get_name(HostMemoryBackend *backend)
+{
+    if (!backend->use_canonical_path) {
+        return object_get_canonical_path_component(OBJECT(backend));
+    }
+
+    return object_get_canonical_path(OBJECT(backend));
+}
+
 static void
 host_memory_backend_get_size(Object *obj, Visitor *v, const char *name,
                              void *opaque, Error **errp)
@@ -247,6 +257,11 @@ static void host_memory_backend_init(Object *obj)
     backend->prealloc = mem_prealloc;
 }
 
+static void host_memory_backend_post_init(Object *obj)
+{
+    object_apply_compat_props(obj);
+}
+
 bool host_memory_backend_mr_inited(HostMemoryBackend *backend)
 {
     /*
@@ -395,6 +410,23 @@ static void host_memory_backend_set_share(Object *o, bool value, Error **errp)
     backend->share = value;
 }
 
+static bool
+host_memory_backend_get_use_canonical_path(Object *obj, Error **errp)
+{
+    HostMemoryBackend *backend = MEMORY_BACKEND(obj);
+
+    return backend->use_canonical_path;
+}
+
+static void
+host_memory_backend_set_use_canonical_path(Object *obj, bool value,
+                                           Error **errp)
+{
+    HostMemoryBackend *backend = MEMORY_BACKEND(obj);
+
+    backend->use_canonical_path = value;
+}
+
 static void
 host_memory_backend_class_init(ObjectClass *oc, void *data)
 {
@@ -441,6 +473,9 @@ host_memory_backend_class_init(ObjectClass *oc, void *data)
         &error_abort);
     object_class_property_set_description(oc, "share",
         "Mark the memory as private to QEMU or shared", &error_abort);
+    object_class_property_add_bool(oc, "x-use-canonical-path-for-ramblock-id",
+        host_memory_backend_get_use_canonical_path,
+        host_memory_backend_set_use_canonical_path, &error_abort);
 }
 
 static const TypeInfo host_memory_backend_info = {
@@ -451,6 +486,7 @@ static const TypeInfo host_memory_backend_info = {
     .class_init = host_memory_backend_class_init,
     .instance_size = sizeof(HostMemoryBackend),
     .instance_init = host_memory_backend_init,
+    .instance_post_init = host_memory_backend_post_init,
     .interfaces = (InterfaceInfo[]) {
         { TYPE_USER_CREATABLE },
         { }
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 7570408caa..cba79ef7ff 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -23,7 +23,17 @@
 #include "sysemu/qtest.h"
 #include "hw/pci/pci.h"
 
-GlobalProperty hw_compat_3_1[] = {};
+GlobalProperty hw_compat_3_1[] = {
+    {
+        .driver   = "memory-backend-file",
+        .property = "x-use-canonical-path-for-ramblock-id",
+        .value    = "true",
+    },{
+        .driver   = "memory-backend-memfd",
+        .property = "x-use-canonical-path-for-ramblock-id",
+        .value    = "true",
+    },
+};
 const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
 
 GlobalProperty hw_compat_3_0[] = {};
-- 
2.20.1.2.gb21ebb671b

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

* Re: [Qemu-devel] [PATCH v7 01/28] hw: apply accel compat properties without touching globals
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 01/28] hw: apply accel compat properties without touching globals Marc-André Lureau
@ 2018-12-21 11:58   ` Cornelia Huck
  0 siblings, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 11:58 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:43 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Instead of registering compat properties as globals, let's keep them
> in their own array, to avoid mixing with user globals.
> 
> Introduce object_apply_global_props() function, to apply compatibility
> properties from a GPtrArray.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
>  include/hw/qdev-core.h | 10 ++++++++++
>  include/qom/object.h   |  3 +++
>  include/sysemu/accel.h |  4 +---
>  accel/accel.c          | 12 ------------
>  hw/core/qdev.c         |  9 +++++++++
>  hw/xen/xen-common.c    |  9 ++++++---
>  qom/object.c           | 25 +++++++++++++++++++++++++
>  vl.c                   |  1 -
>  8 files changed, 54 insertions(+), 19 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 02/28] machines: replace COMPAT define with a static array
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 02/28] machines: replace COMPAT define with a static array Marc-André Lureau
@ 2018-12-21 12:33   ` Cornelia Huck
  2018-12-21 14:17   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:33 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:44 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  10 +-
>  hw/arm/virt.c              |  45 +--
>  hw/i386/pc_piix.c          | 563 +++++++++++++++++++++----------------
>  hw/i386/pc_q35.c           |  66 ++++-
>  hw/ppc/spapr.c             | 201 ++++++-------
>  hw/s390x/s390-virtio-ccw.c | 219 ++++++++-------
>  6 files changed, 622 insertions(+), 482 deletions(-)
> 

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 03/28] hw: apply machine compat properties without touching globals
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 03/28] hw: apply machine compat properties without touching globals Marc-André Lureau
@ 2018-12-21 12:38   ` Cornelia Huck
  2018-12-21 14:20   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:38 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:45 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Similarly to accel properties, move compat properties out of globals
> registration, and apply the machine compat properties during
> device_post_init().
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +-
>  hw/arm/virt.c              | 27 ++++++++----
>  hw/core/machine.c          | 19 +--------
>  hw/core/qdev.c             |  2 +
>  hw/i386/pc_piix.c          | 87 +++++++++++++++++++++++++-------------
>  hw/i386/pc_q35.c           | 33 ++++++++++-----
>  hw/ppc/spapr.c             | 42 ++++++++++++------
>  hw/s390x/s390-virtio-ccw.c | 33 ++++++++++-----
>  vl.c                       |  1 -
>  9 files changed, 152 insertions(+), 95 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 04/28] machine: move compat properties out of globals
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 04/28] machine: move compat properties out of globals Marc-André Lureau
@ 2018-12-21 12:44   ` Cornelia Huck
  2018-12-21 14:21   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:44 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:46 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Move the compat arrays inside functions that use them.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  hw/arm/virt.c              |  94 +++--
>  hw/i386/pc_piix.c          | 705 ++++++++++++++++++-------------------
>  hw/i386/pc_q35.c           | 121 +++----
>  hw/ppc/spapr.c             | 254 +++++++------
>  hw/s390x/s390-virtio-ccw.c | 239 ++++++-------
>  hw/xen/xen-common.c        |  38 +-
>  6 files changed, 685 insertions(+), 766 deletions(-)
> 

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 05/28] hw: remove SET_MACHINE_COMPAT
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 05/28] hw: remove SET_MACHINE_COMPAT Marc-André Lureau
@ 2018-12-21 12:44   ` Cornelia Huck
  2018-12-21 14:22   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:44 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:47 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> No longer needed.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h | 12 ------------
>  1 file changed, 12 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 06/28] compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 06/28] compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros Marc-André Lureau
@ 2018-12-21 12:47   ` Cornelia Huck
  2018-12-27  6:35   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:47 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:48 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        | 3 +++
>  include/hw/compat.h        | 3 ---
>  include/hw/i386/pc.h       | 4 ++--
>  hw/arm/virt.c              | 6 +-----
>  hw/core/machine.c          | 3 +++
>  hw/i386/pc.c               | 3 +++
>  hw/i386/pc_piix.c          | 7 ++-----
>  hw/i386/pc_q35.c           | 7 ++-----
>  hw/ppc/spapr.c             | 6 +-----
>  hw/s390x/s390-virtio-ccw.c | 6 +-----
>  10 files changed, 18 insertions(+), 30 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 07/28] compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 07/28] compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros Marc-André Lureau
@ 2018-12-21 12:50   ` Cornelia Huck
  2018-12-27  6:37   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:50 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:49 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        |  3 ---
>  include/hw/i386/pc.h       | 17 ++---------------
>  hw/arm/virt.c              |  6 +-----
>  hw/core/machine.c          |  3 +++
>  hw/i386/pc.c               | 17 +++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  5 +----
>  hw/s390x/s390-virtio-ccw.c |  5 +----
>  10 files changed, 32 insertions(+), 41 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 08/28] compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 08/28] compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros Marc-André Lureau
@ 2018-12-21 12:52   ` Cornelia Huck
  2018-12-27  6:39   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:52 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:50 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 27 ---------------------------
>  include/hw/i386/pc.h       | 21 ++-------------------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 29 +++++++++++++++++++++++++++++
>  hw/i386/pc.c               | 21 +++++++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  6 +-----
>  10 files changed, 62 insertions(+), 66 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 09/28] compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 09/28] compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros Marc-André Lureau
@ 2018-12-21 12:53   ` Cornelia Huck
  2018-12-27  6:40   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:53 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:51 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 19 -------------------
>  include/hw/i386/pc.h       | 13 ++-----------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 21 +++++++++++++++++++++
>  hw/i386/pc.c               | 13 +++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  5 +----
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  10 files changed, 46 insertions(+), 49 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 10/28] compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 10/28] compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros Marc-André Lureau
@ 2018-12-21 12:55   ` Cornelia Huck
  2018-12-27  6:41   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:55 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:52 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 11 -----------
>  include/hw/i386/pc.h       | 17 ++---------------
>  hw/arm/virt.c              |  6 +-----
>  hw/core/machine.c          | 13 +++++++++++++
>  hw/i386/pc.c               | 17 +++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  6 +-----
>  hw/s390x/s390-virtio-ccw.c |  6 +-----
>  10 files changed, 42 insertions(+), 51 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 11/28] compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 11/28] compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros Marc-André Lureau
@ 2018-12-21 12:56   ` Cornelia Huck
  2018-12-27  6:44   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:56 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:53 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 19 -------------------
>  include/hw/i386/pc.h       |  9 ++-------
>  hw/arm/virt.c              |  6 +-----
>  hw/core/machine.c          | 21 +++++++++++++++++++++
>  hw/i386/pc.c               |  9 +++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  10 files changed, 42 insertions(+), 43 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 12/28] compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 12/28] compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros Marc-André Lureau
@ 2018-12-21 12:58   ` Cornelia Huck
  2018-12-27  6:45   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 12:58 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:54 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 43 -----------------------------------
>  include/hw/i386/pc.h       | 29 ++----------------------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 46 ++++++++++++++++++++++++++++++++++++++
>  hw/i386/pc.c               | 29 ++++++++++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++----
>  hw/i386/pc_q35.c           |  7 ++----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  10 files changed, 87 insertions(+), 86 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 13/28] compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 13/28] compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros Marc-André Lureau
@ 2018-12-21 13:00   ` Cornelia Huck
  2018-12-27  6:47   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 13:00 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:55 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 23 -----------------------
>  include/hw/i386/pc.h       | 34 ++--------------------------------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 25 +++++++++++++++++++++++++
>  hw/i386/pc.c               | 34 ++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  5 +----
>  10 files changed, 71 insertions(+), 74 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 14/28] compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 14/28] compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros Marc-André Lureau
@ 2018-12-21 13:03   ` Cornelia Huck
  2018-12-27  6:48   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 13:03 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:56 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 15 ---------------
>  include/hw/i386/pc.h       | 23 ++---------------------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 17 +++++++++++++++++
>  hw/i386/pc.c               | 23 +++++++++++++++++++++++
>  hw/i386/pc_piix.c          |  6 ++----
>  hw/i386/pc_q35.c           |  6 ++----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  10 files changed, 52 insertions(+), 50 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 15/28] compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 15/28] compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros Marc-André Lureau
@ 2018-12-21 13:04   ` Cornelia Huck
  2018-12-27  6:50   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 13:04 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:57 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 24 ------------------------
>  include/hw/i386/pc.h       |  4 ++--
>  hw/core/machine.c          | 26 ++++++++++++++++++++++++++
>  hw/i386/pc.c               |  3 +++
>  hw/i386/pc_piix.c          |  6 ++----
>  hw/i386/pc_q35.c           |  6 ++----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  6 +-----
>  9 files changed, 40 insertions(+), 40 deletions(-)
> 

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 16/28] compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 16/28] compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros Marc-André Lureau
@ 2018-12-21 13:05   ` Cornelia Huck
  2018-12-27  6:51   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 13:05 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:58 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 ++
>  include/hw/compat.h        | 27 --------------
>  include/hw/i386/pc.h       | 74 ++------------------------------------
>  hw/core/machine.c          | 29 +++++++++++++++
>  hw/i386/pc.c               | 71 ++++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c          |  6 ++--
>  hw/i386/pc_q35.c           |  6 ++--
>  hw/ppc/spapr.c             |  5 +--
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  9 files changed, 112 insertions(+), 111 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 17/28] compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 17/28] compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros Marc-André Lureau
@ 2018-12-21 13:07   ` Cornelia Huck
  2018-12-27  6:52   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 13:07 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:03:59 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.  I decided to rename the conflicting
> pc_compat_2_3() function with pc_compat_2_3_fn().
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h  |  3 ++
>  include/hw/compat.h  | 39 --------------------
>  include/hw/i386/pc.h | 88 ++------------------------------------------
>  hw/core/machine.c    | 41 +++++++++++++++++++++
>  hw/i386/pc.c         | 86 +++++++++++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c    | 13 +++----
>  hw/ppc/spapr.c       |  2 +-
>  7 files changed, 139 insertions(+), 133 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 18/28] compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 18/28] compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros Marc-André Lureau
@ 2018-12-21 13:08   ` Cornelia Huck
  2018-12-27  6:53   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 13:08 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:04:00 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.  I decided to rename the conflicting
> pc_compat_2_2() function with pc_compat_2_2_fn().
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h  |  3 ++
>  include/hw/compat.h  |  3 --
>  include/hw/i386/pc.h | 97 ++------------------------------------------
>  hw/core/machine.c    |  3 ++
>  hw/i386/pc.c         | 95 +++++++++++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c    | 12 +++---
>  hw/ppc/spapr.c       |  2 +-
>  7 files changed, 110 insertions(+), 105 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 19/28] compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 19/28] compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros Marc-André Lureau
@ 2018-12-21 13:09   ` Cornelia Huck
  2018-12-27  6:54   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 13:09 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:04:01 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.  I decided to rename the conflicting
> pc_compat_2_1() function with pc_compat_2_1_fn().
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h  |  3 +++
>  include/hw/compat.h  | 31 -------------------------------
>  include/hw/i386/pc.h | 17 +++--------------
>  hw/core/machine.c    | 33 +++++++++++++++++++++++++++++++++
>  hw/i386/pc.c         | 15 +++++++++++++++
>  hw/i386/pc_piix.c    | 12 +++++-------
>  hw/ppc/spapr.c       |  6 +-----
>  7 files changed, 60 insertions(+), 57 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 20/28] include: remove compat.h
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 20/28] include: remove compat.h Marc-André Lureau
@ 2018-12-21 13:10   ` Cornelia Huck
  2018-12-27  6:56   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 13:10 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:04:02 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> The header is now empty.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/compat.h        | 4 ----
>  include/hw/i386/pc.h       | 1 -
>  hw/arm/virt.c              | 1 -
>  hw/ppc/spapr.c             | 1 -
>  hw/s390x/s390-virtio-ccw.c | 1 -
>  5 files changed, 8 deletions(-)
>  delete mode 100644 include/hw/compat.h

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 21/28] compat: remove remaining PC_COMPAT macros
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 21/28] compat: remove remaining PC_COMPAT macros Marc-André Lureau
@ 2018-12-21 13:12   ` Cornelia Huck
  2018-12-27  6:58   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 13:12 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:04:03 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.  I decided to rename the conflicting
> pc_compat_2_1() function with pc_compat_2_1_fn().
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/i386/pc.h | 236 +++----------------------------------------
>  hw/i386/pc.c         | 232 ++++++++++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c    |  57 ++++-------
>  3 files changed, 267 insertions(+), 258 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 02/28] machines: replace COMPAT define with a static array
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 02/28] machines: replace COMPAT define with a static array Marc-André Lureau
  2018-12-21 12:33   ` Cornelia Huck
@ 2018-12-21 14:17   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-21 14:17 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:44 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  10 +-
>  hw/arm/virt.c              |  45 +--
>  hw/i386/pc_piix.c          | 563 +++++++++++++++++++++----------------
>  hw/i386/pc_q35.c           |  66 ++++-
>  hw/ppc/spapr.c             | 201 ++++++-------
>  hw/s390x/s390-virtio-ccw.c | 219 ++++++++-------
>  6 files changed, 622 insertions(+), 482 deletions(-)

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

[...]

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

* Re: [Qemu-devel] [PATCH v7 03/28] hw: apply machine compat properties without touching globals
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 03/28] hw: apply machine compat properties without touching globals Marc-André Lureau
  2018-12-21 12:38   ` Cornelia Huck
@ 2018-12-21 14:20   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-21 14:20 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:45 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Similarly to accel properties, move compat properties out of globals
> registration, and apply the machine compat properties during
> device_post_init().
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/boards.h        |  3 +-
>  hw/arm/virt.c              | 27 ++++++++----
>  hw/core/machine.c          | 19 +--------
>  hw/core/qdev.c             |  2 +
>  hw/i386/pc_piix.c          | 87 +++++++++++++++++++++++++-------------
>  hw/i386/pc_q35.c           | 33 ++++++++++-----
>  hw/ppc/spapr.c             | 42 ++++++++++++------
>  hw/s390x/s390-virtio-ccw.c | 33 ++++++++++-----
>  vl.c                       |  1 -
>  9 files changed, 152 insertions(+), 95 deletions(-)

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

[...]

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

* Re: [Qemu-devel] [PATCH v7 04/28] machine: move compat properties out of globals
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 04/28] machine: move compat properties out of globals Marc-André Lureau
  2018-12-21 12:44   ` Cornelia Huck
@ 2018-12-21 14:21   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-21 14:21 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:46 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Move the compat arrays inside functions that use them.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  hw/arm/virt.c              |  94 +++--
>  hw/i386/pc_piix.c          | 705 ++++++++++++++++++-------------------
>  hw/i386/pc_q35.c           | 121 +++----
>  hw/ppc/spapr.c             | 254 +++++++------
>  hw/s390x/s390-virtio-ccw.c | 239 ++++++-------
>  hw/xen/xen-common.c        |  38 +-
>  6 files changed, 685 insertions(+), 766 deletions(-)

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 05/28] hw: remove SET_MACHINE_COMPAT
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 05/28] hw: remove SET_MACHINE_COMPAT Marc-André Lureau
  2018-12-21 12:44   ` Cornelia Huck
@ 2018-12-21 14:22   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-21 14:22 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:47 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> No longer needed.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h | 12 ------------
>  1 file changed, 12 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index f02d5a1bbd..f743d9d4a4 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -287,16 +287,4 @@ struct MachineState {
>      } \
>      type_init(machine_initfn##_register_types)
>  
> -#define SET_MACHINE_COMPAT(m, compat) \
> -    do {                              \
> -        int i;                        \
> -        if (!m->compat_props) { \
> -            m->compat_props = g_array_new(false, false, sizeof(void *)); \
> -        } \
> -        for (i = 0; i < G_N_ELEMENTS(compat); i++) {          \
> -            GlobalProperty *prop = &compat[i];          \
> -            g_array_append_val(m->compat_props, prop); \
> -        }                                              \
> -    } while (0)
> -
>  #endif

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

* Re: [Qemu-devel] [PATCH v7 22/28] qdev: make a separate helper function to apply compat properties
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 22/28] qdev: make a separate helper function to apply compat properties Marc-André Lureau
@ 2018-12-21 14:38   ` Igor Mammedov
  2018-12-21 15:25   ` Cornelia Huck
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-21 14:38 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:04:04 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> This will allow to apply compat properties on other objects than QDev easily.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

[...]

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

* Re: [Qemu-devel] [PATCH v7 22/28] qdev: make a separate helper function to apply compat properties
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 22/28] qdev: make a separate helper function to apply compat properties Marc-André Lureau
  2018-12-21 14:38   ` Igor Mammedov
@ 2018-12-21 15:25   ` Cornelia Huck
  1 sibling, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 15:25 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:04:04 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> This will allow to apply compat properties on other objects than QDev easily.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  include/hw/qdev-core.h | 2 ++
>  hw/core/qdev.c         | 6 +++++-
>  2 files changed, 7 insertions(+), 1 deletion(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 23/28] qdev: all globals are now user-provided
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 23/28] qdev: all globals are now user-provided Marc-André Lureau
@ 2018-12-21 15:26   ` Cornelia Huck
  0 siblings, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 15:26 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:04:05 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> All globals are now either provided via -global or through -cpu
> features (CPU features are implemented by registering globals).
> 
> If the global isn't being used, it should warn in either case.
> 
> We can thus consider that all global_props are "user-provided"
> globals. No need to track this per-globals anymore.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
>  include/hw/qdev-core.h         |  3 --
>  hw/core/qdev-properties.c      |  4 ---
>  tests/test-qdev-global-props.c | 57 ++++------------------------------
>  vl.c                           |  1 -
>  4 files changed, 6 insertions(+), 59 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 24/28] qdev-props: convert global_props to GPtrArray
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 24/28] qdev-props: convert global_props to GPtrArray Marc-André Lureau
@ 2018-12-21 15:28   ` Cornelia Huck
  0 siblings, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 15:28 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:04:06 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> A step towards being able to call a common function,
> object_apply_global_props().
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
>  hw/core/qdev-properties.c | 29 ++++++++++++++++++++---------
>  1 file changed, 20 insertions(+), 9 deletions(-)
> 

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 25/28] qdev-props: remove errp from GlobalProperty
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 25/28] qdev-props: remove errp from GlobalProperty Marc-André Lureau
@ 2018-12-21 15:34   ` Cornelia Huck
  2019-01-04 10:57     ` Marc-André Lureau
  0 siblings, 1 reply; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 15:34 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:04:07 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> All qdev_prop_register_global() set &error_fatal for errp, except
> '-rtc driftfix=slew', which arguably should also use &error_fatal, as
> otherwise failing to apply the property would only report a warning.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
>  include/hw/qdev-core.h    | 6 ------
>  hw/core/qdev-properties.c | 4 ++--
>  qom/cpu.c                 | 1 -
>  target/i386/cpu.c         | 1 -
>  target/sparc/cpu.c        | 1 -
>  vl.c                      | 1 -
>  6 files changed, 2 insertions(+), 12 deletions(-)
> 

> diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> index 3467e0485c..a2d25d3d37 100644
> --- a/hw/core/qdev-properties.c
> +++ b/hw/core/qdev-properties.c
> @@ -1238,8 +1238,8 @@ void qdev_prop_set_globals(DeviceState *dev)
>          if (err != NULL) {
>              error_prepend(&err, "can't apply global %s.%s=%s: ",
>                            prop->driver, prop->property, prop->value);
> -            if (!dev->hotplugged && prop->errp) {
> -                error_propagate(prop->errp, err);
> +            if (!dev->hotplugged) {
> +                error_propagate(&error_fatal, err);

Might want to add a comment to this function that any error is fatal
for non-hotplugged devices.

>              } else {
>                  warn_report_err(err);
>              }

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 26/28] qdev-props: call object_apply_global_props()
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 26/28] qdev-props: call object_apply_global_props() Marc-André Lureau
@ 2018-12-21 15:35   ` Cornelia Huck
  0 siblings, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2018-12-21 15:35 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, imammedo, ehabkost

On Fri, 21 Dec 2018 13:04:08 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> It's now possible to use the common function.
> 
> Teach object_apply_global_props() to warn if Error argument is NULL.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
>  hw/core/qdev-properties.c | 24 ++----------------------
>  qom/object.c              | 12 +++++++++++-
>  2 files changed, 13 insertions(+), 23 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

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

* Re: [Qemu-devel] [PATCH v7 06/28] compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 06/28] compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros Marc-André Lureau
  2018-12-21 12:47   ` Cornelia Huck
@ 2018-12-27  6:35   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:35 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:48 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        | 3 +++
>  include/hw/compat.h        | 3 ---
>  include/hw/i386/pc.h       | 4 ++--
>  hw/arm/virt.c              | 6 +-----
>  hw/core/machine.c          | 3 +++
>  hw/i386/pc.c               | 3 +++
>  hw/i386/pc_piix.c          | 7 ++-----
>  hw/i386/pc_q35.c           | 7 ++-----
>  hw/ppc/spapr.c             | 6 +-----
>  hw/s390x/s390-virtio-ccw.c | 6 +-----
>  10 files changed, 18 insertions(+), 30 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index f743d9d4a4..dc8c748c62 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -287,4 +287,7 @@ struct MachineState {
>      } \
>      type_init(machine_initfn##_register_types)
>  
> +extern GlobalProperty hw_compat_3_1[];
> +extern const size_t hw_compat_3_1_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index 70958328fe..6f4d5fc647 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,9 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_3_1 \
> -    /* empty */
> -
>  #define HW_COMPAT_3_0 \
>      /* empty */
>  
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 9d29c4b1df..dd1d6fd0f3 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -294,8 +294,8 @@ int e820_add_entry(uint64_t, uint64_t, uint32_t);
>  int e820_get_num_entries(void);
>  bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
>  
> -#define PC_COMPAT_3_1 \
> -    HW_COMPAT_3_1 \
> +extern GlobalProperty pc_compat_3_1[];
> +extern const size_t pc_compat_3_1_len;
>  
>  #define PC_COMPAT_3_0 \
>      HW_COMPAT_3_0 \
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index caa61c6201..b1ecccfaab 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1874,12 +1874,8 @@ DEFINE_VIRT_MACHINE_AS_LATEST(4, 0)
>  
>  static void virt_machine_3_1_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_3_1
> -    };
> -
>      virt_machine_4_0_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_3_1, hw_compat_3_1_len);
>  }
>  DEFINE_VIRT_MACHINE(3, 1)
>  
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 6e24924aba..bdeeda68e4 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -22,6 +22,9 @@
>  #include "qemu/error-report.h"
>  #include "sysemu/qtest.h"
>  
> +GlobalProperty hw_compat_3_1[] = {};
> +const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 115bc2825c..74d8a82f64 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -109,6 +109,9 @@ static struct e820_entry *e820_table;
>  static unsigned e820_entries;
>  struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX};
>  
> +GlobalProperty pc_compat_3_1[] = {};
> +const size_t pc_compat_3_1_len = G_N_ELEMENTS(pc_compat_3_1);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index d1abe637f1..5342019d83 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -440,14 +440,11 @@ DEFINE_I440FX_MACHINE(v4_0, "pc-i440fx-4.0", NULL,
>  
>  static void pc_i440fx_3_1_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_3_1
> -    };
> -
>      pc_i440fx_4_0_machine_options(m);
>      m->is_default = 0;
>      m->alias = NULL;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_3_1, hw_compat_3_1_len);
> +    compat_props_add(m->compat_props, pc_compat_3_1, pc_compat_3_1_len);
>  }
>  
>  DEFINE_I440FX_MACHINE(v3_1, "pc-i440fx-3.1", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index c18bfd68c6..1eb1e82b25 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -322,13 +322,10 @@ DEFINE_Q35_MACHINE(v4_0, "pc-q35-4.0", NULL,
>  
>  static void pc_q35_3_1_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_3_1
> -    };
> -
>      pc_q35_4_0_machine_options(m);
>      m->alias = NULL;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_3_1, hw_compat_3_1_len);
> +    compat_props_add(m->compat_props, pc_compat_3_1, pc_compat_3_1_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v3_1, "pc-q35-3.1", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 2313362ff2..038d1859a6 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -3965,12 +3965,8 @@ DEFINE_SPAPR_MACHINE(4_0, "4.0", true);
>   */
>  static void spapr_machine_3_1_class_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_3_1
> -    };
> -
>      spapr_machine_4_0_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_3_1, hw_compat_3_1_len);
>  }
>  
>  DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 21f3325c5a..5e8b48e75b 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -667,12 +667,8 @@ static void ccw_machine_3_1_instance_options(MachineState *machine)
>  
>  static void ccw_machine_3_1_class_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_3_1
> -    };
> -
>      ccw_machine_4_0_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_3_1, hw_compat_3_1_len);
>  }
>  DEFINE_CCW_MACHINE(3_1, "3.1", false);
>  

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

* Re: [Qemu-devel] [PATCH v7 07/28] compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 07/28] compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros Marc-André Lureau
  2018-12-21 12:50   ` Cornelia Huck
@ 2018-12-27  6:37   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:37 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:49 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        |  3 ---
>  include/hw/i386/pc.h       | 17 ++---------------
>  hw/arm/virt.c              |  6 +-----
>  hw/core/machine.c          |  3 +++
>  hw/i386/pc.c               | 17 +++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  5 +----
>  hw/s390x/s390-virtio-ccw.c |  5 +----
>  10 files changed, 32 insertions(+), 41 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index dc8c748c62..6b94d36d6a 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -290,4 +290,7 @@ struct MachineState {
>  extern GlobalProperty hw_compat_3_1[];
>  extern const size_t hw_compat_3_1_len;
>  
> +extern GlobalProperty hw_compat_3_0[];
> +extern const size_t hw_compat_3_0_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index 6f4d5fc647..c08f4040bb 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,9 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_3_0 \
> -    /* empty */
> -
>  #define HW_COMPAT_2_12 \
>      {\
>          .driver   = "migration",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index dd1d6fd0f3..197131ff9a 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -297,21 +297,8 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
>  extern GlobalProperty pc_compat_3_1[];
>  extern const size_t pc_compat_3_1_len;
>  
> -#define PC_COMPAT_3_0 \
> -    HW_COMPAT_3_0 \
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "x-hv-synic-kvm-only",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "Skylake-Server" "-" TYPE_X86_CPU,\
> -        .property = "pku",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "Skylake-Server-IBRS" "-" TYPE_X86_CPU,\
> -        .property = "pku",\
> -        .value    = "off",\
> -    },
> +extern GlobalProperty pc_compat_3_0[];
> +extern const size_t pc_compat_3_0_len;
>  
>  #define PC_COMPAT_2_12 \
>      HW_COMPAT_2_12 \
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index b1ecccfaab..d226e7922e 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1881,12 +1881,8 @@ DEFINE_VIRT_MACHINE(3, 1)
>  
>  static void virt_machine_3_0_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_3_0
> -    };
> -
>      virt_machine_3_1_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_3_0, hw_compat_3_0_len);
>  }
>  DEFINE_VIRT_MACHINE(3, 0)
>  
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index bdeeda68e4..cd55366f2e 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -25,6 +25,9 @@
>  GlobalProperty hw_compat_3_1[] = {};
>  const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
>  
> +GlobalProperty hw_compat_3_0[] = {};
> +const size_t hw_compat_3_0_len = G_N_ELEMENTS(hw_compat_3_0);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 74d8a82f64..7b9271a7ff 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -112,6 +112,23 @@ struct hpet_fw_config hpet_cfg = {.count = UINT8_MAX};
>  GlobalProperty pc_compat_3_1[] = {};
>  const size_t pc_compat_3_1_len = G_N_ELEMENTS(pc_compat_3_1);
>  
> +GlobalProperty pc_compat_3_0[] = {
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "x-hv-synic-kvm-only",
> +        .value    = "on",
> +    },{
> +        .driver   = "Skylake-Server" "-" TYPE_X86_CPU,
> +        .property = "pku",
> +        .value    = "off",
> +    },{
> +        .driver   = "Skylake-Server-IBRS" "-" TYPE_X86_CPU,
> +        .property = "pku",
> +        .value    = "off",
> +    },
> +};
> +const size_t pc_compat_3_0_len = G_N_ELEMENTS(pc_compat_3_0);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 5342019d83..c1a9a10911 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -452,12 +452,9 @@ DEFINE_I440FX_MACHINE(v3_1, "pc-i440fx-3.1", NULL,
>  
>  static void pc_i440fx_3_0_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_3_0
> -    };
> -
>      pc_i440fx_3_1_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_3_0, hw_compat_3_0_len);
> +    compat_props_add(m->compat_props, pc_compat_3_0, pc_compat_3_0_len);
>  }
>  
>  DEFINE_I440FX_MACHINE(v3_0, "pc-i440fx-3.0", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 1eb1e82b25..231b1269d1 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -333,12 +333,9 @@ DEFINE_Q35_MACHINE(v3_1, "pc-q35-3.1", NULL,
>  
>  static void pc_q35_3_0_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_3_0
> -    };
> -
>      pc_q35_3_1_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_3_0, hw_compat_3_0_len);
> +    compat_props_add(m->compat_props, pc_compat_3_0, pc_compat_3_0_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v3_0, "pc-q35-3.0", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 038d1859a6..5c4c6be22f 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -3978,12 +3978,9 @@ DEFINE_SPAPR_MACHINE(3_1, "3.1", false);
>  static void spapr_machine_3_0_class_options(MachineClass *mc)
>  {
>      sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_3_0
> -    };
>  
>      spapr_machine_3_1_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_3_0, hw_compat_3_0_len);
>  
>      smc->legacy_irq_allocation = true;
>      smc->irq = &spapr_irq_xics_legacy;
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 5e8b48e75b..e54e6f6dd0 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -680,13 +680,10 @@ static void ccw_machine_3_0_instance_options(MachineState *machine)
>  static void ccw_machine_3_0_class_options(MachineClass *mc)
>  {
>      S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_3_0
> -    };
>  
>      s390mc->hpage_1m_allowed = false;
>      ccw_machine_3_1_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_3_0, hw_compat_3_0_len);
>  }
>  DEFINE_CCW_MACHINE(3_0, "3.0", false);
>  

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

* Re: [Qemu-devel] [PATCH v7 08/28] compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 08/28] compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros Marc-André Lureau
  2018-12-21 12:52   ` Cornelia Huck
@ 2018-12-27  6:39   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:39 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:50 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 27 ---------------------------
>  include/hw/i386/pc.h       | 21 ++-------------------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 29 +++++++++++++++++++++++++++++
>  hw/i386/pc.c               | 21 +++++++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  6 +-----
>  10 files changed, 62 insertions(+), 66 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index 6b94d36d6a..b06444ffed 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -293,4 +293,7 @@ extern const size_t hw_compat_3_1_len;
>  extern GlobalProperty hw_compat_3_0[];
>  extern const size_t hw_compat_3_0_len;
>  
> +extern GlobalProperty hw_compat_2_12[];
> +extern const size_t hw_compat_2_12_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index c08f4040bb..13242b831a 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,33 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_12 \
> -    {\
> -        .driver   = "migration",\
> -        .property = "decompress-error-check",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "hda-audio",\
> -        .property = "use-timer",\
> -        .value    = "false",\
> -    },{\
> -        .driver   = "cirrus-vga",\
> -        .property = "global-vmstate",\
> -        .value    = "true",\
> -    },{\
> -        .driver   = "VGA",\
> -        .property = "global-vmstate",\
> -        .value    = "true",\
> -    },{\
> -        .driver   = "vmware-svga",\
> -        .property = "global-vmstate",\
> -        .value    = "true",\
> -    },{\
> -        .driver   = "qxl-vga",\
> -        .property = "global-vmstate",\
> -        .value    = "true",\
> -    },
> -
>  #define HW_COMPAT_2_11 \
>      {\
>          .driver   = "hpet",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 197131ff9a..91cb3283f0 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -300,25 +300,8 @@ extern const size_t pc_compat_3_1_len;
>  extern GlobalProperty pc_compat_3_0[];
>  extern const size_t pc_compat_3_0_len;
>  
> -#define PC_COMPAT_2_12 \
> -    HW_COMPAT_2_12 \
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "legacy-cache",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "topoext",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "EPYC-" TYPE_X86_CPU,\
> -        .property = "xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "EPYC-IBPB-" TYPE_X86_CPU,\
> -        .property = "xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },
> +extern GlobalProperty pc_compat_2_12[];
> +extern const size_t pc_compat_2_12_len;
>  
>  #define PC_COMPAT_2_11 \
>      HW_COMPAT_2_11 \
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index d226e7922e..1b39d9845b 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1889,12 +1889,9 @@ DEFINE_VIRT_MACHINE(3, 0)
>  static void virt_machine_2_12_options(MachineClass *mc)
>  {
>      VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_12
> -    };
>  
>      virt_machine_3_0_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_12, hw_compat_2_12_len);
>      vmc->no_highmem_ecam = true;
>      mc->max_cpus = 255;
>  }
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index cd55366f2e..447fe1db6b 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -28,6 +28,35 @@ const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
>  GlobalProperty hw_compat_3_0[] = {};
>  const size_t hw_compat_3_0_len = G_N_ELEMENTS(hw_compat_3_0);
>  
> +GlobalProperty hw_compat_2_12[] = {
> +    {
> +        .driver   = "migration",
> +        .property = "decompress-error-check",
> +        .value    = "off",
> +    },{
> +        .driver   = "hda-audio",
> +        .property = "use-timer",
> +        .value    = "false",
> +    },{
> +        .driver   = "cirrus-vga",
> +        .property = "global-vmstate",
> +        .value    = "true",
> +    },{
> +        .driver   = "VGA",
> +        .property = "global-vmstate",
> +        .value    = "true",
> +    },{
> +        .driver   = "vmware-svga",
> +        .property = "global-vmstate",
> +        .value    = "true",
> +    },{
> +        .driver   = "qxl-vga",
> +        .property = "global-vmstate",
> +        .value    = "true",
> +    },
> +};
> +const size_t hw_compat_2_12_len = G_N_ELEMENTS(hw_compat_2_12);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 7b9271a7ff..84fe7e49af 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -129,6 +129,27 @@ GlobalProperty pc_compat_3_0[] = {
>  };
>  const size_t pc_compat_3_0_len = G_N_ELEMENTS(pc_compat_3_0);
>  
> +GlobalProperty pc_compat_2_12[] = {
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "legacy-cache",
> +        .value    = "on",
> +    },{
> +        .driver   = TYPE_X86_CPU,
> +        .property = "topoext",
> +        .value    = "off",
> +    },{
> +        .driver   = "EPYC-" TYPE_X86_CPU,
> +        .property = "xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "EPYC-IBPB-" TYPE_X86_CPU,
> +        .property = "xlevel",
> +        .value    = stringify(0x8000000a),
> +    },
> +};
> +const size_t pc_compat_2_12_len = G_N_ELEMENTS(pc_compat_2_12);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index c1a9a10911..16dda48c56 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -462,12 +462,9 @@ DEFINE_I440FX_MACHINE(v3_0, "pc-i440fx-3.0", NULL,
>  
>  static void pc_i440fx_2_12_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_12
> -    };
> -
>      pc_i440fx_3_0_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_12, hw_compat_2_12_len);
> +    compat_props_add(m->compat_props, pc_compat_2_12, pc_compat_2_12_len);
>  }
>  
>  DEFINE_I440FX_MACHINE(v2_12, "pc-i440fx-2.12", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 231b1269d1..86f08441d6 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -343,12 +343,9 @@ DEFINE_Q35_MACHINE(v3_0, "pc-q35-3.0", NULL,
>  
>  static void pc_q35_2_12_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_12
> -    };
> -
>      pc_q35_3_0_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_12, hw_compat_2_12_len);
> +    compat_props_add(m->compat_props, pc_compat_2_12, pc_compat_2_12_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v2_12, "pc-q35-2.12", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 5c4c6be22f..63453f688f 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -3995,7 +3995,6 @@ static void spapr_machine_2_12_class_options(MachineClass *mc)
>  {
>      sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_12
>          {
>              .driver = TYPE_POWERPC_CPU,
>              .property = "pre-3.0-migration",
> @@ -4009,6 +4008,7 @@ static void spapr_machine_2_12_class_options(MachineClass *mc)
>      };
>  
>      spapr_machine_3_0_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_12, hw_compat_2_12_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>  
>      /* We depend on kvm_enabled() to choose a default value for the
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index e54e6f6dd0..ce22a9d511 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -696,12 +696,8 @@ static void ccw_machine_2_12_instance_options(MachineState *machine)
>  
>  static void ccw_machine_2_12_class_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_12
> -    };
> -
>      ccw_machine_3_0_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_12, hw_compat_2_12_len);
>  }
>  DEFINE_CCW_MACHINE(2_12, "2.12", false);
>  

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

* Re: [Qemu-devel] [PATCH v7 09/28] compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 09/28] compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros Marc-André Lureau
  2018-12-21 12:53   ` Cornelia Huck
@ 2018-12-27  6:40   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:40 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:51 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 19 -------------------
>  include/hw/i386/pc.h       | 13 ++-----------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 21 +++++++++++++++++++++
>  hw/i386/pc.c               | 13 +++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  5 +----
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  10 files changed, 46 insertions(+), 49 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index b06444ffed..59c3c4b75e 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -296,4 +296,7 @@ extern const size_t hw_compat_3_0_len;
>  extern GlobalProperty hw_compat_2_12[];
>  extern const size_t hw_compat_2_12_len;
>  
> +extern GlobalProperty hw_compat_2_11[];
> +extern const size_t hw_compat_2_11_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index 13242b831a..cf389b4e85 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,25 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_11 \
> -    {\
> -        .driver   = "hpet",\
> -        .property = "hpet-offset-saved",\
> -        .value    = "false",\
> -    },{\
> -        .driver   = "virtio-blk-pci",\
> -        .property = "vectors",\
> -        .value    = "2",\
> -    },{\
> -        .driver   = "vhost-user-blk-pci",\
> -        .property = "vectors",\
> -        .value    = "2",\
> -    },{\
> -        .driver   = "e1000",\
> -        .property = "migrate_tso_props",\
> -        .value    = "off",\
> -    },
> -
>  #define HW_COMPAT_2_10 \
>      {\
>          .driver   = "virtio-mouse-device",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 91cb3283f0..f0f7e76a3e 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -303,17 +303,8 @@ extern const size_t pc_compat_3_0_len;
>  extern GlobalProperty pc_compat_2_12[];
>  extern const size_t pc_compat_2_12_len;
>  
> -#define PC_COMPAT_2_11 \
> -    HW_COMPAT_2_11 \
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "x-migrate-smi-count",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "Skylake-Server" "-" TYPE_X86_CPU,\
> -        .property = "clflushopt",\
> -        .value    = "off",\
> -    },
> +extern GlobalProperty pc_compat_2_11[];
> +extern const size_t pc_compat_2_11_len;
>  
>  #define PC_COMPAT_2_10 \
>      HW_COMPAT_2_10 \
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 1b39d9845b..b7aabd4ac7 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1900,12 +1900,9 @@ DEFINE_VIRT_MACHINE(2, 12)
>  static void virt_machine_2_11_options(MachineClass *mc)
>  {
>      VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_11
> -    };
>  
>      virt_machine_2_12_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_11, hw_compat_2_11_len);
>      vmc->smbios_old_sys_ver = true;
>  }
>  DEFINE_VIRT_MACHINE(2, 11)
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 447fe1db6b..e8f715542a 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -57,6 +57,27 @@ GlobalProperty hw_compat_2_12[] = {
>  };
>  const size_t hw_compat_2_12_len = G_N_ELEMENTS(hw_compat_2_12);
>  
> +GlobalProperty hw_compat_2_11[] = {
> +    {
> +        .driver   = "hpet",
> +        .property = "hpet-offset-saved",
> +        .value    = "false",
> +    },{
> +        .driver   = "virtio-blk-pci",
> +        .property = "vectors",
> +        .value    = "2",
> +    },{
> +        .driver   = "vhost-user-blk-pci",
> +        .property = "vectors",
> +        .value    = "2",
> +    },{
> +        .driver   = "e1000",
> +        .property = "migrate_tso_props",
> +        .value    = "off",
> +    },
> +};
> +const size_t hw_compat_2_11_len = G_N_ELEMENTS(hw_compat_2_11);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 84fe7e49af..e42a1eae51 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -150,6 +150,19 @@ GlobalProperty pc_compat_2_12[] = {
>  };
>  const size_t pc_compat_2_12_len = G_N_ELEMENTS(pc_compat_2_12);
>  
> +GlobalProperty pc_compat_2_11[] = {
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "x-migrate-smi-count",
> +        .value    = "off",
> +    },{
> +        .driver   = "Skylake-Server" "-" TYPE_X86_CPU,
> +        .property = "clflushopt",
> +        .value    = "off",
> +    },
> +};
> +const size_t pc_compat_2_11_len = G_N_ELEMENTS(pc_compat_2_11);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 16dda48c56..32daebc05e 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -472,12 +472,9 @@ DEFINE_I440FX_MACHINE(v2_12, "pc-i440fx-2.12", NULL,
>  
>  static void pc_i440fx_2_11_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_11
> -    };
> -
>      pc_i440fx_2_12_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_11, hw_compat_2_11_len);
> +    compat_props_add(m->compat_props, pc_compat_2_11, pc_compat_2_11_len);
>  }
>  
>  DEFINE_I440FX_MACHINE(v2_11, "pc-i440fx-2.11", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 86f08441d6..bc195b8c58 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -354,14 +354,11 @@ DEFINE_Q35_MACHINE(v2_12, "pc-q35-2.12", NULL,
>  static void pc_q35_2_11_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_11
> -    };
> -
>  
>      pc_q35_2_12_machine_options(m);
>      pcmc->default_nic_model = "e1000";
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_11, hw_compat_2_11_len);
> +    compat_props_add(m->compat_props, pc_compat_2_11, pc_compat_2_11_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v2_11, "pc-q35-2.11", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 63453f688f..88e2c8df71 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4040,13 +4040,10 @@ DEFINE_SPAPR_MACHINE(2_12_sxxm, "2.12-sxxm", false);
>  static void spapr_machine_2_11_class_options(MachineClass *mc)
>  {
>      sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_11
> -    };
>  
>      spapr_machine_2_12_class_options(mc);
>      smc->default_caps.caps[SPAPR_CAP_HTM] = SPAPR_CAP_ON;
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_11, hw_compat_2_11_len);
>  }
>  
>  DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index ce22a9d511..74623becaf 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -713,7 +713,6 @@ static void ccw_machine_2_11_instance_options(MachineState *machine)
>  static void ccw_machine_2_11_class_options(MachineClass *mc)
>  {
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_11
>          {
>              .driver   = TYPE_SCLP_EVENT_FACILITY,
>              .property = "allow_all_mask_sizes",
> @@ -722,6 +721,7 @@ static void ccw_machine_2_11_class_options(MachineClass *mc)
>      };
>  
>      ccw_machine_2_12_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_11, hw_compat_2_11_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>  }
>  DEFINE_CCW_MACHINE(2_11, "2.11", false);

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

* Re: [Qemu-devel] [PATCH v7 10/28] compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 10/28] compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros Marc-André Lureau
  2018-12-21 12:55   ` Cornelia Huck
@ 2018-12-27  6:41   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:41 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:52 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 11 -----------
>  include/hw/i386/pc.h       | 17 ++---------------
>  hw/arm/virt.c              |  6 +-----
>  hw/core/machine.c          | 13 +++++++++++++
>  hw/i386/pc.c               | 17 +++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  6 +-----
>  hw/s390x/s390-virtio-ccw.c |  6 +-----
>  10 files changed, 42 insertions(+), 51 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index 59c3c4b75e..f701b66183 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -299,4 +299,7 @@ extern const size_t hw_compat_2_12_len;
>  extern GlobalProperty hw_compat_2_11[];
>  extern const size_t hw_compat_2_11_len;
>  
> +extern GlobalProperty hw_compat_2_10[];
> +extern const size_t hw_compat_2_10_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index cf389b4e85..f414786604 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,17 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_10 \
> -    {\
> -        .driver   = "virtio-mouse-device",\
> -        .property = "wheel-axis",\
> -        .value    = "false",\
> -    },{\
> -        .driver   = "virtio-tablet-device",\
> -        .property = "wheel-axis",\
> -        .value    = "false",\
> -    },
> -
>  #define HW_COMPAT_2_9 \
>      {\
>          .driver   = "pci-bridge",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index f0f7e76a3e..d77843a711 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -306,21 +306,8 @@ extern const size_t pc_compat_2_12_len;
>  extern GlobalProperty pc_compat_2_11[];
>  extern const size_t pc_compat_2_11_len;
>  
> -#define PC_COMPAT_2_10 \
> -    HW_COMPAT_2_10 \
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "x-hv-max-vps",\
> -        .value    = "0x40",\
> -    },{\
> -        .driver   = "i440FX-pcihost",\
> -        .property = "x-pci-hole64-fix",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "q35-pcihost",\
> -        .property = "x-pci-hole64-fix",\
> -        .value    = "off",\
> -    },
> +extern GlobalProperty pc_compat_2_10[];
> +extern const size_t pc_compat_2_10_len;
>  
>  #define PC_COMPAT_2_9 \
>      HW_COMPAT_2_9 \
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index b7aabd4ac7..e382bdfd96 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1909,12 +1909,8 @@ DEFINE_VIRT_MACHINE(2, 11)
>  
>  static void virt_machine_2_10_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_10
> -    };
> -
>      virt_machine_2_11_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_10, hw_compat_2_10_len);
>      /* before 2.11 we never faulted accesses to bad addresses */
>      mc->ignore_memory_transaction_failures = true;
>  }
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index e8f715542a..7ab83bf4e2 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -78,6 +78,19 @@ GlobalProperty hw_compat_2_11[] = {
>  };
>  const size_t hw_compat_2_11_len = G_N_ELEMENTS(hw_compat_2_11);
>  
> +GlobalProperty hw_compat_2_10[] = {
> +    {
> +        .driver   = "virtio-mouse-device",
> +        .property = "wheel-axis",
> +        .value    = "false",
> +    },{
> +        .driver   = "virtio-tablet-device",
> +        .property = "wheel-axis",
> +        .value    = "false",
> +    },
> +};
> +const size_t hw_compat_2_10_len = G_N_ELEMENTS(hw_compat_2_10);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index e42a1eae51..71b3b2e1d8 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -163,6 +163,23 @@ GlobalProperty pc_compat_2_11[] = {
>  };
>  const size_t pc_compat_2_11_len = G_N_ELEMENTS(pc_compat_2_11);
>  
> +GlobalProperty pc_compat_2_10[] = {
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "x-hv-max-vps",
> +        .value    = "0x40",
> +    },{
> +        .driver   = "i440FX-pcihost",
> +        .property = "x-pci-hole64-fix",
> +        .value    = "off",
> +    },{
> +        .driver   = "q35-pcihost",
> +        .property = "x-pci-hole64-fix",
> +        .value    = "off",
> +    },
> +};
> +const size_t pc_compat_2_10_len = G_N_ELEMENTS(pc_compat_2_10);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 32daebc05e..d3e795de20 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -482,12 +482,9 @@ DEFINE_I440FX_MACHINE(v2_11, "pc-i440fx-2.11", NULL,
>  
>  static void pc_i440fx_2_10_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_10
> -    };
> -
>      pc_i440fx_2_11_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_10, hw_compat_2_10_len);
> +    compat_props_add(m->compat_props, pc_compat_2_10, pc_compat_2_10_len);
>      m->auto_enable_numa_with_memhp = false;
>  }
>  
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index bc195b8c58..8d708cd163 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -366,12 +366,9 @@ DEFINE_Q35_MACHINE(v2_11, "pc-q35-2.11", NULL,
>  
>  static void pc_q35_2_10_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_10
> -    };
> -
>      pc_q35_2_11_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_10, hw_compat_2_10_len);
> +    compat_props_add(m->compat_props, pc_compat_2_10, pc_compat_2_10_len);
>      m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
>      m->auto_enable_numa_with_memhp = false;
>  }
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 88e2c8df71..10e91d857c 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4054,12 +4054,8 @@ DEFINE_SPAPR_MACHINE(2_11, "2.11", false);
>  
>  static void spapr_machine_2_10_class_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_10
> -    };
> -
>      spapr_machine_2_11_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_10, hw_compat_2_10_len);
>  }
>  
>  DEFINE_SPAPR_MACHINE(2_10, "2.10", false);
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 74623becaf..95ad7ba842 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -733,12 +733,8 @@ static void ccw_machine_2_10_instance_options(MachineState *machine)
>  
>  static void ccw_machine_2_10_class_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_10
> -    };
> -
>      ccw_machine_2_11_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_10, hw_compat_2_10_len);
>  }
>  DEFINE_CCW_MACHINE(2_10, "2.10", false);
>  

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

* Re: [Qemu-devel] [PATCH v7 11/28] compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 11/28] compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros Marc-André Lureau
  2018-12-21 12:56   ` Cornelia Huck
@ 2018-12-27  6:44   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:44 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:53 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 19 -------------------
>  include/hw/i386/pc.h       |  9 ++-------
>  hw/arm/virt.c              |  6 +-----
>  hw/core/machine.c          | 21 +++++++++++++++++++++
>  hw/i386/pc.c               |  9 +++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  10 files changed, 42 insertions(+), 43 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index f701b66183..226d6cfaa7 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -302,4 +302,7 @@ extern const size_t hw_compat_2_11_len;
>  extern GlobalProperty hw_compat_2_10[];
>  extern const size_t hw_compat_2_10_len;
>  
> +extern GlobalProperty hw_compat_2_9[];
> +extern const size_t hw_compat_2_9_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index f414786604..ef154ca470 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,25 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_9 \
> -    {\
> -        .driver   = "pci-bridge",\
> -        .property = "shpc",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "intel-iommu",\
> -        .property = "pt",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-net-device",\
> -        .property = "x-mtu-bypass-backend",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "pcie-root-port",\
> -        .property = "x-migrate-msix",\
> -        .value    = "false",\
> -    },
> -
>  #define HW_COMPAT_2_8 \
>      {\
>          .driver   = "fw_cfg_mem",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index d77843a711..fb79f0b988 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -309,13 +309,8 @@ extern const size_t pc_compat_2_11_len;
>  extern GlobalProperty pc_compat_2_10[];
>  extern const size_t pc_compat_2_10_len;
>  
> -#define PC_COMPAT_2_9 \
> -    HW_COMPAT_2_9 \
> -    {\
> -        .driver   = "mch",\
> -        .property = "extended-tseg-mbytes",\
> -        .value    = stringify(0),\
> -    },\
> +extern GlobalProperty pc_compat_2_9[];
> +extern const size_t pc_compat_2_9_len;
>  
>  #define PC_COMPAT_2_8 \
>      HW_COMPAT_2_8 \
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index e382bdfd96..2db46567bb 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1918,12 +1918,8 @@ DEFINE_VIRT_MACHINE(2, 10)
>  
>  static void virt_machine_2_9_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_9
> -    };
> -
>      virt_machine_2_10_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_9, hw_compat_2_9_len);
>  }
>  DEFINE_VIRT_MACHINE(2, 9)
>  
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 7ab83bf4e2..2d7e774a5d 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -91,6 +91,27 @@ GlobalProperty hw_compat_2_10[] = {
>  };
>  const size_t hw_compat_2_10_len = G_N_ELEMENTS(hw_compat_2_10);
>  
> +GlobalProperty hw_compat_2_9[] = {
> +    {
> +        .driver   = "pci-bridge",
> +        .property = "shpc",
> +        .value    = "off",
> +    },{
> +        .driver   = "intel-iommu",
> +        .property = "pt",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-net-device",
> +        .property = "x-mtu-bypass-backend",
> +        .value    = "off",
> +    },{
> +        .driver   = "pcie-root-port",
> +        .property = "x-migrate-msix",
> +        .value    = "false",
> +    },
> +};
> +const size_t hw_compat_2_9_len = G_N_ELEMENTS(hw_compat_2_9);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 71b3b2e1d8..f36cc5f79c 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -180,6 +180,15 @@ GlobalProperty pc_compat_2_10[] = {
>  };
>  const size_t pc_compat_2_10_len = G_N_ELEMENTS(pc_compat_2_10);
>  
> +GlobalProperty pc_compat_2_9[] = {
> +    {
> +        .driver   = "mch",
> +        .property = "extended-tseg-mbytes",
> +        .value    = stringify(0),
> +    },
> +};
> +const size_t pc_compat_2_9_len = G_N_ELEMENTS(pc_compat_2_9);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index d3e795de20..5bc3ad0331 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -493,12 +493,9 @@ DEFINE_I440FX_MACHINE(v2_10, "pc-i440fx-2.10", NULL,
>  
>  static void pc_i440fx_2_9_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_9
> -    };
> -
>      pc_i440fx_2_10_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_9, hw_compat_2_9_len);
> +    compat_props_add(m->compat_props, pc_compat_2_9, pc_compat_2_9_len);
>      m->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
>  }
>  
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 8d708cd163..4e57830a6d 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -378,12 +378,9 @@ DEFINE_Q35_MACHINE(v2_10, "pc-q35-2.10", NULL,
>  
>  static void pc_q35_2_9_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_9
> -    };
> -
>      pc_q35_2_10_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_9, hw_compat_2_9_len);
> +    compat_props_add(m->compat_props, pc_compat_2_9, pc_compat_2_9_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v2_9, "pc-q35-2.9", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 10e91d857c..7aa3a09ed4 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4068,7 +4068,6 @@ static void spapr_machine_2_9_class_options(MachineClass *mc)
>  {
>      sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_9
>          {
>              .driver = TYPE_POWERPC_CPU,
>              .property = "pre-2.10-migration",
> @@ -4077,6 +4076,7 @@ static void spapr_machine_2_9_class_options(MachineClass *mc)
>      };
>  
>      spapr_machine_2_10_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_9, hw_compat_2_9_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>      mc->numa_auto_assign_ram = numa_legacy_auto_assign_ram;
>      smc->pre_2_10_has_unused_icps = true;
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 95ad7ba842..549f6e0231 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -752,7 +752,6 @@ static void ccw_machine_2_9_class_options(MachineClass *mc)
>  {
>      S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_9
>          {
>              .driver   = TYPE_S390_STATTRIB,
>              .property = "migration-enabled",
> @@ -761,6 +760,7 @@ static void ccw_machine_2_9_class_options(MachineClass *mc)
>      };
>  
>      ccw_machine_2_10_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_9, hw_compat_2_9_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>      s390mc->css_migration_enabled = false;
>  }

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

* Re: [Qemu-devel] [PATCH v7 12/28] compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 12/28] compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros Marc-André Lureau
  2018-12-21 12:58   ` Cornelia Huck
@ 2018-12-27  6:45   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:45 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:54 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 43 -----------------------------------
>  include/hw/i386/pc.h       | 29 ++----------------------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 46 ++++++++++++++++++++++++++++++++++++++
>  hw/i386/pc.c               | 29 ++++++++++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++----
>  hw/i386/pc_q35.c           |  7 ++----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  10 files changed, 87 insertions(+), 86 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index 226d6cfaa7..f8aa034d0e 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -305,4 +305,7 @@ extern const size_t hw_compat_2_10_len;
>  extern GlobalProperty hw_compat_2_9[];
>  extern const size_t hw_compat_2_9_len;
>  
> +extern GlobalProperty hw_compat_2_8[];
> +extern const size_t hw_compat_2_8_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index ef154ca470..65d6748054 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,49 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_8 \
> -    {\
> -        .driver   = "fw_cfg_mem",\
> -        .property = "x-file-slots",\
> -        .value    = stringify(0x10),\
> -    },{\
> -        .driver   = "fw_cfg_io",\
> -        .property = "x-file-slots",\
> -        .value    = stringify(0x10),\
> -    },{\
> -        .driver   = "pflash_cfi01",\
> -        .property = "old-multiple-chip-handling",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "pci-bridge",\
> -        .property = "shpc",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = TYPE_PCI_DEVICE,\
> -        .property = "x-pcie-extcap-init",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-pci",\
> -        .property = "x-pcie-deverr-init",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-pci",\
> -        .property = "x-pcie-lnkctl-init",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-pci",\
> -        .property = "x-pcie-pm-init",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "cirrus-vga",\
> -        .property = "vgamem_mb",\
> -        .value    = "8",\
> -    },{\
> -        .driver   = "isa-cirrus-vga",\
> -        .property = "vgamem_mb",\
> -        .value    = "8",\
> -    },
> -
>  #define HW_COMPAT_2_7 \
>      {\
>          .driver   = "virtio-pci",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index fb79f0b988..12c47d2506 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -312,33 +312,8 @@ extern const size_t pc_compat_2_10_len;
>  extern GlobalProperty pc_compat_2_9[];
>  extern const size_t pc_compat_2_9_len;
>  
> -#define PC_COMPAT_2_8 \
> -    HW_COMPAT_2_8 \
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "tcg-cpuid",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "kvmclock",\
> -        .property = "x-mach-use-reliable-get-clock",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "ICH9-LPC",\
> -        .property = "x-smi-broadcast",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "vmware-cpuid-freq",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "Haswell-" TYPE_X86_CPU,\
> -        .property = "stepping",\
> -        .value    = "1",\
> -    },
> +extern GlobalProperty pc_compat_2_8[];
> +extern const size_t pc_compat_2_8_len;
>  
>  #define PC_COMPAT_2_7 \
>      HW_COMPAT_2_7 \
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 2db46567bb..850a02cf43 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1926,12 +1926,9 @@ DEFINE_VIRT_MACHINE(2, 9)
>  static void virt_machine_2_8_options(MachineClass *mc)
>  {
>      VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_8
> -    };
>  
>      virt_machine_2_9_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_8, hw_compat_2_8_len);
>      /* For 2.8 and earlier we falsely claimed in the DT that
>       * our timers were edge-triggered, not level-triggered.
>       */
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 2d7e774a5d..b3ea5bd777 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -21,6 +21,7 @@
>  #include "sysemu/numa.h"
>  #include "qemu/error-report.h"
>  #include "sysemu/qtest.h"
> +#include "hw/pci/pci.h"
>  
>  GlobalProperty hw_compat_3_1[] = {};
>  const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
> @@ -112,6 +113,51 @@ GlobalProperty hw_compat_2_9[] = {
>  };
>  const size_t hw_compat_2_9_len = G_N_ELEMENTS(hw_compat_2_9);
>  
> +GlobalProperty hw_compat_2_8[] = {
> +    {
> +        .driver   = "fw_cfg_mem",
> +        .property = "x-file-slots",
> +        .value    = stringify(0x10),
> +    },{
> +        .driver   = "fw_cfg_io",
> +        .property = "x-file-slots",
> +        .value    = stringify(0x10),
> +    },{
> +        .driver   = "pflash_cfi01",
> +        .property = "old-multiple-chip-handling",
> +        .value    = "on",
> +    },{
> +        .driver   = "pci-bridge",
> +        .property = "shpc",
> +        .value    = "on",
> +    },{
> +        .driver   = TYPE_PCI_DEVICE,
> +        .property = "x-pcie-extcap-init",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-pci",
> +        .property = "x-pcie-deverr-init",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-pci",
> +        .property = "x-pcie-lnkctl-init",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-pci",
> +        .property = "x-pcie-pm-init",
> +        .value    = "off",
> +    },{
> +        .driver   = "cirrus-vga",
> +        .property = "vgamem_mb",
> +        .value    = "8",
> +    },{
> +        .driver   = "isa-cirrus-vga",
> +        .property = "vgamem_mb",
> +        .value    = "8",
> +    },
> +};
> +const size_t hw_compat_2_8_len = G_N_ELEMENTS(hw_compat_2_8);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index f36cc5f79c..517ead567c 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -189,6 +189,35 @@ GlobalProperty pc_compat_2_9[] = {
>  };
>  const size_t pc_compat_2_9_len = G_N_ELEMENTS(pc_compat_2_9);
>  
> +GlobalProperty pc_compat_2_8[] = {
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "tcg-cpuid",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "kvmclock",
> +        .property = "x-mach-use-reliable-get-clock",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "ICH9-LPC",
> +        .property = "x-smi-broadcast",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "vmware-cpuid-freq",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "Haswell-" TYPE_X86_CPU,
> +        .property = "stepping",
> +        .value    = "1",
> +    },
> +};
> +const size_t pc_compat_2_8_len = G_N_ELEMENTS(pc_compat_2_8);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 5bc3ad0331..deb5500624 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -504,12 +504,9 @@ DEFINE_I440FX_MACHINE(v2_9, "pc-i440fx-2.9", NULL,
>  
>  static void pc_i440fx_2_8_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_8
> -    };
> -
>      pc_i440fx_2_9_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_8, hw_compat_2_8_len);
> +    compat_props_add(m->compat_props, pc_compat_2_8, pc_compat_2_8_len);
>  }
>  
>  DEFINE_I440FX_MACHINE(v2_8, "pc-i440fx-2.8", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 4e57830a6d..57b46e1ecb 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -388,12 +388,9 @@ DEFINE_Q35_MACHINE(v2_9, "pc-q35-2.9", NULL,
>  
>  static void pc_q35_2_8_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_8
> -    };
> -
>      pc_q35_2_9_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_8, hw_compat_2_8_len);
> +    compat_props_add(m->compat_props, pc_compat_2_8, pc_compat_2_8_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v2_8, "pc-q35-2.8", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 7aa3a09ed4..d2e46362fb 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4092,7 +4092,6 @@ DEFINE_SPAPR_MACHINE(2_9, "2.9", false);
>  static void spapr_machine_2_8_class_options(MachineClass *mc)
>  {
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_8
>          {
>              .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
>              .property = "pcie-extended-configuration-space",
> @@ -4101,6 +4100,7 @@ static void spapr_machine_2_8_class_options(MachineClass *mc)
>      };
>  
>      spapr_machine_2_9_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_8, hw_compat_2_8_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>      mc->numa_mem_align_shift = 23;
>  }
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 549f6e0231..22e96ab353 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -774,7 +774,6 @@ static void ccw_machine_2_8_instance_options(MachineState *machine)
>  static void ccw_machine_2_8_class_options(MachineClass *mc)
>  {
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_8
>          {
>              .driver   = TYPE_S390_FLIC_COMMON,
>              .property = "adapter_routes_max_batch",
> @@ -783,6 +782,7 @@ static void ccw_machine_2_8_class_options(MachineClass *mc)
>      };
>  
>      ccw_machine_2_9_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_8, hw_compat_2_8_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>  }
>  DEFINE_CCW_MACHINE(2_8, "2.8", false);

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

* Re: [Qemu-devel] [PATCH v7 13/28] compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 13/28] compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros Marc-André Lureau
  2018-12-21 13:00   ` Cornelia Huck
@ 2018-12-27  6:47   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:47 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:55 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 23 -----------------------
>  include/hw/i386/pc.h       | 34 ++--------------------------------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 25 +++++++++++++++++++++++++
>  hw/i386/pc.c               | 34 ++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c          |  7 ++-----
>  hw/i386/pc_q35.c           |  7 ++-----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  5 +----
>  10 files changed, 71 insertions(+), 74 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index f8aa034d0e..611b34b26a 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -308,4 +308,7 @@ extern const size_t hw_compat_2_9_len;
>  extern GlobalProperty hw_compat_2_8[];
>  extern const size_t hw_compat_2_8_len;
>  
> +extern GlobalProperty hw_compat_2_7[];
> +extern const size_t hw_compat_2_7_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index 65d6748054..7ceab17401 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,29 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_7 \
> -    {\
> -        .driver   = "virtio-pci",\
> -        .property = "page-per-vq",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "virtio-serial-device",\
> -        .property = "emergency-write",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "ioapic",\
> -        .property = "version",\
> -        .value    = "0x11",\
> -    },{\
> -        .driver   = "intel-iommu",\
> -        .property = "x-buggy-eim",\
> -        .value    = "true",\
> -    },{\
> -        .driver   = "virtio-pci",\
> -        .property = "x-ignore-backend-features",\
> -        .value    = "on",\
> -    },
> -
>  #define HW_COMPAT_2_6 \
>      {\
>          .driver   = "virtio-mmio",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 12c47d2506..504fbc79a9 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -315,38 +315,8 @@ extern const size_t pc_compat_2_9_len;
>  extern GlobalProperty pc_compat_2_8[];
>  extern const size_t pc_compat_2_8_len;
>  
> -#define PC_COMPAT_2_7 \
> -    HW_COMPAT_2_7 \
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "l3-cache",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "full-cpuid-auto-level",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
> -        .property = "family",\
> -        .value    = "15",\
> -    },\
> -    {\
> -        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
> -        .property = "model",\
> -        .value    = "6",\
> -    },\
> -    {\
> -        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
> -        .property = "stepping",\
> -        .value    = "1",\
> -    },\
> -    {\
> -        .driver   = "isa-pcspk",\
> -        .property = "migrate",\
> -        .value    = "off",\
> -    },
> +extern GlobalProperty pc_compat_2_7[];
> +extern const size_t pc_compat_2_7_len;
>  
>  #define PC_COMPAT_2_6 \
>      HW_COMPAT_2_6 \
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 850a02cf43..e01d19e5e1 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1939,12 +1939,9 @@ DEFINE_VIRT_MACHINE(2, 8)
>  static void virt_machine_2_7_options(MachineClass *mc)
>  {
>      VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_7
> -    };
>  
>      virt_machine_2_8_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_7, hw_compat_2_7_len);
>      /* ITS was introduced with 2.8 */
>      vmc->no_its = true;
>      /* Stick with 1K pages for migration compatibility */
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index b3ea5bd777..92f4c71354 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -158,6 +158,31 @@ GlobalProperty hw_compat_2_8[] = {
>  };
>  const size_t hw_compat_2_8_len = G_N_ELEMENTS(hw_compat_2_8);
>  
> +GlobalProperty hw_compat_2_7[] = {
> +    {
> +        .driver   = "virtio-pci",
> +        .property = "page-per-vq",
> +        .value    = "on",
> +    },{
> +        .driver   = "virtio-serial-device",
> +        .property = "emergency-write",
> +        .value    = "off",
> +    },{
> +        .driver   = "ioapic",
> +        .property = "version",
> +        .value    = "0x11",
> +    },{
> +        .driver   = "intel-iommu",
> +        .property = "x-buggy-eim",
> +        .value    = "true",
> +    },{
> +        .driver   = "virtio-pci",
> +        .property = "x-ignore-backend-features",
> +        .value    = "on",
> +    },
> +};
> +const size_t hw_compat_2_7_len = G_N_ELEMENTS(hw_compat_2_7);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 517ead567c..96c64ccc4f 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -218,6 +218,40 @@ GlobalProperty pc_compat_2_8[] = {
>  };
>  const size_t pc_compat_2_8_len = G_N_ELEMENTS(pc_compat_2_8);
>  
> +GlobalProperty pc_compat_2_7[] = {
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "l3-cache",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "full-cpuid-auto-level",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,
> +        .property = "family",
> +        .value    = "15",
> +    },
> +    {
> +        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,
> +        .property = "model",
> +        .value    = "6",
> +    },
> +    {
> +        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,
> +        .property = "stepping",
> +        .value    = "1",
> +    },
> +    {
> +        .driver   = "isa-pcspk",
> +        .property = "migrate",
> +        .value    = "off",
> +    },
> +};
> +const size_t pc_compat_2_7_len = G_N_ELEMENTS(pc_compat_2_7);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index deb5500624..b956b4abe0 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -514,12 +514,9 @@ DEFINE_I440FX_MACHINE(v2_8, "pc-i440fx-2.8", NULL,
>  
>  static void pc_i440fx_2_7_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_7
> -    };
> -
>      pc_i440fx_2_8_machine_options(m);
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_7, hw_compat_2_7_len);
> +    compat_props_add(m->compat_props, pc_compat_2_7, pc_compat_2_7_len);
>  }
>  
>  DEFINE_I440FX_MACHINE(v2_7, "pc-i440fx-2.7", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 57b46e1ecb..e321f14cb5 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -398,13 +398,10 @@ DEFINE_Q35_MACHINE(v2_8, "pc-q35-2.8", NULL,
>  
>  static void pc_q35_2_7_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_7
> -    };
> -
>      pc_q35_2_8_machine_options(m);
>      m->max_cpus = 255;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_7, hw_compat_2_7_len);
> +    compat_props_add(m->compat_props, pc_compat_2_7, pc_compat_2_7_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v2_7, "pc-q35-2.7", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index d2e46362fb..445996c0b4 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4164,7 +4164,6 @@ static void spapr_machine_2_7_class_options(MachineClass *mc)
>  {
>      sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_7
>          {
>              .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
>              .property = "mem_win_size",
> @@ -4190,6 +4189,7 @@ static void spapr_machine_2_7_class_options(MachineClass *mc)
>      spapr_machine_2_8_class_options(mc);
>      mc->default_cpu_type = POWERPC_CPU_TYPE_NAME("power7_v2.3");
>      mc->default_machine_opts = "modern-hotplug-events=off";
> +    compat_props_add(mc->compat_props, hw_compat_2_7, hw_compat_2_7_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>      smc->phb_placement = phb_placement_2_7;
>  }
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 22e96ab353..f28feedd4b 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -795,13 +795,10 @@ static void ccw_machine_2_7_instance_options(MachineState *machine)
>  static void ccw_machine_2_7_class_options(MachineClass *mc)
>  {
>      S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_7
> -    };
>  
>      s390mc->cpu_model_allowed = false;
>      ccw_machine_2_8_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_7, hw_compat_2_7_len);
>  }
>  DEFINE_CCW_MACHINE(2_7, "2.7", false);
>  

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

* Re: [Qemu-devel] [PATCH v7 14/28] compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 14/28] compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros Marc-André Lureau
  2018-12-21 13:03   ` Cornelia Huck
@ 2018-12-27  6:48   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:48 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:56 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 15 ---------------
>  include/hw/i386/pc.h       | 23 ++---------------------
>  hw/arm/virt.c              |  5 +----
>  hw/core/machine.c          | 17 +++++++++++++++++
>  hw/i386/pc.c               | 23 +++++++++++++++++++++++
>  hw/i386/pc_piix.c          |  6 ++----
>  hw/i386/pc_q35.c           |  6 ++----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  10 files changed, 52 insertions(+), 50 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index 611b34b26a..a9d413cdb7 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -311,4 +311,7 @@ extern const size_t hw_compat_2_8_len;
>  extern GlobalProperty hw_compat_2_7[];
>  extern const size_t hw_compat_2_7_len;
>  
> +extern GlobalProperty hw_compat_2_6[];
> +extern const size_t hw_compat_2_6_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index 7ceab17401..c744233fb6 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,21 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_6 \
> -    {\
> -        .driver   = "virtio-mmio",\
> -        .property = "format_transport_address",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-pci",\
> -        .property = "disable-modern",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "virtio-pci",\
> -        .property = "disable-legacy",\
> -        .value    = "off",\
> -    },
> -
>  #define HW_COMPAT_2_5 \
>      {\
>          .driver   = "isa-fdc",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 504fbc79a9..ca62def2c9 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -318,27 +318,8 @@ extern const size_t pc_compat_2_8_len;
>  extern GlobalProperty pc_compat_2_7[];
>  extern const size_t pc_compat_2_7_len;
>  
> -#define PC_COMPAT_2_6 \
> -    HW_COMPAT_2_6 \
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "cpuid-0xb",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "vmxnet3",\
> -        .property = "romfile",\
> -        .value    = "",\
> -    },\
> -    {\
> -        .driver = TYPE_X86_CPU,\
> -        .property = "fill-mtrr-mask",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver   = "apic-common",\
> -        .property = "legacy-instance-id",\
> -        .value    = "on",\
> -    },
> +extern GlobalProperty pc_compat_2_6[];
> +extern const size_t pc_compat_2_6_len;
>  
>  #define PC_COMPAT_2_5 \
>      HW_COMPAT_2_5
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index e01d19e5e1..5fe2eebb02 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1952,12 +1952,9 @@ DEFINE_VIRT_MACHINE(2, 7)
>  static void virt_machine_2_6_options(MachineClass *mc)
>  {
>      VirtMachineClass *vmc = VIRT_MACHINE_CLASS(OBJECT_CLASS(mc));
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_6
> -    };
>  
>      virt_machine_2_7_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_6, hw_compat_2_6_len);
>      vmc->disallow_affinity_adjustment = true;
>      /* Disable PMU for 2.6 as PMU support was first introduced in 2.7 */
>      vmc->no_pmu = true;
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 92f4c71354..5f1af02c86 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -183,6 +183,23 @@ GlobalProperty hw_compat_2_7[] = {
>  };
>  const size_t hw_compat_2_7_len = G_N_ELEMENTS(hw_compat_2_7);
>  
> +GlobalProperty hw_compat_2_6[] = {
> +    {
> +        .driver   = "virtio-mmio",
> +        .property = "format_transport_address",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-pci",
> +        .property = "disable-modern",
> +        .value    = "on",
> +    },{
> +        .driver   = "virtio-pci",
> +        .property = "disable-legacy",
> +        .value    = "off",
> +    },
> +};
> +const size_t hw_compat_2_6_len = G_N_ELEMENTS(hw_compat_2_6);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 96c64ccc4f..f719115f17 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -252,6 +252,29 @@ GlobalProperty pc_compat_2_7[] = {
>  };
>  const size_t pc_compat_2_7_len = G_N_ELEMENTS(pc_compat_2_7);
>  
> +GlobalProperty pc_compat_2_6[] = {
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "cpuid-0xb",
> +        .value    = "off",
> +    },{
> +        .driver   = "vmxnet3",
> +        .property = "romfile",
> +        .value    = "",
> +    },
> +    {
> +        .driver = TYPE_X86_CPU,
> +        .property = "fill-mtrr-mask",
> +        .value = "off",
> +    },
> +    {
> +        .driver   = "apic-common",
> +        .property = "legacy-instance-id",
> +        .value    = "on",
> +    }
> +};
> +const size_t pc_compat_2_6_len = G_N_ELEMENTS(pc_compat_2_6);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index b956b4abe0..5f3dc8a809 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -525,14 +525,12 @@ DEFINE_I440FX_MACHINE(v2_7, "pc-i440fx-2.7", NULL,
>  static void pc_i440fx_2_6_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_6
> -    };
>  
>      pc_i440fx_2_7_machine_options(m);
>      pcmc->legacy_cpu_hotplug = true;
>      pcmc->linuxboot_dma_enabled = false;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_6, hw_compat_2_6_len);
> +    compat_props_add(m->compat_props, pc_compat_2_6, pc_compat_2_6_len);
>  }
>  
>  DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index e321f14cb5..063df36cad 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -410,14 +410,12 @@ DEFINE_Q35_MACHINE(v2_7, "pc-q35-2.7", NULL,
>  static void pc_q35_2_6_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_6
> -    };
>  
>      pc_q35_2_7_machine_options(m);
>      pcmc->legacy_cpu_hotplug = true;
>      pcmc->linuxboot_dma_enabled = false;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_6, hw_compat_2_6_len);
> +    compat_props_add(m->compat_props, pc_compat_2_6, pc_compat_2_6_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 445996c0b4..797f480564 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4203,7 +4203,6 @@ DEFINE_SPAPR_MACHINE(2_7, "2.7", false);
>  static void spapr_machine_2_6_class_options(MachineClass *mc)
>  {
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_6
>          {
>              .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
>              .property = "ddw",
> @@ -4213,6 +4212,7 @@ static void spapr_machine_2_6_class_options(MachineClass *mc)
>  
>      spapr_machine_2_7_class_options(mc);
>      mc->has_hotpluggable_cpus = false;
> +    compat_props_add(mc->compat_props, hw_compat_2_6, hw_compat_2_6_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>  }
>  
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index f28feedd4b..6137c97875 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -811,7 +811,6 @@ static void ccw_machine_2_6_class_options(MachineClass *mc)
>  {
>      S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_6
>          {
>              .driver   = TYPE_S390_IPL,
>              .property = "iplbext_migration",
> @@ -825,6 +824,7 @@ static void ccw_machine_2_6_class_options(MachineClass *mc)
>  
>      s390mc->ri_allowed = false;
>      ccw_machine_2_7_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_6, hw_compat_2_6_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>  }
>  DEFINE_CCW_MACHINE(2_6, "2.6", false);

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

* Re: [Qemu-devel] [PATCH v7 15/28] compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 15/28] compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros Marc-André Lureau
  2018-12-21 13:04   ` Cornelia Huck
@ 2018-12-27  6:50   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:50 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:57 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 +++
>  include/hw/compat.h        | 24 ------------------------
>  include/hw/i386/pc.h       |  4 ++--
>  hw/core/machine.c          | 26 ++++++++++++++++++++++++++
>  hw/i386/pc.c               |  3 +++
>  hw/i386/pc_piix.c          |  6 ++----
>  hw/i386/pc_q35.c           |  6 ++----
>  hw/ppc/spapr.c             |  2 +-
>  hw/s390x/s390-virtio-ccw.c |  6 +-----
>  9 files changed, 40 insertions(+), 40 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index a9d413cdb7..36e1269eb1 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -314,4 +314,7 @@ extern const size_t hw_compat_2_7_len;
>  extern GlobalProperty hw_compat_2_6[];
>  extern const size_t hw_compat_2_6_len;
>  
> +extern GlobalProperty hw_compat_2_5[];
> +extern const size_t hw_compat_2_5_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index c744233fb6..a6eced34c6 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,30 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_5 \
> -    {\
> -        .driver   = "isa-fdc",\
> -        .property = "fallback",\
> -        .value    = "144",\
> -    },{\
> -        .driver   = "pvscsi",\
> -        .property = "x-old-pci-configuration",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "pvscsi",\
> -        .property = "x-disable-pcie",\
> -        .value    = "on",\
> -    },\
> -    {\
> -        .driver   = "vmxnet3",\
> -        .property = "x-old-msi-offsets",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "vmxnet3",\
> -        .property = "x-disable-pcie",\
> -        .value    = "on",\
> -    },
> -
>  #define HW_COMPAT_2_4 \
>      {\
>          .driver   = "virtio-blk-device",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index ca62def2c9..9a32031f25 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -321,8 +321,8 @@ extern const size_t pc_compat_2_7_len;
>  extern GlobalProperty pc_compat_2_6[];
>  extern const size_t pc_compat_2_6_len;
>  
> -#define PC_COMPAT_2_5 \
> -    HW_COMPAT_2_5
> +extern GlobalProperty pc_compat_2_5[];
> +extern const size_t pc_compat_2_5_len;
>  
>  /* Helper for setting model-id for CPU models that changed model-id
>   * depending on QEMU versions up to QEMU 2.4.
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 5f1af02c86..1022b538a5 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -200,6 +200,32 @@ GlobalProperty hw_compat_2_6[] = {
>  };
>  const size_t hw_compat_2_6_len = G_N_ELEMENTS(hw_compat_2_6);
>  
> +GlobalProperty hw_compat_2_5[] = {
> +    {
> +        .driver   = "isa-fdc",
> +        .property = "fallback",
> +        .value    = "144",
> +    },{
> +        .driver   = "pvscsi",
> +        .property = "x-old-pci-configuration",
> +        .value    = "on",
> +    },{
> +        .driver   = "pvscsi",
> +        .property = "x-disable-pcie",
> +        .value    = "on",
> +    },
> +    {
> +        .driver   = "vmxnet3",
> +        .property = "x-old-msi-offsets",
> +        .value    = "on",
> +    },{
> +        .driver   = "vmxnet3",
> +        .property = "x-disable-pcie",
> +        .value    = "on",
> +    },
> +};
> +const size_t hw_compat_2_5_len = G_N_ELEMENTS(hw_compat_2_5);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index f719115f17..ac54c2e39d 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -275,6 +275,9 @@ GlobalProperty pc_compat_2_6[] = {
>  };
>  const size_t pc_compat_2_6_len = G_N_ELEMENTS(pc_compat_2_6);
>  
> +GlobalProperty pc_compat_2_5[] = {};
> +const size_t pc_compat_2_5_len = G_N_ELEMENTS(pc_compat_2_5);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 5f3dc8a809..4f5168534a 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -539,14 +539,12 @@ DEFINE_I440FX_MACHINE(v2_6, "pc-i440fx-2.6", NULL,
>  static void pc_i440fx_2_5_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_5
> -    };
>  
>      pc_i440fx_2_6_machine_options(m);
>      pcmc->save_tsc_khz = false;
>      m->legacy_fw_cfg_order = 1;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
> +    compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
>  }
>  
>  DEFINE_I440FX_MACHINE(v2_5, "pc-i440fx-2.5", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 063df36cad..a33d5d3610 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -424,14 +424,12 @@ DEFINE_Q35_MACHINE(v2_6, "pc-q35-2.6", NULL,
>  static void pc_q35_2_5_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_5
> -    };
>  
>      pc_q35_2_6_machine_options(m);
>      pcmc->save_tsc_khz = false;
>      m->legacy_fw_cfg_order = 1;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_5, hw_compat_2_5_len);
> +    compat_props_add(m->compat_props, pc_compat_2_5, pc_compat_2_5_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v2_5, "pc-q35-2.5", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 797f480564..c808ec90f0 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4226,7 +4226,6 @@ static void spapr_machine_2_5_class_options(MachineClass *mc)
>  {
>      sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_5
>          {
>              .driver   = "spapr-vlan",
>              .property = "use-rx-buffer-pools",
> @@ -4236,6 +4235,7 @@ static void spapr_machine_2_5_class_options(MachineClass *mc)
>  
>      spapr_machine_2_6_class_options(mc);
>      smc->use_ohci_by_default = true;
> +    compat_props_add(mc->compat_props, hw_compat_2_5, hw_compat_2_5_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>  }
>  
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 6137c97875..1ab53a1332 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -836,12 +836,8 @@ static void ccw_machine_2_5_instance_options(MachineState *machine)
>  
>  static void ccw_machine_2_5_class_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_5
> -    };
> -
>      ccw_machine_2_6_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_5, hw_compat_2_5_len);
>  }
>  DEFINE_CCW_MACHINE(2_5, "2.5", false);
>  

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

* Re: [Qemu-devel] [PATCH v7 16/28] compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 16/28] compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros Marc-André Lureau
  2018-12-21 13:05   ` Cornelia Huck
@ 2018-12-27  6:51   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:51 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:58 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h        |  3 ++
>  include/hw/compat.h        | 27 --------------
>  include/hw/i386/pc.h       | 74 ++------------------------------------
>  hw/core/machine.c          | 29 +++++++++++++++
>  hw/i386/pc.c               | 71 ++++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c          |  6 ++--
>  hw/i386/pc_q35.c           |  6 ++--
>  hw/ppc/spapr.c             |  5 +--
>  hw/s390x/s390-virtio-ccw.c |  2 +-
>  9 files changed, 112 insertions(+), 111 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index 36e1269eb1..053e362f28 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -317,4 +317,7 @@ extern const size_t hw_compat_2_6_len;
>  extern GlobalProperty hw_compat_2_5[];
>  extern const size_t hw_compat_2_5_len;
>  
> +extern GlobalProperty hw_compat_2_4[];
> +extern const size_t hw_compat_2_4_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index a6eced34c6..05ff05e159 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,33 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_4 \
> -    {\
> -        .driver   = "virtio-blk-device",\
> -        .property = "scsi",\
> -        .value    = "true",\
> -    },{\
> -        .driver   = "e1000",\
> -        .property = "extra_mac_registers",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-pci",\
> -        .property = "x-disable-pcie",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "virtio-pci",\
> -        .property = "migrate-extra",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "fw_cfg_mem",\
> -        .property = "dma_enabled",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "fw_cfg_io",\
> -        .property = "dma_enabled",\
> -        .value    = "off",\
> -    },
> -
>  #define HW_COMPAT_2_3 \
>      {\
>          .driver   = "virtio-blk-pci",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 9a32031f25..a9045f6bea 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -324,6 +324,9 @@ extern const size_t pc_compat_2_6_len;
>  extern GlobalProperty pc_compat_2_5[];
>  extern const size_t pc_compat_2_5_len;
>  
> +extern GlobalProperty pc_compat_2_4[];
> +extern const size_t pc_compat_2_4_len;
> +
>  /* Helper for setting model-id for CPU models that changed model-id
>   * depending on QEMU versions up to QEMU 2.4.
>   */
> @@ -344,77 +347,6 @@ extern const size_t pc_compat_2_5_len;
>          .value    = "QEMU Virtual CPU version " v,\
>      },
>  
> -#define PC_COMPAT_2_4 \
> -    HW_COMPAT_2_4 \
> -    PC_CPU_MODEL_IDS("2.4.0") \
> -    {\
> -        .driver   = "Haswell-" TYPE_X86_CPU,\
> -        .property = "abm",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "Haswell-noTSX-" TYPE_X86_CPU,\
> -        .property = "abm",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "Broadwell-" TYPE_X86_CPU,\
> -        .property = "abm",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "Broadwell-noTSX-" TYPE_X86_CPU,\
> -        .property = "abm",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "host" "-" TYPE_X86_CPU,\
> -        .property = "host-cache-info",\
> -        .value    = "on",\
> -    },\
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "check",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "qemu64" "-" TYPE_X86_CPU,\
> -        .property = "sse4a",\
> -        .value    = "on",\
> -    },\
> -    {\
> -        .driver   = "qemu64" "-" TYPE_X86_CPU,\
> -        .property = "abm",\
> -        .value    = "on",\
> -    },\
> -    {\
> -        .driver   = "qemu64" "-" TYPE_X86_CPU,\
> -        .property = "popcnt",\
> -        .value    = "on",\
> -    },\
> -    {\
> -        .driver   = "qemu32" "-" TYPE_X86_CPU,\
> -        .property = "popcnt",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "Opteron_G2" "-" TYPE_X86_CPU,\
> -        .property = "rdtscp",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
> -        .property = "rdtscp",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "Opteron_G4" "-" TYPE_X86_CPU,\
> -        .property = "rdtscp",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "Opteron_G5" "-" TYPE_X86_CPU,\
> -        .property = "rdtscp",\
> -        .value    = "on",\
> -    },
> -
> -
>  #define PC_COMPAT_2_3 \
>      HW_COMPAT_2_3 \
>      PC_CPU_MODEL_IDS("2.3.0") \
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 1022b538a5..a14e343cba 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -226,6 +226,35 @@ GlobalProperty hw_compat_2_5[] = {
>  };
>  const size_t hw_compat_2_5_len = G_N_ELEMENTS(hw_compat_2_5);
>  
> +GlobalProperty hw_compat_2_4[] = {
> +    {
> +        .driver   = "virtio-blk-device",
> +        .property = "scsi",
> +        .value    = "true",
> +    },{
> +        .driver   = "e1000",
> +        .property = "extra_mac_registers",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-pci",
> +        .property = "x-disable-pcie",
> +        .value    = "on",
> +    },{
> +        .driver   = "virtio-pci",
> +        .property = "migrate-extra",
> +        .value    = "off",
> +    },{
> +        .driver   = "fw_cfg_mem",
> +        .property = "dma_enabled",
> +        .value    = "off",
> +    },{
> +        .driver   = "fw_cfg_io",
> +        .property = "dma_enabled",
> +        .value    = "off",
> +    }
> +};
> +const size_t hw_compat_2_4_len = G_N_ELEMENTS(hw_compat_2_4);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index ac54c2e39d..ed40071f66 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -278,6 +278,77 @@ const size_t pc_compat_2_6_len = G_N_ELEMENTS(pc_compat_2_6);
>  GlobalProperty pc_compat_2_5[] = {};
>  const size_t pc_compat_2_5_len = G_N_ELEMENTS(pc_compat_2_5);
>  
> +GlobalProperty pc_compat_2_4[] = {
> +    PC_CPU_MODEL_IDS("2.4.0")
> +    {
> +        .driver   = "Haswell-" TYPE_X86_CPU,
> +        .property = "abm",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "Haswell-noTSX-" TYPE_X86_CPU,
> +        .property = "abm",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "Broadwell-" TYPE_X86_CPU,
> +        .property = "abm",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "Broadwell-noTSX-" TYPE_X86_CPU,
> +        .property = "abm",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "host" "-" TYPE_X86_CPU,
> +        .property = "host-cache-info",
> +        .value    = "on",
> +    },
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "check",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "qemu64" "-" TYPE_X86_CPU,
> +        .property = "sse4a",
> +        .value    = "on",
> +    },
> +    {
> +        .driver   = "qemu64" "-" TYPE_X86_CPU,
> +        .property = "abm",
> +        .value    = "on",
> +    },
> +    {
> +        .driver   = "qemu64" "-" TYPE_X86_CPU,
> +        .property = "popcnt",
> +        .value    = "on",
> +    },
> +    {
> +        .driver   = "qemu32" "-" TYPE_X86_CPU,
> +        .property = "popcnt",
> +        .value    = "on",
> +    },{
> +        .driver   = "Opteron_G2" "-" TYPE_X86_CPU,
> +        .property = "rdtscp",
> +        .value    = "on",
> +    },{
> +        .driver   = "Opteron_G3" "-" TYPE_X86_CPU,
> +        .property = "rdtscp",
> +        .value    = "on",
> +    },{
> +        .driver   = "Opteron_G4" "-" TYPE_X86_CPU,
> +        .property = "rdtscp",
> +        .value    = "on",
> +    },{
> +        .driver   = "Opteron_G5" "-" TYPE_X86_CPU,
> +        .property = "rdtscp",
> +        .value    = "on",
> +    }
> +};
> +const size_t pc_compat_2_4_len = G_N_ELEMENTS(pc_compat_2_4);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 4f5168534a..1465d367d1 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -553,14 +553,12 @@ DEFINE_I440FX_MACHINE(v2_5, "pc-i440fx-2.5", NULL,
>  static void pc_i440fx_2_4_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_4
> -    };
>  
>      pc_i440fx_2_5_machine_options(m);
>      m->hw_version = "2.4.0";
>      pcmc->broken_reserved_end = true;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_4, hw_compat_2_4_len);
> +    compat_props_add(m->compat_props, pc_compat_2_4, pc_compat_2_4_len);
>  }
>  
>  DEFINE_I440FX_MACHINE(v2_4, "pc-i440fx-2.4", NULL,
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index a33d5d3610..418a6f9b8f 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -438,14 +438,12 @@ DEFINE_Q35_MACHINE(v2_5, "pc-q35-2.5", NULL,
>  static void pc_q35_2_4_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_4
> -    };
>  
>      pc_q35_2_5_machine_options(m);
>      m->hw_version = "2.4.0";
>      pcmc->broken_reserved_end = true;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_4, hw_compat_2_4_len);
> +    compat_props_add(m->compat_props, pc_compat_2_4, pc_compat_2_4_len);
>  }
>  
>  DEFINE_Q35_MACHINE(v2_4, "pc-q35-2.4", NULL,
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index c808ec90f0..9ab8484579 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4248,13 +4248,10 @@ DEFINE_SPAPR_MACHINE(2_5, "2.5", false);
>  static void spapr_machine_2_4_class_options(MachineClass *mc)
>  {
>      sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_4
> -    };
>  
>      spapr_machine_2_5_class_options(mc);
>      smc->dr_lmb_enabled = false;
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_4, hw_compat_2_4_len);
>  }
>  
>  DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index 1ab53a1332..bf5f2f463c 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -849,7 +849,6 @@ static void ccw_machine_2_4_instance_options(MachineState *machine)
>  static void ccw_machine_2_4_class_options(MachineClass *mc)
>  {
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_4
>          {
>              .driver   = TYPE_S390_SKEYS,
>              .property = "migration-enabled",
> @@ -890,6 +889,7 @@ static void ccw_machine_2_4_class_options(MachineClass *mc)
>      };
>  
>      ccw_machine_2_5_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_4, hw_compat_2_4_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>  }
>  DEFINE_CCW_MACHINE(2_4, "2.4", false);

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

* Re: [Qemu-devel] [PATCH v7 17/28] compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros
  2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 17/28] compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros Marc-André Lureau
  2018-12-21 13:07   ` Cornelia Huck
@ 2018-12-27  6:52   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:52 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:03:59 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.  I decided to rename the conflicting
> pc_compat_2_3() function with pc_compat_2_3_fn().
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h  |  3 ++
>  include/hw/compat.h  | 39 --------------------
>  include/hw/i386/pc.h | 88 ++------------------------------------------
>  hw/core/machine.c    | 41 +++++++++++++++++++++
>  hw/i386/pc.c         | 86 +++++++++++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c    | 13 +++----
>  hw/ppc/spapr.c       |  2 +-
>  7 files changed, 139 insertions(+), 133 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index 053e362f28..a51d896a70 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -320,4 +320,7 @@ extern const size_t hw_compat_2_5_len;
>  extern GlobalProperty hw_compat_2_4[];
>  extern const size_t hw_compat_2_4_len;
>  
> +extern GlobalProperty hw_compat_2_3[];
> +extern const size_t hw_compat_2_3_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index 05ff05e159..fbe64d5983 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,45 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_3 \
> -    {\
> -        .driver   = "virtio-blk-pci",\
> -        .property = "any_layout",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-balloon-pci",\
> -        .property = "any_layout",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-serial-pci",\
> -        .property = "any_layout",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-9p-pci",\
> -        .property = "any_layout",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-rng-pci",\
> -        .property = "any_layout",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = TYPE_PCI_DEVICE,\
> -        .property = "x-pcie-lnksta-dllla",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "migration",\
> -        .property = "send-configuration",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "migration",\
> -        .property = "send-section-footer",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "migration",\
> -        .property = "store-global-state",\
> -        .value    = "off",\
> -    },
> -
>  #define HW_COMPAT_2_2 \
>      /* empty */
>  
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index a9045f6bea..def40cd545 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -327,6 +327,9 @@ extern const size_t pc_compat_2_5_len;
>  extern GlobalProperty pc_compat_2_4[];
>  extern const size_t pc_compat_2_4_len;
>  
> +extern GlobalProperty pc_compat_2_3[];
> +extern const size_t pc_compat_2_3_len;
> +
>  /* Helper for setting model-id for CPU models that changed model-id
>   * depending on QEMU versions up to QEMU 2.4.
>   */
> @@ -347,91 +350,6 @@ extern const size_t pc_compat_2_4_len;
>          .value    = "QEMU Virtual CPU version " v,\
>      },
>  
> -#define PC_COMPAT_2_3 \
> -    HW_COMPAT_2_3 \
> -    PC_CPU_MODEL_IDS("2.3.0") \
> -    {\
> -        .driver   = TYPE_X86_CPU,\
> -        .property = "arat",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "qemu64" "-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(4),\
> -    },{\
> -        .driver   = "kvm64" "-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(5),\
> -    },{\
> -        .driver   = "pentium3" "-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(2),\
> -    },{\
> -        .driver   = "n270" "-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(5),\
> -    },{\
> -        .driver   = "Conroe" "-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(4),\
> -    },{\
> -        .driver   = "Penryn" "-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(4),\
> -    },{\
> -        .driver   = "Nehalem" "-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(4),\
> -    },{\
> -        .driver   = "n270" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "Penryn" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "Conroe" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "Nehalem" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "Westmere" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "SandyBridge" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "IvyBridge" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "Haswell" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "Haswell-noTSX" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "Broadwell" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver   = "Broadwell-noTSX" "-" TYPE_X86_CPU,\
> -        .property = "min-xlevel",\
> -        .value    = stringify(0x8000000a),\
> -    },{\
> -        .driver = TYPE_X86_CPU,\
> -        .property = "kvm-no-smi-migration",\
> -        .value    = "on",\
> -    },
> -
>  #define PC_COMPAT_2_2 \
>      HW_COMPAT_2_2 \
>      PC_CPU_MODEL_IDS("2.2.0") \
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index a14e343cba..449f7ec8f6 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -255,6 +255,47 @@ GlobalProperty hw_compat_2_4[] = {
>  };
>  const size_t hw_compat_2_4_len = G_N_ELEMENTS(hw_compat_2_4);
>  
> +GlobalProperty hw_compat_2_3[] = {
> +    {
> +        .driver   = "virtio-blk-pci",
> +        .property = "any_layout",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-balloon-pci",
> +        .property = "any_layout",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-serial-pci",
> +        .property = "any_layout",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-9p-pci",
> +        .property = "any_layout",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-rng-pci",
> +        .property = "any_layout",
> +        .value    = "off",
> +    },{
> +        .driver   = TYPE_PCI_DEVICE,
> +        .property = "x-pcie-lnksta-dllla",
> +        .value    = "off",
> +    },{
> +        .driver   = "migration",
> +        .property = "send-configuration",
> +        .value    = "off",
> +    },{
> +        .driver   = "migration",
> +        .property = "send-section-footer",
> +        .value    = "off",
> +    },{
> +        .driver   = "migration",
> +        .property = "store-global-state",
> +        .value    = "off",
> +    },
> +};
> +const size_t hw_compat_2_3_len = G_N_ELEMENTS(hw_compat_2_3);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index ed40071f66..c49fceed8e 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -349,6 +349,92 @@ GlobalProperty pc_compat_2_4[] = {
>  };
>  const size_t pc_compat_2_4_len = G_N_ELEMENTS(pc_compat_2_4);
>  
> +GlobalProperty pc_compat_2_3[] = {
> +    PC_CPU_MODEL_IDS("2.3.0")
> +    {
> +        .driver   = TYPE_X86_CPU,
> +        .property = "arat",
> +        .value    = "off",
> +    },{
> +        .driver   = "qemu64" "-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(4),
> +    },{
> +        .driver   = "kvm64" "-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(5),
> +    },{
> +        .driver   = "pentium3" "-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(2),
> +    },{
> +        .driver   = "n270" "-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(5),
> +    },{
> +        .driver   = "Conroe" "-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(4),
> +    },{
> +        .driver   = "Penryn" "-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(4),
> +    },{
> +        .driver   = "Nehalem" "-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(4),
> +    },{
> +        .driver   = "n270" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "Penryn" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "Conroe" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "Nehalem" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "Westmere" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "SandyBridge" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "IvyBridge" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "Haswell" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "Haswell-noTSX" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "Broadwell" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver   = "Broadwell-noTSX" "-" TYPE_X86_CPU,
> +        .property = "min-xlevel",
> +        .value    = stringify(0x8000000a),
> +    },{
> +        .driver = TYPE_X86_CPU,
> +        .property = "kvm-no-smi-migration",
> +        .value    = "on",
> +    },
> +};
> +const size_t pc_compat_2_3_len = G_N_ELEMENTS(pc_compat_2_3);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 1465d367d1..d06fdf2bb9 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -310,7 +310,7 @@ static void pc_init1(MachineState *machine,
>   * HW_COMPAT_*, PC_COMPAT_*, or * pc_*_machine_options().
>   */
>  
> -static void pc_compat_2_3(MachineState *machine)
> +static void pc_compat_2_3_fn(MachineState *machine)
>  {
>      PCMachineState *pcms = PC_MACHINE(machine);
>      if (kvm_enabled()) {
> @@ -320,7 +320,7 @@ static void pc_compat_2_3(MachineState *machine)
>  
>  static void pc_compat_2_2(MachineState *machine)
>  {
> -    pc_compat_2_3(machine);
> +    pc_compat_2_3_fn(machine);
>  }
>  
>  static void pc_compat_2_1(MachineState *machine)
> @@ -566,16 +566,13 @@ DEFINE_I440FX_MACHINE(v2_4, "pc-i440fx-2.4", NULL,
>  
>  static void pc_i440fx_2_3_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_3
> -    };
> -
>      pc_i440fx_2_4_machine_options(m);
>      m->hw_version = "2.3.0";
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_3, hw_compat_2_3_len);
> +    compat_props_add(m->compat_props, pc_compat_2_3, pc_compat_2_3_len);
>  }
>  
> -DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3,
> +DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3_fn,
>                        pc_i440fx_2_3_machine_options);
>  
>  static void pc_i440fx_2_2_machine_options(MachineClass *m)
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 9ab8484579..29f88f2372 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4263,7 +4263,6 @@ DEFINE_SPAPR_MACHINE(2_4, "2.4", false);
>  static void spapr_machine_2_3_class_options(MachineClass *mc)
>  {
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_3
>          {
>              .driver   = "spapr-pci-host-bridge",
>              .property = "dynamic-reconfiguration",
> @@ -4271,6 +4270,7 @@ static void spapr_machine_2_3_class_options(MachineClass *mc)
>          },
>      };
>      spapr_machine_2_4_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_3, hw_compat_2_3_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>  }
>  DEFINE_SPAPR_MACHINE(2_3, "2.3", false);

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

* Re: [Qemu-devel] [PATCH v7 18/28] compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 18/28] compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros Marc-André Lureau
  2018-12-21 13:08   ` Cornelia Huck
@ 2018-12-27  6:53   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:53 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:04:00 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.  I decided to rename the conflicting
> pc_compat_2_2() function with pc_compat_2_2_fn().
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h  |  3 ++
>  include/hw/compat.h  |  3 --
>  include/hw/i386/pc.h | 97 ++------------------------------------------
>  hw/core/machine.c    |  3 ++
>  hw/i386/pc.c         | 95 +++++++++++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c    | 12 +++---
>  hw/ppc/spapr.c       |  2 +-
>  7 files changed, 110 insertions(+), 105 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index a51d896a70..0b0a1f4079 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -323,4 +323,7 @@ extern const size_t hw_compat_2_4_len;
>  extern GlobalProperty hw_compat_2_3[];
>  extern const size_t hw_compat_2_3_len;
>  
> +extern GlobalProperty hw_compat_2_2[];
> +extern const size_t hw_compat_2_2_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index fbe64d5983..3bd91908e4 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,9 +1,6 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_2 \
> -    /* empty */
> -
>  #define HW_COMPAT_2_1 \
>      {\
>          .driver   = "intel-hda",\
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index def40cd545..49b45bb79d 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -330,6 +330,9 @@ extern const size_t pc_compat_2_4_len;
>  extern GlobalProperty pc_compat_2_3[];
>  extern const size_t pc_compat_2_3_len;
>  
> +extern GlobalProperty pc_compat_2_2[];
> +extern const size_t pc_compat_2_2_len;
> +
>  /* Helper for setting model-id for CPU models that changed model-id
>   * depending on QEMU versions up to QEMU 2.4.
>   */
> @@ -350,100 +353,6 @@ extern const size_t pc_compat_2_3_len;
>          .value    = "QEMU Virtual CPU version " v,\
>      },
>  
> -#define PC_COMPAT_2_2 \
> -    HW_COMPAT_2_2 \
> -    PC_CPU_MODEL_IDS("2.2.0") \
> -    {\
> -        .driver = "kvm64" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "kvm32" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Conroe" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Penryn" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Nehalem" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Westmere" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "SandyBridge" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Haswell" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Broadwell" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Opteron_G1" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Opteron_G2" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Opteron_G3" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Opteron_G4" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Opteron_G5" "-" TYPE_X86_CPU,\
> -        .property = "vme",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Haswell" "-" TYPE_X86_CPU,\
> -        .property = "f16c",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Haswell" "-" TYPE_X86_CPU,\
> -        .property = "rdrand",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Broadwell" "-" TYPE_X86_CPU,\
> -        .property = "f16c",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Broadwell" "-" TYPE_X86_CPU,\
> -        .property = "rdrand",\
> -        .value = "off",\
> -    },
> -
>  #define PC_COMPAT_2_1 \
>      HW_COMPAT_2_1 \
>      PC_CPU_MODEL_IDS("2.1.0") \
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 449f7ec8f6..8f387e9063 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -296,6 +296,9 @@ GlobalProperty hw_compat_2_3[] = {
>  };
>  const size_t hw_compat_2_3_len = G_N_ELEMENTS(hw_compat_2_3);
>  
> +GlobalProperty hw_compat_2_2[] = {};
> +const size_t hw_compat_2_2_len = G_N_ELEMENTS(hw_compat_2_2);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index c49fceed8e..aeba5a770e 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -435,6 +435,101 @@ GlobalProperty pc_compat_2_3[] = {
>  };
>  const size_t pc_compat_2_3_len = G_N_ELEMENTS(pc_compat_2_3);
>  
> +GlobalProperty pc_compat_2_2[] = {
> +    PC_CPU_MODEL_IDS("2.2.0")
> +    {
> +        .driver = "kvm64" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "kvm32" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Conroe" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Penryn" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Nehalem" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Westmere" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "SandyBridge" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Haswell" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Broadwell" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Opteron_G1" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Opteron_G2" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Opteron_G3" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Opteron_G4" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Opteron_G5" "-" TYPE_X86_CPU,
> +        .property = "vme",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Haswell" "-" TYPE_X86_CPU,
> +        .property = "f16c",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Haswell" "-" TYPE_X86_CPU,
> +        .property = "rdrand",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Broadwell" "-" TYPE_X86_CPU,
> +        .property = "f16c",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Broadwell" "-" TYPE_X86_CPU,
> +        .property = "rdrand",
> +        .value = "off",
> +    },
> +};
> +const size_t pc_compat_2_2_len = G_N_ELEMENTS(pc_compat_2_2);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index d06fdf2bb9..6c250e64fc 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -318,14 +318,14 @@ static void pc_compat_2_3_fn(MachineState *machine)
>      }
>  }
>  
> -static void pc_compat_2_2(MachineState *machine)
> +static void pc_compat_2_2_fn(MachineState *machine)
>  {
>      pc_compat_2_3_fn(machine);
>  }
>  
>  static void pc_compat_2_1(MachineState *machine)
>  {
> -    pc_compat_2_2(machine);
> +    pc_compat_2_2_fn(machine);
>      x86_cpu_change_kvm_default("svm", NULL);
>  }
>  
> @@ -578,18 +578,16 @@ DEFINE_I440FX_MACHINE(v2_3, "pc-i440fx-2.3", pc_compat_2_3_fn,
>  static void pc_i440fx_2_2_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_2
> -    };
>  
>      pc_i440fx_2_3_machine_options(m);
>      m->hw_version = "2.2.0";
>      m->default_machine_opts = "firmware=bios-256k.bin,suppress-vmdesc=on";
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_2, hw_compat_2_2_len);
> +    compat_props_add(m->compat_props, pc_compat_2_2, pc_compat_2_2_len);
>      pcmc->rsdp_in_ram = false;
>  }
>  
> -DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2,
> +DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2_fn,
>                        pc_i440fx_2_2_machine_options);
>  
>  static void pc_i440fx_2_1_machine_options(MachineClass *m)
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 29f88f2372..2e71eb08e9 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4282,7 +4282,6 @@ DEFINE_SPAPR_MACHINE(2_3, "2.3", false);
>  static void spapr_machine_2_2_class_options(MachineClass *mc)
>  {
>      static GlobalProperty compat[] = {
> -        HW_COMPAT_2_2
>          {
>              .driver   = TYPE_SPAPR_PCI_HOST_BRIDGE,
>              .property = "mem_win_size",
> @@ -4291,6 +4290,7 @@ static void spapr_machine_2_2_class_options(MachineClass *mc)
>      };
>  
>      spapr_machine_2_3_class_options(mc);
> +    compat_props_add(mc->compat_props, hw_compat_2_2, hw_compat_2_2_len);
>      compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
>      mc->default_machine_opts = "modern-hotplug-events=off,suppress-vmdesc=on";
>  }

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

* Re: [Qemu-devel] [PATCH v7 19/28] compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 19/28] compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros Marc-André Lureau
  2018-12-21 13:09   ` Cornelia Huck
@ 2018-12-27  6:54   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:54 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:04:01 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.  I decided to rename the conflicting
> pc_compat_2_1() function with pc_compat_2_1_fn().
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/boards.h  |  3 +++
>  include/hw/compat.h  | 31 -------------------------------
>  include/hw/i386/pc.h | 17 +++--------------
>  hw/core/machine.c    | 33 +++++++++++++++++++++++++++++++++
>  hw/i386/pc.c         | 15 +++++++++++++++
>  hw/i386/pc_piix.c    | 12 +++++-------
>  hw/ppc/spapr.c       |  6 +-----
>  7 files changed, 60 insertions(+), 57 deletions(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index 0b0a1f4079..d4aca54968 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -326,4 +326,7 @@ extern const size_t hw_compat_2_3_len;
>  extern GlobalProperty hw_compat_2_2[];
>  extern const size_t hw_compat_2_2_len;
>  
> +extern GlobalProperty hw_compat_2_1[];
> +extern const size_t hw_compat_2_1_len;
> +
>  #endif
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> index 3bd91908e4..b2d0bdd599 100644
> --- a/include/hw/compat.h
> +++ b/include/hw/compat.h
> @@ -1,35 +1,4 @@
>  #ifndef HW_COMPAT_H
>  #define HW_COMPAT_H
>  
> -#define HW_COMPAT_2_1 \
> -    {\
> -        .driver   = "intel-hda",\
> -        .property = "old_msi_addr",\
> -        .value    = "on",\
> -    },{\
> -        .driver   = "VGA",\
> -        .property = "qemu-extended-regs",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "secondary-vga",\
> -        .property = "qemu-extended-regs",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "virtio-scsi-pci",\
> -        .property = "any_layout",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "usb-mouse",\
> -        .property = "usb_version",\
> -        .value    = stringify(1),\
> -    },{\
> -        .driver   = "usb-kbd",\
> -        .property = "usb_version",\
> -        .value    = stringify(1),\
> -    },{\
> -        .driver   = "virtio-pci",\
> -        .property = "virtio-pci-bus-master-bug-migration",\
> -        .value    = "on",\
> -    },
> -
>  #endif /* HW_COMPAT_H */
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 49b45bb79d..784ea7a92c 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -333,6 +333,9 @@ extern const size_t pc_compat_2_3_len;
>  extern GlobalProperty pc_compat_2_2[];
>  extern const size_t pc_compat_2_2_len;
>  
> +extern GlobalProperty pc_compat_2_1[];
> +extern const size_t pc_compat_2_1_len;
> +
>  /* Helper for setting model-id for CPU models that changed model-id
>   * depending on QEMU versions up to QEMU 2.4.
>   */
> @@ -353,20 +356,6 @@ extern const size_t pc_compat_2_2_len;
>          .value    = "QEMU Virtual CPU version " v,\
>      },
>  
> -#define PC_COMPAT_2_1 \
> -    HW_COMPAT_2_1 \
> -    PC_CPU_MODEL_IDS("2.1.0") \
> -    {\
> -        .driver = "coreduo" "-" TYPE_X86_CPU,\
> -        .property = "vmx",\
> -        .value = "on",\
> -    },\
> -    {\
> -        .driver = "core2duo" "-" TYPE_X86_CPU,\
> -        .property = "vmx",\
> -        .value = "on",\
> -    },
> -
>  #define PC_COMPAT_2_0 \
>      PC_CPU_MODEL_IDS("2.0.0") \
>      {\
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index 8f387e9063..7570408caa 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -299,6 +299,39 @@ const size_t hw_compat_2_3_len = G_N_ELEMENTS(hw_compat_2_3);
>  GlobalProperty hw_compat_2_2[] = {};
>  const size_t hw_compat_2_2_len = G_N_ELEMENTS(hw_compat_2_2);
>  
> +GlobalProperty hw_compat_2_1[] = {
> +    {
> +        .driver   = "intel-hda",
> +        .property = "old_msi_addr",
> +        .value    = "on",
> +    },{
> +        .driver   = "VGA",
> +        .property = "qemu-extended-regs",
> +        .value    = "off",
> +    },{
> +        .driver   = "secondary-vga",
> +        .property = "qemu-extended-regs",
> +        .value    = "off",
> +    },{
> +        .driver   = "virtio-scsi-pci",
> +        .property = "any_layout",
> +        .value    = "off",
> +    },{
> +        .driver   = "usb-mouse",
> +        .property = "usb_version",
> +        .value    = stringify(1),
> +    },{
> +        .driver   = "usb-kbd",
> +        .property = "usb_version",
> +        .value    = stringify(1),
> +    },{
> +        .driver   = "virtio-pci",
> +        .property = "virtio-pci-bus-master-bug-migration",
> +        .value    = "on",
> +    },
> +};
> +const size_t hw_compat_2_1_len = G_N_ELEMENTS(hw_compat_2_1);
> +
>  static char *machine_get_accel(Object *obj, Error **errp)
>  {
>      MachineState *ms = MACHINE(obj);
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index aeba5a770e..f0c8f54aaf 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -530,6 +530,21 @@ GlobalProperty pc_compat_2_2[] = {
>  };
>  const size_t pc_compat_2_2_len = G_N_ELEMENTS(pc_compat_2_2);
>  
> +GlobalProperty pc_compat_2_1[] = {
> +    PC_CPU_MODEL_IDS("2.1.0")
> +    {
> +        .driver = "coreduo" "-" TYPE_X86_CPU,
> +        .property = "vmx",
> +        .value = "on",
> +    },
> +    {
> +        .driver = "core2duo" "-" TYPE_X86_CPU,
> +        .property = "vmx",
> +        .value = "on",
> +    },
> +};
> +const size_t pc_compat_2_1_len = G_N_ELEMENTS(pc_compat_2_1);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index 6c250e64fc..c7b5e0a3ad 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -323,7 +323,7 @@ static void pc_compat_2_2_fn(MachineState *machine)
>      pc_compat_2_3_fn(machine);
>  }
>  
> -static void pc_compat_2_1(MachineState *machine)
> +static void pc_compat_2_1_fn(MachineState *machine)
>  {
>      pc_compat_2_2_fn(machine);
>      x86_cpu_change_kvm_default("svm", NULL);
> @@ -331,7 +331,7 @@ static void pc_compat_2_1(MachineState *machine)
>  
>  static void pc_compat_2_0(MachineState *machine)
>  {
> -    pc_compat_2_1(machine);
> +    pc_compat_2_1_fn(machine);
>  }
>  
>  static void pc_compat_1_7(MachineState *machine)
> @@ -593,19 +593,17 @@ DEFINE_I440FX_MACHINE(v2_2, "pc-i440fx-2.2", pc_compat_2_2_fn,
>  static void pc_i440fx_2_1_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_1
> -    };
>  
>      pc_i440fx_2_2_machine_options(m);
>      m->hw_version = "2.1.0";
>      m->default_display = NULL;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, hw_compat_2_1, hw_compat_2_1_len);
> +    compat_props_add(m->compat_props, pc_compat_2_1, pc_compat_2_1_len);
>      pcmc->smbios_uuid_encoded = false;
>      pcmc->enforce_aligned_dimm = false;
>  }
>  
> -DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1,
> +DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1_fn,
>                        pc_i440fx_2_1_machine_options);
>  
>  static void pc_i440fx_2_0_machine_options(MachineClass *m)
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 2e71eb08e9..1c5b0e40b1 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -4302,12 +4302,8 @@ DEFINE_SPAPR_MACHINE(2_2, "2.2", false);
>  
>  static void spapr_machine_2_1_class_options(MachineClass *mc)
>  {
> -    static GlobalProperty compat[] = {
> -        HW_COMPAT_2_1
> -    };
> -
>      spapr_machine_2_2_class_options(mc);
> -    compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(mc->compat_props, hw_compat_2_1, hw_compat_2_1_len);
>  }
>  DEFINE_SPAPR_MACHINE(2_1, "2.1", false);
>  

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

* Re: [Qemu-devel] [PATCH v7 20/28] include: remove compat.h
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 20/28] include: remove compat.h Marc-André Lureau
  2018-12-21 13:10   ` Cornelia Huck
@ 2018-12-27  6:56   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:56 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:04:02 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> The header is now empty.
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/compat.h        | 4 ----
>  include/hw/i386/pc.h       | 1 -
>  hw/arm/virt.c              | 1 -
>  hw/ppc/spapr.c             | 1 -
>  hw/s390x/s390-virtio-ccw.c | 1 -
>  5 files changed, 8 deletions(-)
>  delete mode 100644 include/hw/compat.h
> 
> diff --git a/include/hw/compat.h b/include/hw/compat.h
> deleted file mode 100644
> index b2d0bdd599..0000000000
> --- a/include/hw/compat.h
> +++ /dev/null
> @@ -1,4 +0,0 @@
> -#ifndef HW_COMPAT_H
> -#define HW_COMPAT_H
> -
> -#endif /* HW_COMPAT_H */
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 784ea7a92c..6b7bf334cd 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -13,7 +13,6 @@
>  #include "qemu/bitmap.h"
>  #include "sysemu/sysemu.h"
>  #include "hw/pci/pci.h"
> -#include "hw/compat.h"
>  #include "hw/mem/pc-dimm.h"
>  #include "hw/mem/nvdimm.h"
>  #include "hw/acpi/acpi_dev_interface.h"
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 5fe2eebb02..9570f06f04 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -43,7 +43,6 @@
>  #include "sysemu/numa.h"
>  #include "sysemu/sysemu.h"
>  #include "sysemu/kvm.h"
> -#include "hw/compat.h"
>  #include "hw/loader.h"
>  #include "exec/address-spaces.h"
>  #include "qemu/bitops.h"
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 1c5b0e40b1..653a4528ac 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -70,7 +70,6 @@
>  #include "hw/nmi.h"
>  #include "hw/intc/intc.h"
>  
> -#include "hw/compat.h"
>  #include "qemu/cutils.h"
>  #include "hw/ppc/spapr_cpu_core.h"
>  #include "hw/mem/memory-device.h"
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index bf5f2f463c..c737507053 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -28,7 +28,6 @@
>  #include "hw/s390x/storage-keys.h"
>  #include "hw/s390x/storage-attributes.h"
>  #include "hw/s390x/event-facility.h"
> -#include "hw/compat.h"
>  #include "ipl.h"
>  #include "hw/s390x/s390-virtio-ccw.h"
>  #include "hw/s390x/css-bridge.h"

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

* Re: [Qemu-devel] [PATCH v7 21/28] compat: remove remaining PC_COMPAT macros
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 21/28] compat: remove remaining PC_COMPAT macros Marc-André Lureau
  2018-12-21 13:12   ` Cornelia Huck
@ 2018-12-27  6:58   ` Igor Mammedov
  1 sibling, 0 replies; 80+ messages in thread
From: Igor Mammedov @ 2018-12-27  6:58 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: qemu-devel, ehabkost

On Fri, 21 Dec 2018 13:04:03 +0400
Marc-André Lureau <marcandre.lureau@redhat.com> wrote:

> Use static arrays instead.  I decided to rename the conflicting
> pc_compat_2_1() function with pc_compat_2_1_fn().
> 
> Suggested-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Igor Mammedov <imammedo@redhat.com>

> ---
>  include/hw/i386/pc.h | 236 +++----------------------------------------
>  hw/i386/pc.c         | 232 ++++++++++++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c    |  57 ++++-------
>  3 files changed, 267 insertions(+), 258 deletions(-)
> 
> diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
> index 6b7bf334cd..84720bede9 100644
> --- a/include/hw/i386/pc.h
> +++ b/include/hw/i386/pc.h
> @@ -335,6 +335,21 @@ extern const size_t pc_compat_2_2_len;
>  extern GlobalProperty pc_compat_2_1[];
>  extern const size_t pc_compat_2_1_len;
>  
> +extern GlobalProperty pc_compat_2_0[];
> +extern const size_t pc_compat_2_0_len;
> +
> +extern GlobalProperty pc_compat_1_7[];
> +extern const size_t pc_compat_1_7_len;
> +
> +extern GlobalProperty pc_compat_1_6[];
> +extern const size_t pc_compat_1_6_len;
> +
> +extern GlobalProperty pc_compat_1_5[];
> +extern const size_t pc_compat_1_5_len;
> +
> +extern GlobalProperty pc_compat_1_4[];
> +extern const size_t pc_compat_1_4_len;
> +
>  /* Helper for setting model-id for CPU models that changed model-id
>   * depending on QEMU versions up to QEMU 2.4.
>   */
> @@ -355,227 +370,6 @@ extern const size_t pc_compat_2_1_len;
>          .value    = "QEMU Virtual CPU version " v,\
>      },
>  
> -#define PC_COMPAT_2_0 \
> -    PC_CPU_MODEL_IDS("2.0.0") \
> -    {\
> -        .driver   = "virtio-scsi-pci",\
> -        .property = "any_layout",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "PIIX4_PM",\
> -        .property = "memory-hotplug-support",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "apic",\
> -        .property = "version",\
> -        .value    = stringify(0x11),\
> -    },\
> -    {\
> -        .driver   = "nec-usb-xhci",\
> -        .property = "superspeed-ports-first",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "nec-usb-xhci",\
> -        .property = "force-pcie-endcap",\
> -        .value    = "on",\
> -    },\
> -    {\
> -        .driver   = "pci-serial",\
> -        .property = "prog_if",\
> -        .value    = stringify(0),\
> -    },\
> -    {\
> -        .driver   = "pci-serial-2x",\
> -        .property = "prog_if",\
> -        .value    = stringify(0),\
> -    },\
> -    {\
> -        .driver   = "pci-serial-4x",\
> -        .property = "prog_if",\
> -        .value    = stringify(0),\
> -    },\
> -    {\
> -        .driver   = "virtio-net-pci",\
> -        .property = "guest_announce",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "ICH9-LPC",\
> -        .property = "memory-hotplug-support",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "xio3130-downstream",\
> -        .property = COMPAT_PROP_PCP,\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "ioh3420",\
> -        .property = COMPAT_PROP_PCP,\
> -        .value    = "off",\
> -    },
> -
> -#define PC_COMPAT_1_7 \
> -    PC_CPU_MODEL_IDS("1.7.0") \
> -    {\
> -        .driver   = TYPE_USB_DEVICE,\
> -        .property = "msos-desc",\
> -        .value    = "no",\
> -    },\
> -    {\
> -        .driver   = "PIIX4_PM",\
> -        .property = "acpi-pci-hotplug-with-bridge-support",\
> -        .value    = "off",\
> -    },\
> -    {\
> -        .driver   = "hpet",\
> -        .property = HPET_INTCAP,\
> -        .value    = stringify(4),\
> -    },
> -
> -#define PC_COMPAT_1_6 \
> -    PC_CPU_MODEL_IDS("1.6.0") \
> -    {\
> -        .driver   = "e1000",\
> -        .property = "mitigation",\
> -        .value    = "off",\
> -    },{\
> -        .driver   = "qemu64-" TYPE_X86_CPU,\
> -        .property = "model",\
> -        .value    = stringify(2),\
> -    },{\
> -        .driver   = "qemu32-" TYPE_X86_CPU,\
> -        .property = "model",\
> -        .value    = stringify(3),\
> -    },{\
> -        .driver   = "i440FX-pcihost",\
> -        .property = "short_root_bus",\
> -        .value    = stringify(1),\
> -    },{\
> -        .driver   = "q35-pcihost",\
> -        .property = "short_root_bus",\
> -        .value    = stringify(1),\
> -    },
> -
> -#define PC_COMPAT_1_5 \
> -    PC_CPU_MODEL_IDS("1.5.0") \
> -    {\
> -        .driver   = "Conroe-" TYPE_X86_CPU,\
> -        .property = "model",\
> -        .value    = stringify(2),\
> -    },{\
> -        .driver   = "Conroe-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(2),\
> -    },{\
> -        .driver   = "Penryn-" TYPE_X86_CPU,\
> -        .property = "model",\
> -        .value    = stringify(2),\
> -    },{\
> -        .driver   = "Penryn-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(2),\
> -    },{\
> -        .driver   = "Nehalem-" TYPE_X86_CPU,\
> -        .property = "model",\
> -        .value    = stringify(2),\
> -    },{\
> -        .driver   = "Nehalem-" TYPE_X86_CPU,\
> -        .property = "min-level",\
> -        .value    = stringify(2),\
> -    },{\
> -        .driver   = "virtio-net-pci",\
> -        .property = "any_layout",\
> -        .value    = "off",\
> -    },{\
> -        .driver = TYPE_X86_CPU,\
> -        .property = "pmu",\
> -        .value = "on",\
> -    },{\
> -        .driver   = "i440FX-pcihost",\
> -        .property = "short_root_bus",\
> -        .value    = stringify(0),\
> -    },{\
> -        .driver   = "q35-pcihost",\
> -        .property = "short_root_bus",\
> -        .value    = stringify(0),\
> -    },
> -
> -#define PC_COMPAT_1_4 \
> -    PC_CPU_MODEL_IDS("1.4.0") \
> -    {\
> -        .driver   = "scsi-hd",\
> -        .property = "discard_granularity",\
> -        .value    = stringify(0),\
> -    },{\
> -        .driver   = "scsi-cd",\
> -        .property = "discard_granularity",\
> -        .value    = stringify(0),\
> -    },{\
> -        .driver   = "scsi-disk",\
> -        .property = "discard_granularity",\
> -        .value    = stringify(0),\
> -    },{\
> -        .driver   = "ide-hd",\
> -        .property = "discard_granularity",\
> -        .value    = stringify(0),\
> -    },{\
> -        .driver   = "ide-cd",\
> -        .property = "discard_granularity",\
> -        .value    = stringify(0),\
> -    },{\
> -        .driver   = "ide-drive",\
> -        .property = "discard_granularity",\
> -        .value    = stringify(0),\
> -    },{\
> -        .driver   = "virtio-blk-pci",\
> -        .property = "discard_granularity",\
> -        .value    = stringify(0),\
> -    },{\
> -        .driver   = "virtio-serial-pci",\
> -        .property = "vectors",\
> -        /* DEV_NVECTORS_UNSPECIFIED as a uint32_t string */\
> -        .value    = stringify(0xFFFFFFFF),\
> -    },{ \
> -        .driver   = "virtio-net-pci", \
> -        .property = "ctrl_guest_offloads", \
> -        .value    = "off", \
> -    },{\
> -        .driver   = "e1000",\
> -        .property = "romfile",\
> -        .value    = "pxe-e1000.rom",\
> -    },{\
> -        .driver   = "ne2k_pci",\
> -        .property = "romfile",\
> -        .value    = "pxe-ne2k_pci.rom",\
> -    },{\
> -        .driver   = "pcnet",\
> -        .property = "romfile",\
> -        .value    = "pxe-pcnet.rom",\
> -    },{\
> -        .driver   = "rtl8139",\
> -        .property = "romfile",\
> -        .value    = "pxe-rtl8139.rom",\
> -    },{\
> -        .driver   = "virtio-net-pci",\
> -        .property = "romfile",\
> -        .value    = "pxe-virtio.rom",\
> -    },{\
> -        .driver   = "486-" TYPE_X86_CPU,\
> -        .property = "model",\
> -        .value    = stringify(0),\
> -    },\
> -    {\
> -        .driver = "n270" "-" TYPE_X86_CPU,\
> -        .property = "movbe",\
> -        .value = "off",\
> -    },\
> -    {\
> -        .driver = "Westmere" "-" TYPE_X86_CPU,\
> -        .property = "pclmulqdq",\
> -        .value = "off",\
> -    },
> -
>  #define DEFINE_PC_MACHINE(suffix, namestr, initfn, optsfn) \
>      static void pc_machine_##suffix##_class_init(ObjectClass *oc, void *data) \
>      { \
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index f0c8f54aaf..76c7f84c37 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -72,6 +72,7 @@
>  #include "qapi/visitor.h"
>  #include "qom/cpu.h"
>  #include "hw/nmi.h"
> +#include "hw/usb.h"
>  #include "hw/i386/intel_iommu.h"
>  #include "hw/net/ne2000-isa.h"
>  
> @@ -545,6 +546,237 @@ GlobalProperty pc_compat_2_1[] = {
>  };
>  const size_t pc_compat_2_1_len = G_N_ELEMENTS(pc_compat_2_1);
>  
> +GlobalProperty pc_compat_2_0[] = {
> +    PC_CPU_MODEL_IDS("2.0.0")
> +    {
> +        .driver   = "virtio-scsi-pci",
> +        .property = "any_layout",
> +        .value    = "off",
> +    },{
> +        .driver   = "PIIX4_PM",
> +        .property = "memory-hotplug-support",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "apic",
> +        .property = "version",
> +        .value    = stringify(0x11),
> +    },
> +    {
> +        .driver   = "nec-usb-xhci",
> +        .property = "superspeed-ports-first",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "nec-usb-xhci",
> +        .property = "force-pcie-endcap",
> +        .value    = "on",
> +    },
> +    {
> +        .driver   = "pci-serial",
> +        .property = "prog_if",
> +        .value    = stringify(0),
> +    },
> +    {
> +        .driver   = "pci-serial-2x",
> +        .property = "prog_if",
> +        .value    = stringify(0),
> +    },
> +    {
> +        .driver   = "pci-serial-4x",
> +        .property = "prog_if",
> +        .value    = stringify(0),
> +    },
> +    {
> +        .driver   = "virtio-net-pci",
> +        .property = "guest_announce",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "ICH9-LPC",
> +        .property = "memory-hotplug-support",
> +        .value    = "off",
> +    },{
> +        .driver   = "xio3130-downstream",
> +        .property = COMPAT_PROP_PCP,
> +        .value    = "off",
> +    },{
> +        .driver   = "ioh3420",
> +        .property = COMPAT_PROP_PCP,
> +        .value    = "off",
> +    },
> +};
> +const size_t pc_compat_2_0_len = G_N_ELEMENTS(pc_compat_2_0);
> +
> +GlobalProperty pc_compat_1_7[] = {
> +    PC_CPU_MODEL_IDS("1.7.0")
> +    {
> +        .driver   = TYPE_USB_DEVICE,
> +        .property = "msos-desc",
> +        .value    = "no",
> +    },
> +    {
> +        .driver   = "PIIX4_PM",
> +        .property = "acpi-pci-hotplug-with-bridge-support",
> +        .value    = "off",
> +    },
> +    {
> +        .driver   = "hpet",
> +        .property = HPET_INTCAP,
> +        .value    = stringify(4),
> +    },
> +};
> +const size_t pc_compat_1_7_len = G_N_ELEMENTS(pc_compat_1_7);
> +
> +GlobalProperty pc_compat_1_6[] = {
> +    PC_CPU_MODEL_IDS("1.6.0")
> +    {
> +        .driver   = "e1000",
> +        .property = "mitigation",
> +        .value    = "off",
> +    },{
> +        .driver   = "qemu64-" TYPE_X86_CPU,
> +        .property = "model",
> +        .value    = stringify(2),
> +    },{
> +        .driver   = "qemu32-" TYPE_X86_CPU,
> +        .property = "model",
> +        .value    = stringify(3),
> +    },{
> +        .driver   = "i440FX-pcihost",
> +        .property = "short_root_bus",
> +        .value    = stringify(1),
> +    },{
> +        .driver   = "q35-pcihost",
> +        .property = "short_root_bus",
> +        .value    = stringify(1),
> +    },
> +};
> +const size_t pc_compat_1_6_len = G_N_ELEMENTS(pc_compat_1_6);
> +
> +GlobalProperty pc_compat_1_5[] = {
> +    PC_CPU_MODEL_IDS("1.5.0")
> +    {
> +        .driver   = "Conroe-" TYPE_X86_CPU,
> +        .property = "model",
> +        .value    = stringify(2),
> +    },{
> +        .driver   = "Conroe-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(2),
> +    },{
> +        .driver   = "Penryn-" TYPE_X86_CPU,
> +        .property = "model",
> +        .value    = stringify(2),
> +    },{
> +        .driver   = "Penryn-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(2),
> +    },{
> +        .driver   = "Nehalem-" TYPE_X86_CPU,
> +        .property = "model",
> +        .value    = stringify(2),
> +    },{
> +        .driver   = "Nehalem-" TYPE_X86_CPU,
> +        .property = "min-level",
> +        .value    = stringify(2),
> +    },{
> +        .driver   = "virtio-net-pci",
> +        .property = "any_layout",
> +        .value    = "off",
> +    },{
> +        .driver = TYPE_X86_CPU,
> +        .property = "pmu",
> +        .value = "on",
> +    },{
> +        .driver   = "i440FX-pcihost",
> +        .property = "short_root_bus",
> +        .value    = stringify(0),
> +    },{
> +        .driver   = "q35-pcihost",
> +        .property = "short_root_bus",
> +        .value    = stringify(0),
> +    },
> +};
> +const size_t pc_compat_1_5_len = G_N_ELEMENTS(pc_compat_1_5);
> +
> +GlobalProperty pc_compat_1_4[] = {
> +    PC_CPU_MODEL_IDS("1.4.0")
> +    {
> +        .driver   = "scsi-hd",
> +        .property = "discard_granularity",
> +        .value    = stringify(0),
> +    },{
> +        .driver   = "scsi-cd",
> +        .property = "discard_granularity",
> +        .value    = stringify(0),
> +    },{
> +        .driver   = "scsi-disk",
> +        .property = "discard_granularity",
> +        .value    = stringify(0),
> +    },{
> +        .driver   = "ide-hd",
> +        .property = "discard_granularity",
> +        .value    = stringify(0),
> +    },{
> +        .driver   = "ide-cd",
> +        .property = "discard_granularity",
> +        .value    = stringify(0),
> +    },{
> +        .driver   = "ide-drive",
> +        .property = "discard_granularity",
> +        .value    = stringify(0),
> +    },{
> +        .driver   = "virtio-blk-pci",
> +        .property = "discard_granularity",
> +        .value    = stringify(0),
> +    },{
> +        .driver   = "virtio-serial-pci",
> +        .property = "vectors",
> +        /* DEV_NVECTORS_UNSPECIFIED as a uint32_t string */
> +        .value    = stringify(0xFFFFFFFF),
> +    },{
> +        .driver   = "virtio-net-pci",
> +        .property = "ctrl_guest_offloads",
> +        .value    = "off",
> +    },{
> +        .driver   = "e1000",
> +        .property = "romfile",
> +        .value    = "pxe-e1000.rom",
> +    },{
> +        .driver   = "ne2k_pci",
> +        .property = "romfile",
> +        .value    = "pxe-ne2k_pci.rom",
> +    },{
> +        .driver   = "pcnet",
> +        .property = "romfile",
> +        .value    = "pxe-pcnet.rom",
> +    },{
> +        .driver   = "rtl8139",
> +        .property = "romfile",
> +        .value    = "pxe-rtl8139.rom",
> +    },{
> +        .driver   = "virtio-net-pci",
> +        .property = "romfile",
> +        .value    = "pxe-virtio.rom",
> +    },{
> +        .driver   = "486-" TYPE_X86_CPU,
> +        .property = "model",
> +        .value    = stringify(0),
> +    },
> +    {
> +        .driver = "n270" "-" TYPE_X86_CPU,
> +        .property = "movbe",
> +        .value = "off",
> +    },
> +    {
> +        .driver = "Westmere" "-" TYPE_X86_CPU,
> +        .property = "pclmulqdq",
> +        .value = "off",
> +    },
> +};
> +const size_t pc_compat_1_4_len = G_N_ELEMENTS(pc_compat_1_4);
> +
>  void gsi_handler(void *opaque, int n, int level)
>  {
>      GSIState *s = opaque;
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index c7b5e0a3ad..1c77119877 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -329,35 +329,35 @@ static void pc_compat_2_1_fn(MachineState *machine)
>      x86_cpu_change_kvm_default("svm", NULL);
>  }
>  
> -static void pc_compat_2_0(MachineState *machine)
> +static void pc_compat_2_0_fn(MachineState *machine)
>  {
>      pc_compat_2_1_fn(machine);
>  }
>  
> -static void pc_compat_1_7(MachineState *machine)
> +static void pc_compat_1_7_fn(MachineState *machine)
>  {
> -    pc_compat_2_0(machine);
> +    pc_compat_2_0_fn(machine);
>      x86_cpu_change_kvm_default("x2apic", NULL);
>  }
>  
> -static void pc_compat_1_6(MachineState *machine)
> +static void pc_compat_1_6_fn(MachineState *machine)
>  {
> -    pc_compat_1_7(machine);
> +    pc_compat_1_7_fn(machine);
>  }
>  
> -static void pc_compat_1_5(MachineState *machine)
> +static void pc_compat_1_5_fn(MachineState *machine)
>  {
> -    pc_compat_1_6(machine);
> +    pc_compat_1_6_fn(machine);
>  }
>  
> -static void pc_compat_1_4(MachineState *machine)
> +static void pc_compat_1_4_fn(MachineState *machine)
>  {
> -    pc_compat_1_5(machine);
> +    pc_compat_1_5_fn(machine);
>  }
>  
>  static void pc_compat_1_3(MachineState *machine)
>  {
> -    pc_compat_1_4(machine);
> +    pc_compat_1_4_fn(machine);
>      enable_compat_apic_id_mode();
>  }
>  
> @@ -609,13 +609,10 @@ DEFINE_I440FX_MACHINE(v2_1, "pc-i440fx-2.1", pc_compat_2_1_fn,
>  static void pc_i440fx_2_0_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_2_0
> -    };
>  
>      pc_i440fx_2_1_machine_options(m);
>      m->hw_version = "2.0.0";
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, pc_compat_2_0, pc_compat_2_0_len);
>      pcmc->smbios_legacy_mode = true;
>      pcmc->has_reserved_memory = false;
>      /* This value depends on the actual DSDT and SSDT compiled into
> @@ -638,73 +635,59 @@ static void pc_i440fx_2_0_machine_options(MachineClass *m)
>      pcmc->acpi_data_size = 0x10000;
>  }
>  
> -DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0,
> +DEFINE_I440FX_MACHINE(v2_0, "pc-i440fx-2.0", pc_compat_2_0_fn,
>                        pc_i440fx_2_0_machine_options);
>  
>  static void pc_i440fx_1_7_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_1_7
> -    };
>  
>      pc_i440fx_2_0_machine_options(m);
>      m->hw_version = "1.7.0";
>      m->default_machine_opts = NULL;
>      m->option_rom_has_mr = true;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, pc_compat_1_7, pc_compat_1_7_len);
>      pcmc->smbios_defaults = false;
>      pcmc->gigabyte_align = false;
>      pcmc->legacy_acpi_table_size = 6414;
>  }
>  
> -DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7,
> +DEFINE_I440FX_MACHINE(v1_7, "pc-i440fx-1.7", pc_compat_1_7_fn,
>                        pc_i440fx_1_7_machine_options);
>  
>  static void pc_i440fx_1_6_machine_options(MachineClass *m)
>  {
>      PCMachineClass *pcmc = PC_MACHINE_CLASS(m);
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_1_6
> -    };
>  
>      pc_i440fx_1_7_machine_options(m);
>      m->hw_version = "1.6.0";
>      m->rom_file_has_mr = false;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, pc_compat_1_6, pc_compat_1_6_len);
>      pcmc->has_acpi_build = false;
>  }
>  
> -DEFINE_I440FX_MACHINE(v1_6, "pc-i440fx-1.6", pc_compat_1_6,
> +DEFINE_I440FX_MACHINE(v1_6, "pc-i440fx-1.6", pc_compat_1_6_fn,
>                        pc_i440fx_1_6_machine_options);
>  
>  static void pc_i440fx_1_5_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_1_5
> -    };
> -
>      pc_i440fx_1_6_machine_options(m);
>      m->hw_version = "1.5.0";
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, pc_compat_1_5, pc_compat_1_5_len);
>  }
>  
> -DEFINE_I440FX_MACHINE(v1_5, "pc-i440fx-1.5", pc_compat_1_5,
> +DEFINE_I440FX_MACHINE(v1_5, "pc-i440fx-1.5", pc_compat_1_5_fn,
>                        pc_i440fx_1_5_machine_options);
>  
>  static void pc_i440fx_1_4_machine_options(MachineClass *m)
>  {
> -    static GlobalProperty compat[] = {
> -        PC_COMPAT_1_4
> -    };
> -
>      pc_i440fx_1_5_machine_options(m);
>      m->hw_version = "1.4.0";
>      m->hot_add_cpu = NULL;
> -    compat_props_add(m->compat_props, compat, G_N_ELEMENTS(compat));
> +    compat_props_add(m->compat_props, pc_compat_1_4, pc_compat_1_4_len);
>  }
>  
> -DEFINE_I440FX_MACHINE(v1_4, "pc-i440fx-1.4", pc_compat_1_4,
> +DEFINE_I440FX_MACHINE(v1_4, "pc-i440fx-1.4", pc_compat_1_4_fn,
>                        pc_i440fx_1_4_machine_options);
>  
>  static void pc_i440fx_1_3_machine_options(MachineClass *m)

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

* Re: [Qemu-devel] [PATCH v7 25/28] qdev-props: remove errp from GlobalProperty
  2018-12-21 15:34   ` Cornelia Huck
@ 2019-01-04 10:57     ` Marc-André Lureau
  2019-01-04 11:04       ` Cornelia Huck
  0 siblings, 1 reply; 80+ messages in thread
From: Marc-André Lureau @ 2019-01-04 10:57 UTC (permalink / raw)
  To: Cornelia Huck; +Cc: Igor Mammedov, QEMU, Eduardo Habkost

Hi

On Fri, Dec 21, 2018 at 7:34 PM Cornelia Huck <cohuck@redhat.com> wrote:
>
> On Fri, 21 Dec 2018 13:04:07 +0400
> Marc-André Lureau <marcandre.lureau@redhat.com> wrote:
>
> > All qdev_prop_register_global() set &error_fatal for errp, except
> > '-rtc driftfix=slew', which arguably should also use &error_fatal, as
> > otherwise failing to apply the property would only report a warning.
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> > ---
> >  include/hw/qdev-core.h    | 6 ------
> >  hw/core/qdev-properties.c | 4 ++--
> >  qom/cpu.c                 | 1 -
> >  target/i386/cpu.c         | 1 -
> >  target/sparc/cpu.c        | 1 -
> >  vl.c                      | 1 -
> >  6 files changed, 2 insertions(+), 12 deletions(-)
> >
>
> > diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> > index 3467e0485c..a2d25d3d37 100644
> > --- a/hw/core/qdev-properties.c
> > +++ b/hw/core/qdev-properties.c
> > @@ -1238,8 +1238,8 @@ void qdev_prop_set_globals(DeviceState *dev)
> >          if (err != NULL) {
> >              error_prepend(&err, "can't apply global %s.%s=%s: ",
> >                            prop->driver, prop->property, prop->value);
> > -            if (!dev->hotplugged && prop->errp) {
> > -                error_propagate(prop->errp, err);
> > +            if (!dev->hotplugged) {
> > +                error_propagate(&error_fatal, err);
>
> Might want to add a comment to this function that any error is fatal
> for non-hotplugged devices.
>

What about adding the following comment to GlobalProperty?

 * An error is fatal for non-hotplugged devices, when the global is applied.

> >              } else {
> >                  warn_report_err(err);
> >              }
>
> Reviewed-by: Cornelia Huck <cohuck@redhat.com>
>

thanks

-- 
Marc-André Lureau

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

* Re: [Qemu-devel] [PATCH v7 25/28] qdev-props: remove errp from GlobalProperty
  2019-01-04 10:57     ` Marc-André Lureau
@ 2019-01-04 11:04       ` Cornelia Huck
  0 siblings, 0 replies; 80+ messages in thread
From: Cornelia Huck @ 2019-01-04 11:04 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: Igor Mammedov, QEMU, Eduardo Habkost

On Fri, 4 Jan 2019 14:57:26 +0400
Marc-André Lureau <marcandre.lureau@gmail.com> wrote:

> Hi
> 
> On Fri, Dec 21, 2018 at 7:34 PM Cornelia Huck <cohuck@redhat.com> wrote:
> >
> > On Fri, 21 Dec 2018 13:04:07 +0400
> > Marc-André Lureau <marcandre.lureau@redhat.com> wrote:
> >  
> > > All qdev_prop_register_global() set &error_fatal for errp, except
> > > '-rtc driftfix=slew', which arguably should also use &error_fatal, as
> > > otherwise failing to apply the property would only report a warning.
> > >
> > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > > Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> > > ---
> > >  include/hw/qdev-core.h    | 6 ------
> > >  hw/core/qdev-properties.c | 4 ++--
> > >  qom/cpu.c                 | 1 -
> > >  target/i386/cpu.c         | 1 -
> > >  target/sparc/cpu.c        | 1 -
> > >  vl.c                      | 1 -
> > >  6 files changed, 2 insertions(+), 12 deletions(-)
> > >  
> >  
> > > diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
> > > index 3467e0485c..a2d25d3d37 100644
> > > --- a/hw/core/qdev-properties.c
> > > +++ b/hw/core/qdev-properties.c
> > > @@ -1238,8 +1238,8 @@ void qdev_prop_set_globals(DeviceState *dev)
> > >          if (err != NULL) {
> > >              error_prepend(&err, "can't apply global %s.%s=%s: ",
> > >                            prop->driver, prop->property, prop->value);
> > > -            if (!dev->hotplugged && prop->errp) {
> > > -                error_propagate(prop->errp, err);
> > > +            if (!dev->hotplugged) {
> > > +                error_propagate(&error_fatal, err);  
> >
> > Might want to add a comment to this function that any error is fatal
> > for non-hotplugged devices.
> >  
> 
> What about adding the following comment to GlobalProperty?
> 
>  * An error is fatal for non-hotplugged devices, when the global is applied.

Sounds good.

> 
> > >              } else {
> > >                  warn_report_err(err);
> > >              }  
> >
> > Reviewed-by: Cornelia Huck <cohuck@redhat.com>
> >  
> 
> thanks
> 

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

* Re: [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties
  2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
                   ` (27 preceding siblings ...)
  2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 28/28] hostmem: use object id for memory region name with >= 4.0 Marc-André Lureau
@ 2019-01-04 11:42 ` Marc-André Lureau
  2019-01-04 16:16   ` Eduardo Habkost
  28 siblings, 1 reply; 80+ messages in thread
From: Marc-André Lureau @ 2019-01-04 11:42 UTC (permalink / raw)
  To: QEMU; +Cc: Igor Mammedov, Eduardo Habkost

Hi

On Fri, Dec 21, 2018 at 1:04 PM Marc-André Lureau
<marcandre.lureau@redhat.com> wrote:
>
> Hi,
>
> During "[PATCH v2 05/10] qom/globals: generalize
> object_property_set_globals()" review, Eduardo suggested to rework the
> GlobalProperty handling, so that -global is limited to QDev only and
> we avoid mixing the machine compats and the user-provided -global
> properties (instead of generalizing -global to various object kinds,
> like I proposed in v2).
>
> "qdev: do not mix compat props with global props" patch decouples a
> bit user-provided -global from machine compat properties. This allows
> to get rid of "user_provided" and "errp" fields in following patches.
>
> A new compat property "x-use-canonical-path-for-ramblock-id" is added
> to hostmem for legacy canonical path names, set to true for -file and
> -memfd with qemu < 4.0.
>
> (this series was initially titled "[PATCH v2 00/10] hostmem: use
> object "id" for memory region name with >= 3.1", but its focus is more
> in refactoring the global and compatilibity properties handling now)
>

Beside the rebase conflicts, and added comment in patch 25, all
patches have been reviewed-by. I have pushed the rebased version on
github: https://github.com/elmarco/qemu/tree/props

Eduardo, Igor, who is making the pullreq? I could also send it, if you are okay.

Thanks

> v7:
> - rebased (s390 conflicts)
> - rename self/backend in last patch
> - add some r-b tags
>
> v6:
> - split "hw: apply machine compat properties without touching globals"
> - replace PC_COMPAT_* and HW_COMPAT_* defines with static arrays
> - add ARMCPUInfo *info in ARMCPUClass for "arm: replace
>   instance_post_init()" patch
> - rebased, commit message updates, add some r-b tags
>
> v5:
> - replace the SET_COMPAT macros, use normal function instead
>   (suggested by Eduardo)
> - replace the TYPE_COMPAT_PROPS interface approach for explicit
>   object_apply_compat_props(), solving post-init ordering issues.
> - get back to coupling compat properties with machine, in qdev
>   (although there is still some discussion how to improve this, it
>    can be changed later)
> - mark the "arm: replace instance_post_init()" as RFC, since it is not
>   longer required for this series
> - change machines version from 3.2 to 4.0
> - add some r-b tags
>
> v4:
> - fix accel/machine compat props apply order inversion
> - split "qdev: do not mix compat props with global props": replace
>   using current_machine by new compat_props global, introduce
>   SET_COMPAT() macro, use GPtrArray.
> - add a comment about "qdev-props: call object_apply_global_props()"
>   error reporting
> - add "arm: replace instance_post_init()", to solve the post-init
>   ordering issue
> - add "hw/arm/virt: add virt-3.2 machine type" for completeness
> - commit message improvements
> - rebased, add r-b tags
>
> v3:
> - GlobalProperties improvements/cleanups
> - drop generalizing the -global idea
> - "replace" the set_globals flag with a TYPE_COMPAT_PROPS interface
> - update hw/i386 machine version to 3.2
> - add "qom: make interface types abstract" interface cleanup
>
> v2:
> - replace "qom/user-creatable: add a few helper macros" patch for a
>   more optimized "qom: make user_creatable_complete() specific to
>   UserCreatable"
> - rename register_global_list() to register_global_properties()
> - call object_property_set_globals() after post-init
> - add and use a ObjectClass.set_globals flag, instead of dynamically
>   check object class in object_property_set_globals()
> - use object "id" in >= 3.1 instead of canonical path, add compat
>   property "x-use-canonical-path-for-ramblock-id" in base hostmem
>   class.
>
> Marc-André Lureau (28):
>   hw: apply accel compat properties without touching globals
>   machines: replace COMPAT define with a static array
>   hw: apply machine compat properties without touching globals
>   machine: move compat properties out of globals
>   hw: remove SET_MACHINE_COMPAT
>   compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros
>   compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros
>   compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros
>   compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros
>   compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros
>   compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros
>   compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros
>   compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros
>   compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros
>   compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros
>   compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros
>   compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros
>   compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros
>   compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros
>   include: remove compat.h
>   compat: remove remaining PC_COMPAT macros
>   qdev: make a separate helper function to apply compat properties
>   qdev: all globals are now user-provided
>   qdev-props: convert global_props to GPtrArray
>   qdev-props: remove errp from GlobalProperty
>   qdev-props: call object_apply_global_props()
>   arm: replace instance_post_init()
>   hostmem: use object id for memory region name with >= 4.0
>
>  include/hw/boards.h            |  59 ++-
>  include/hw/compat.h            | 291 --------------
>  include/hw/i386/pc.h           | 684 +++------------------------------
>  include/hw/qdev-core.h         |  21 +-
>  include/qom/object.h           |   3 +
>  include/sysemu/accel.h         |   4 +-
>  include/sysemu/hostmem.h       |   3 +-
>  target/arm/cpu-qom.h           |   3 +
>  target/arm/cpu.h               |   2 +
>  accel/accel.c                  |  12 -
>  backends/hostmem-file.c        |   8 +-
>  backends/hostmem-memfd.c       |   2 +-
>  backends/hostmem-ram.c         |   9 +-
>  backends/hostmem.c             |  36 ++
>  hw/arm/virt.c                  |  46 +--
>  hw/core/machine.c              | 339 +++++++++++++++-
>  hw/core/qdev-properties.c      |  49 +--
>  hw/core/qdev.c                 |  15 +
>  hw/i386/pc.c                   | 668 ++++++++++++++++++++++++++++++++
>  hw/i386/pc_piix.c              | 603 +++++++++++++++--------------
>  hw/i386/pc_q35.c               |  36 +-
>  hw/ppc/spapr.c                 | 207 +++++-----
>  hw/s390x/s390-virtio-ccw.c     | 196 +++++-----
>  hw/xen/xen-common.c            |  41 +-
>  qom/cpu.c                      |   1 -
>  qom/object.c                   |  35 ++
>  target/arm/cpu.c               |  30 +-
>  target/arm/cpu64.c             |  24 +-
>  target/i386/cpu.c              |   1 -
>  target/sparc/cpu.c             |   1 -
>  tests/test-qdev-global-props.c |  57 +--
>  vl.c                           |   4 -
>  32 files changed, 1818 insertions(+), 1672 deletions(-)
>  delete mode 100644 include/hw/compat.h
>
> --
> 2.20.1.2.gb21ebb671b
>
>


--
Marc-André Lureau

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

* Re: [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties
  2019-01-04 11:42 ` [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
@ 2019-01-04 16:16   ` Eduardo Habkost
  0 siblings, 0 replies; 80+ messages in thread
From: Eduardo Habkost @ 2019-01-04 16:16 UTC (permalink / raw)
  To: Marc-André Lureau; +Cc: QEMU, Igor Mammedov

On Fri, Jan 04, 2019 at 03:42:08PM +0400, Marc-André Lureau wrote:
> Hi
> 
> On Fri, Dec 21, 2018 at 1:04 PM Marc-André Lureau
> <marcandre.lureau@redhat.com> wrote:
> >
> > Hi,
> >
> > During "[PATCH v2 05/10] qom/globals: generalize
> > object_property_set_globals()" review, Eduardo suggested to rework the
> > GlobalProperty handling, so that -global is limited to QDev only and
> > we avoid mixing the machine compats and the user-provided -global
> > properties (instead of generalizing -global to various object kinds,
> > like I proposed in v2).
> >
> > "qdev: do not mix compat props with global props" patch decouples a
> > bit user-provided -global from machine compat properties. This allows
> > to get rid of "user_provided" and "errp" fields in following patches.
> >
> > A new compat property "x-use-canonical-path-for-ramblock-id" is added
> > to hostmem for legacy canonical path names, set to true for -file and
> > -memfd with qemu < 4.0.
> >
> > (this series was initially titled "[PATCH v2 00/10] hostmem: use
> > object "id" for memory region name with >= 3.1", but its focus is more
> > in refactoring the global and compatilibity properties handling now)
> >
> 
> Beside the rebase conflicts, and added comment in patch 25, all
> patches have been reviewed-by. I have pushed the rebased version on
> github: https://github.com/elmarco/qemu/tree/props
> 
> Eduardo, Igor, who is making the pullreq? I could also send it, if you are okay.

I was planning to merge this next week, but if you are willing to
send the pull request, that's even better.  Thanks!

Acked-by: Eduardo Habkost <ehabkost@redhat.com>

-- 
Eduardo

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

end of thread, other threads:[~2019-01-04 16:16 UTC | newest]

Thread overview: 80+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-21  9:03 [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 01/28] hw: apply accel compat properties without touching globals Marc-André Lureau
2018-12-21 11:58   ` Cornelia Huck
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 02/28] machines: replace COMPAT define with a static array Marc-André Lureau
2018-12-21 12:33   ` Cornelia Huck
2018-12-21 14:17   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 03/28] hw: apply machine compat properties without touching globals Marc-André Lureau
2018-12-21 12:38   ` Cornelia Huck
2018-12-21 14:20   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 04/28] machine: move compat properties out of globals Marc-André Lureau
2018-12-21 12:44   ` Cornelia Huck
2018-12-21 14:21   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 05/28] hw: remove SET_MACHINE_COMPAT Marc-André Lureau
2018-12-21 12:44   ` Cornelia Huck
2018-12-21 14:22   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 06/28] compat: replace PC_COMPAT_3_1 & HW_COMPAT_3_1 macros Marc-André Lureau
2018-12-21 12:47   ` Cornelia Huck
2018-12-27  6:35   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 07/28] compat: replace PC_COMPAT_3_0 & HW_COMPAT_3_0 macros Marc-André Lureau
2018-12-21 12:50   ` Cornelia Huck
2018-12-27  6:37   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 08/28] compat: replace PC_COMPAT_2_12 & HW_COMPAT_2_12 macros Marc-André Lureau
2018-12-21 12:52   ` Cornelia Huck
2018-12-27  6:39   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 09/28] compat: replace PC_COMPAT_2_11 & HW_COMPAT_2_11 macros Marc-André Lureau
2018-12-21 12:53   ` Cornelia Huck
2018-12-27  6:40   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 10/28] compat: replace PC_COMPAT_2_10 & HW_COMPAT_2_10 macros Marc-André Lureau
2018-12-21 12:55   ` Cornelia Huck
2018-12-27  6:41   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 11/28] compat: replace PC_COMPAT_2_9 & HW_COMPAT_2_9 macros Marc-André Lureau
2018-12-21 12:56   ` Cornelia Huck
2018-12-27  6:44   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 12/28] compat: replace PC_COMPAT_2_8 & HW_COMPAT_2_8 macros Marc-André Lureau
2018-12-21 12:58   ` Cornelia Huck
2018-12-27  6:45   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 13/28] compat: replace PC_COMPAT_2_7 & HW_COMPAT_2_7 macros Marc-André Lureau
2018-12-21 13:00   ` Cornelia Huck
2018-12-27  6:47   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 14/28] compat: replace PC_COMPAT_2_6 & HW_COMPAT_2_6 macros Marc-André Lureau
2018-12-21 13:03   ` Cornelia Huck
2018-12-27  6:48   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 15/28] compat: replace PC_COMPAT_2_5 & HW_COMPAT_2_5 macros Marc-André Lureau
2018-12-21 13:04   ` Cornelia Huck
2018-12-27  6:50   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 16/28] compat: replace PC_COMPAT_2_4 & HW_COMPAT_2_4 macros Marc-André Lureau
2018-12-21 13:05   ` Cornelia Huck
2018-12-27  6:51   ` Igor Mammedov
2018-12-21  9:03 ` [Qemu-devel] [PATCH v7 17/28] compat: replace PC_COMPAT_2_3 & HW_COMPAT_2_3 macros Marc-André Lureau
2018-12-21 13:07   ` Cornelia Huck
2018-12-27  6:52   ` Igor Mammedov
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 18/28] compat: replace PC_COMPAT_2_2 & HW_COMPAT_2_2 macros Marc-André Lureau
2018-12-21 13:08   ` Cornelia Huck
2018-12-27  6:53   ` Igor Mammedov
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 19/28] compat: replace PC_COMPAT_2_1 & HW_COMPAT_2_1 macros Marc-André Lureau
2018-12-21 13:09   ` Cornelia Huck
2018-12-27  6:54   ` Igor Mammedov
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 20/28] include: remove compat.h Marc-André Lureau
2018-12-21 13:10   ` Cornelia Huck
2018-12-27  6:56   ` Igor Mammedov
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 21/28] compat: remove remaining PC_COMPAT macros Marc-André Lureau
2018-12-21 13:12   ` Cornelia Huck
2018-12-27  6:58   ` Igor Mammedov
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 22/28] qdev: make a separate helper function to apply compat properties Marc-André Lureau
2018-12-21 14:38   ` Igor Mammedov
2018-12-21 15:25   ` Cornelia Huck
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 23/28] qdev: all globals are now user-provided Marc-André Lureau
2018-12-21 15:26   ` Cornelia Huck
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 24/28] qdev-props: convert global_props to GPtrArray Marc-André Lureau
2018-12-21 15:28   ` Cornelia Huck
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 25/28] qdev-props: remove errp from GlobalProperty Marc-André Lureau
2018-12-21 15:34   ` Cornelia Huck
2019-01-04 10:57     ` Marc-André Lureau
2019-01-04 11:04       ` Cornelia Huck
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 26/28] qdev-props: call object_apply_global_props() Marc-André Lureau
2018-12-21 15:35   ` Cornelia Huck
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 27/28] arm: replace instance_post_init() Marc-André Lureau
2018-12-21  9:04 ` [Qemu-devel] [PATCH v7 28/28] hostmem: use object id for memory region name with >= 4.0 Marc-André Lureau
2019-01-04 11:42 ` [Qemu-devel] [PATCH v7 00/28] Generalize machine compatibility properties Marc-André Lureau
2019-01-04 16:16   ` Eduardo Habkost

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.