[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH for-3.2 v4 25/28] machine: add compat-props interfac
From: |
Marc-André Lureau |
Subject: |
[Qemu-devel] [PATCH for-3.2 v4 25/28] machine: add compat-props interface |
Date: |
Tue, 27 Nov 2018 13:27:58 +0400 |
Let's make compatiblity properties an interface, so that objects other
than QDev can benefit from having machine compatiblity properties.
Signed-off-by: Marc-André Lureau <address@hidden>
---
include/hw/boards.h | 2 ++
hw/core/compat-props.c | 55 ++++++++++++++++++++++++++++++++++++++++++
hw/core/qdev.c | 24 +++---------------
MAINTAINERS | 1 +
hw/core/Makefile.objs | 1 +
tests/Makefile.include | 1 +
6 files changed, 64 insertions(+), 20 deletions(-)
create mode 100644 hw/core/compat-props.c
diff --git a/include/hw/boards.h b/include/hw/boards.h
index f743d9d4a4..77d1fc1bef 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -9,6 +9,8 @@
#include "qom/object.h"
#include "qom/cpu.h"
+#define TYPE_COMPAT_PROPS "compat-props"
+
/**
* memory_region_allocate_system_memory - Allocate a board's main memory
* @mr: the #MemoryRegion to be initialized
diff --git a/hw/core/compat-props.c b/hw/core/compat-props.c
new file mode 100644
index 0000000000..538378e71f
--- /dev/null
+++ b/hw/core/compat-props.c
@@ -0,0 +1,55 @@
+/*
+ * QEMU Machine compat properties
+ *
+ * Copyright (C) 2018 Red Hat Inc
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "hw/boards.h"
+#include "qapi/error.h"
+
+typedef struct CompatProps CompatProps;
+
+typedef struct CompatPropsClass {
+ InterfaceClass parent_class;
+} CompatPropsClass;
+
+static const GPtrArray *ac_compat_props;
+static const GPtrArray *mc_compat_props;
+
+void accel_register_compat_props(const GPtrArray *props)
+{
+ ac_compat_props = props;
+}
+
+void machine_register_compat_props(const GPtrArray *props)
+{
+ mc_compat_props = props;
+}
+
+static void compat_props_post_init(Object *obj)
+{
+ if (ac_compat_props) {
+ object_apply_global_props(obj, ac_compat_props, &error_abort);
+ }
+ if (mc_compat_props) {
+ object_apply_global_props(obj, mc_compat_props, &error_abort);
+ }
+}
+
+static void compat_props_register_types(void)
+{
+ static const TypeInfo cp_interface_info = {
+ .name = TYPE_COMPAT_PROPS,
+ .parent = TYPE_INTERFACE,
+ .class_size = sizeof(CompatPropsClass),
+ .instance_post_init = compat_props_post_init,
+ };
+
+ type_register_static(&cp_interface_info);
+}
+
+type_init(compat_props_register_types)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 3b31b2c025..b0ee05f837 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -970,28 +970,8 @@ static void device_initfn(Object *obj)
QLIST_INIT(&dev->gpios);
}
-static const GPtrArray *ac_compat_props;
-static const GPtrArray *mc_compat_props;
-
-void accel_register_compat_props(const GPtrArray *props)
-{
- ac_compat_props = props;
-}
-
-void machine_register_compat_props(const GPtrArray *props)
-{
- mc_compat_props = props;
-}
-
static void device_post_init(Object *obj)
{
- if (ac_compat_props) {
- object_apply_global_props(obj, ac_compat_props, &error_abort);
- }
- if (mc_compat_props) {
- object_apply_global_props(obj, mc_compat_props, &error_abort);
- }
-
qdev_prop_set_globals(DEVICE(obj));
}
@@ -1124,6 +1104,10 @@ static const TypeInfo device_type_info = {
.class_init = device_class_init,
.abstract = true,
.class_size = sizeof(DeviceClass),
+ .interfaces = (InterfaceInfo[]) {
+ { TYPE_COMPAT_PROPS },
+ { }
+ }
};
static void qdev_register_types(void)
diff --git a/MAINTAINERS b/MAINTAINERS
index 9410bbb7cf..adff09627f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1145,6 +1145,7 @@ Machine core
M: Eduardo Habkost <address@hidden>
M: Marcel Apfelbaum <address@hidden>
S: Supported
+F: hw/core/compat-props.c
F: hw/core/machine.c
F: hw/core/null-machine.c
F: include/hw/boards.h
diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
index a799c83815..f15b3c970a 100644
--- a/hw/core/Makefile.objs
+++ b/hw/core/Makefile.objs
@@ -1,5 +1,6 @@
# core qdev-related obj files, also used by *-user:
common-obj-y += qdev.o qdev-properties.o
+common-obj-y += compat-props.o
common-obj-y += bus.o reset.o
common-obj-$(CONFIG_SOFTMMU) += qdev-fw.o
common-obj-$(CONFIG_SOFTMMU) += fw-path-provider.o
diff --git a/tests/Makefile.include b/tests/Makefile.include
index fb0b449c02..fc74358c0a 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -567,6 +567,7 @@ tests/test-qdev-global-props$(EXESUF):
tests/test-qdev-global-props.o \
hw/core/irq.o \
hw/core/fw-path-provider.o \
hw/core/reset.o \
+ hw/core/compat-props.o \
$(test-qapi-obj-y)
tests/test-vmstate$(EXESUF): tests/test-vmstate.o \
migration/vmstate.o migration/vmstate-types.o migration/qemu-file.o \
--
2.20.0.rc1
- Re: [Qemu-devel] [PATCH for-3.2 v4 16/28] hw: apply machine compat properties without touching globals, (continued)
- [Qemu-devel] [PATCH for-3.2 v4 18/28] qdev: all globals are now user-provided, Marc-André Lureau, 2018/11/27
- [Qemu-devel] [PATCH for-3.2 v4 19/28] qdev-props: convert global_props to GPtrArray, Marc-André Lureau, 2018/11/27
- [Qemu-devel] [PATCH for-3.2 v4 20/28] qdev-props: remove errp from GlobalProperty, Marc-André Lureau, 2018/11/27
- [Qemu-devel] [PATCH for-3.2 v4 21/28] qdev-props: call object_apply_global_props(), Marc-André Lureau, 2018/11/27
- [Qemu-devel] [PATCH for-3.2 v4 22/28] qom: teach interfaces to implement post-init, Marc-André Lureau, 2018/11/27
- [Qemu-devel] [PATCH for-3.2 v4 23/28] qom: add object_class_get_class_data(), Marc-André Lureau, 2018/11/27
- [Qemu-devel] [PATCH for-3.2 v4 25/28] machine: add compat-props interface,
Marc-André Lureau <=
- Re: [Qemu-devel] [PATCH for-3.2 v4 25/28] machine: add compat-props interface, Igor Mammedov, 2018/11/30
- [Qemu-devel] [PATCH for-3.2 v4 24/28] arm: replace instance_post_init(), Marc-André Lureau, 2018/11/27
- [Qemu-devel] [PATCH for-3.2 v4 26/28] hw/i386: add pc-i440fx-3.2 & pc-q35-3.2, Marc-André Lureau, 2018/11/27
- [Qemu-devel] [PATCH for-3.2 v4 27/28] hw/arm/virt: add virt-3.2 machine type, Marc-André Lureau, 2018/11/27
- [Qemu-devel] [PATCH for-3.2 v4 28/28] hostmem: use object id for memory region name with >= 3.1, Marc-André Lureau, 2018/11/27