From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:40550) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RrUnQ-0006Fc-7m for qemu-devel@nongnu.org; Sun, 29 Jan 2012 08:27:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RrUnN-0000V6-VN for qemu-devel@nongnu.org; Sun, 29 Jan 2012 08:27:52 -0500 Received: from cantor2.suse.de ([195.135.220.15]:50576 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RrUnN-0000Ub-JX for qemu-devel@nongnu.org; Sun, 29 Jan 2012 08:27:49 -0500 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Sun, 29 Jan 2012 14:25:26 +0100 Message-Id: <1327843531-32403-3-git-send-email-afaerber@suse.de> In-Reply-To: <1327843531-32403-1-git-send-email-afaerber@suse.de> References: <1327843531-32403-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH RFC 2/7] qom: Register QOM infrastructure early List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Anthony Liguori , =?UTF-8?q?Andreas=20F=C3=A4rber?= 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=C3=A4rber Cc: Anthony Liguori --- 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) { \ } =20 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; =20 +#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); } =20 -device_init(register_interface); +early_init(register_interface) =20 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 } =20 + module_call_init(MODULE_INIT_EARLY); + runstate_init(); =20 init_clocks(); --=20 1.7.7