Blame SOURCES/kvm-qdev-Loosen-coupling-between-compat-and-other-global.patch

7711c0
From a3a904263d8b2c2cb91be8f9dfb048239fc2b1e2 Mon Sep 17 00:00:00 2001
7711c0
From: Markus Armbruster <armbru@redhat.com>
7711c0
Date: Fri, 17 May 2019 06:51:07 +0200
7711c0
Subject: [PATCH 40/53] qdev: Loosen coupling between compat and other global
7711c0
 properties
7711c0
MIME-Version: 1.0
7711c0
Content-Type: text/plain; charset=UTF-8
7711c0
Content-Transfer-Encoding: 8bit
7711c0
7711c0
RH-Author: Markus Armbruster <armbru@redhat.com>
7711c0
Message-id: <20190517065120.12028-19-armbru@redhat.com>
7711c0
Patchwork-id: 88002
7711c0
O-Subject: [RHEL-7.7 qemu-kvm-rhev PATCH v3 18/31] qdev: Loosen coupling between compat and other global properties
7711c0
Bugzilla: 1624009
7711c0
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
7711c0
RH-Acked-by: Thomas Huth <thuth@redhat.com>
7711c0
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
7711c0
7711c0
The (upstream) patch after next creates global properties before
7711c0
compat properties rather than after.  That's fine upstream, because
7711c0
compat properties have been divorced from global properties there, in
7711c0
merge commit 31ed41889e6.  Downstream, changing creation order that
7711c0
way would break overriding compat properties with -global.
7711c0
7711c0
Since backporting the upstream work is rather invasive, this commit
7711c0
loosens the coupling between the two just enough to permit the
7711c0
reordering: collect accelerator and machine compat properties in
7711c0
separate lists @accel_compat_props and @machine_compat_props rather
7711c0
than stuffing them all into @global_props, and apply the three lists
7711c0
order @accel_compat_props, @machine_compat_props, @global_props.  This
7711c0
matches the order before the patch, thus no functional change.
7711c0
7711c0
Signed-off-by: Markus Armbruster <armbru@redhat.com>
7711c0
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
7711c0
---
7711c0
 accel/accel.c                |  2 +-
7711c0
 hw/core/machine.c            |  2 +-
7711c0
 hw/core/qdev-properties.c    | 34 +++++++++++++++++++++++++++-------
7711c0
 include/hw/qdev-properties.h |  9 +++------
7711c0
 4 files changed, 32 insertions(+), 15 deletions(-)
7711c0
7711c0
diff --git a/accel/accel.c b/accel/accel.c
7711c0
index 5f3d73f..124f957 100644
7711c0
--- a/accel/accel.c
7711c0
+++ b/accel/accel.c
7711c0
@@ -123,7 +123,7 @@ void configure_accelerator(MachineState *ms)
7711c0
 void accel_register_compat_props(AccelState *accel)
7711c0
 {
7711c0
     AccelClass *class = ACCEL_GET_CLASS(accel);
7711c0
-    register_compat_props_array(class->global_props);
7711c0
+    register_accel_compat_props(class->global_props);
7711c0
 }
7711c0
 
7711c0
 static void register_accel_types(void)
7711c0
diff --git a/hw/core/machine.c b/hw/core/machine.c
7711c0
index 2040177..b4804e9 100644
7711c0
--- a/hw/core/machine.c
7711c0
+++ b/hw/core/machine.c
7711c0
@@ -853,7 +853,7 @@ void machine_register_compat_props(MachineState *machine)
7711c0
         p = g_array_index(mc->compat_props, GlobalProperty *, i);
7711c0
         /* Machine compat_props must never cause errors: */
7711c0
         p->errp = &error_abort;
7711c0
-        qdev_prop_register_global(p);
7711c0
+        register_machine_compat_prop(p);
7711c0
     }
7711c0
 }
7711c0
 
7711c0
diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c
7711c0
index f3a83a3..5fd6d11 100644
7711c0
--- a/hw/core/qdev-properties.c
7711c0
+++ b/hw/core/qdev-properties.c
7711c0
@@ -1174,6 +1174,14 @@ void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value)
7711c0
     *ptr = value;
