qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH RFC 2/7] qom: Register QOM infrastructure early


From: Andreas Färber
Subject: [Qemu-devel] [PATCH RFC 2/7] qom: Register QOM infrastructure early
Date: Sun, 29 Jan 2012 14:25:26 +0100

QOM TYPE_INTERFACE was registered with device_init(), whose
constructors are executed rather late in vl.c's main().

Introduce a new module init type and register it very early so that QOM
can safely be used for machines and CPUs.

Note that *_init() defines an attributed function, so no semicolon is
needed after the brace.

Signed-off-by: Andreas Färber <address@hidden>
Cc: Anthony Liguori <address@hidden>
---
 module.h     |    2 ++
 qom/object.c |    2 +-
 vl.c         |    2 ++
 3 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/module.h b/module.h
index ef66730..567ff3a 100644
--- a/module.h
+++ b/module.h
@@ -21,6 +21,7 @@ static void __attribute__((constructor)) do_qemu_init_ ## 
function(void) {  \
 }
 
 typedef enum {
+    MODULE_INIT_EARLY,
     MODULE_INIT_BLOCK,
     MODULE_INIT_DEVICE,
     MODULE_INIT_MACHINE,
@@ -28,6 +29,7 @@ typedef enum {
     MODULE_INIT_MAX
 } module_init_type;
 
+#define early_init(function) module_init(function, MODULE_INIT_EARLY)
 #define block_init(function) module_init(function, MODULE_INIT_BLOCK)
 #define device_init(function) module_init(function, MODULE_INIT_DEVICE)
 #define machine_init(function) module_init(function, MODULE_INIT_MACHINE)
diff --git a/qom/object.c b/qom/object.c
index 1821959..3c79e1d 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -388,7 +388,7 @@ static void register_interface(void)
     type_register_static(&interface_info);
 }
 
-device_init(register_interface);
+early_init(register_interface)
 
 Object *object_dynamic_cast_assert(Object *obj, const char *typename)
 {
diff --git a/vl.c b/vl.c
index d88a18c..379ca4e 100644
--- a/vl.c
+++ b/vl.c
@@ -2208,6 +2208,8 @@ int main(int argc, char **argv, char **envp)
 #endif
     }
 
+    module_call_init(MODULE_INIT_EARLY);
+
     runstate_init();
 
     init_clocks();
-- 
1.7.7




reply via email to

[Prev in Thread] Current Thread [Next in Thread]