7711c0
 }
7711c0
 
7711c0
+static GList *machine_compat_props;
7711c0
+static GList *accel_compat_props;
7711c0
+
7711c0
+void register_machine_compat_prop(GlobalProperty *prop)
7711c0
+{
7711c0
+    machine_compat_props = g_list_append(machine_compat_props, prop);
7711c0
+}
7711c0
+
7711c0
 static GList *global_props;
7711c0
 
7711c0
 void qdev_prop_register_global(GlobalProperty *prop)
7711c0
@@ -1195,10 +1203,17 @@ void register_compat_prop(const char *driver,
7711c0
     qdev_prop_register_global(p);
7711c0
 }
7711c0
 
7711c0
-void register_compat_props_array(GlobalProperty *prop)
7711c0
+void register_accel_compat_props(GlobalProperty *props)
7711c0
 {
7711c0
-    for (; prop && prop->driver; prop++) {
7711c0
-        register_compat_prop(prop->driver, prop->property, prop->value);
7711c0
+    GlobalProperty *p, *prop;
7711c0
+
7711c0
+    for (p = props; p && p->driver; p++) {
7711c0
+        prop = g_new0(GlobalProperty, 1);
7711c0
+        prop->errp = &error_abort;
7711c0
+        prop->driver = p->driver;
7711c0
+        prop->property = p->property;
7711c0
+        prop->value = p->value;
7711c0
+        accel_compat_props = g_list_append(accel_compat_props, prop);
7711c0
     }
7711c0
 }
7711c0
 
7711c0
@@ -1245,11 +1260,9 @@ int qdev_prop_check_globals(void)
7711c0
     return ret;
7711c0
 }
7711c0
 
7711c0
-void qdev_prop_set_globals(DeviceState *dev)
7711c0
+static void qdev_prop_set_globals_1(DeviceState *dev, GList *l)
7711c0
 {
7711c0
-    GList *l;
7711c0
-
7711c0
-    for (l = global_props; l; l = l->next) {
7711c0
+    for (; l; l = l->next) {
7711c0
         GlobalProperty *prop = l->data;
7711c0
         Error *err = NULL;
7711c0
 
7711c0
@@ -1271,6 +1284,13 @@ void qdev_prop_set_globals(DeviceState *dev)
7711c0
     }
7711c0
 }
7711c0
 
7711c0
+void qdev_prop_set_globals(DeviceState *dev)
7711c0
+{
7711c0
+    qdev_prop_set_globals_1(dev, accel_compat_props);
7711c0
+    qdev_prop_set_globals_1(dev, machine_compat_props);
7711c0
+    qdev_prop_set_globals_1(dev, global_props);
7711c0
+}
7711c0
+
7711c0
 /* --- 64bit unsigned int 'size' type --- */
7711c0
 
7711c0
 static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
7711c0
diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h
7711c0
index b2ad8e9..19ad0ae 100644
7711c0
--- a/include/hw/qdev-properties.h
7711c0
+++ b/include/hw/qdev-properties.h
7711c0
@@ -280,12 +280,9 @@ void error_set_from_qdev_prop_error(Error **errp, int ret, DeviceState *dev,
7711c0
  */
7711c0
 void register_compat_prop(const char *driver, const char *property,
7711c0
                           const char *value);
7711c0
-/*
7711c0
- * register_compat_props_array(): using register_compat_prop(), which
7711c0
- * only registers internal global properties (which has lower priority
7711c0
- * than user-provided global properties)
7711c0
- */
7711c0
-void register_compat_props_array(GlobalProperty *prop);
7711c0
+
7711c0
+void register_accel_compat_props(GlobalProperty *props);
7711c0
+void register_machine_compat_prop(GlobalProperty *prop);
7711c0
 
7711c0
 /**
7711c0
  * qdev_property_add_static:
7711c0
-- 
7711c0
1.8.3.1
7711c0