qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init()
@ 2015-09-19 15:36 Andreas Färber
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 1/6] Use type_init() for all machine QOM types Andreas Färber
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: Andreas Färber @ 2015-09-19 15:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Marcel Apfelbaum, Michael S. Tsirkin, Andreas Färber,
	Eduardo Habkost

Hello,

Based on my pending qom-next pull, this series continues Eduardo's machine cleanups.
Having eliminated QEMUMachine and qemu_machine_register(), this series eliminates
machine_init() and MODULE_INIT_MACHINE.

As a side effect a few non-machine callers had to be updated, mostly for QemuOpts.

It goes on to update Exynos4 machines for QOM, demonstrating that DEFINE_MACHINE()
can be inferior to inlining the QOM boilerplate code in case of multiple machines.

Independently, I noticed a nit in the PC machine macro I'm touching that could
probably even be cherry-picked.

Regards,
Andreas

Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Marcel Apfelbaum <marcel@redhat.com>
Cc: Michael S. Tsirkin <mst@redhat.com>

Andreas Färber (6):
  Use type_init() for all machine QOM types
  hw/s390x/css: Use type_init() instead of machine_init()
  Introduce config_init() for QemuOpts
  Drop machine_init() and MODULE_INIT_MACHINE
  exynos4: Further QOM'ify machines
  pc: Use type_register_static() for machine types

 fsdev/qemu-fsdev-opts.c |  2 +-
 hw/acpi/core.c          |  2 +-
 hw/arm/exynos4_boards.c | 73 ++++++++++++++++++++++++++-----------------------
 hw/arm/gumstix.c        |  2 +-
 hw/arm/highbank.c       |  2 +-
 hw/arm/nseries.c        |  2 +-
 hw/arm/omap_sx1.c       |  2 +-
 hw/arm/realview.c       |  2 +-
 hw/arm/spitz.c          | 15 ++++------
 hw/arm/stellaris.c      | 11 ++------
 hw/arm/versatilepb.c    | 11 ++------
 hw/arm/vexpress.c       |  2 +-
 hw/arm/virt.c           |  2 +-
 hw/lm32/lm32_boards.c   |  2 +-
 hw/mips/mips_jazz.c     |  2 +-
 hw/ppc/ppc405_boards.c  |  2 +-
 hw/s390x/css.c          |  2 +-
 hw/smbios/smbios.c      |  2 +-
 hw/sparc/sun4m.c        | 14 ++++------
 hw/sparc64/sun4u.c      | 12 +++-----
 hw/xtensa/xtfpga.c      |  2 +-
 include/hw/boards.h     |  2 +-
 include/hw/i386/pc.h    |  4 +--
 include/qemu/module.h   |  4 +--
 ui/spice-core.c         |  2 +-
 ui/vnc.c                |  2 +-
 vl.c                    |  3 +-
 27 files changed, 83 insertions(+), 100 deletions(-)

-- 
2.1.4

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

* [Qemu-devel] [PATCH 1/6] Use type_init() for all machine QOM types
  2015-09-19 15:36 [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Andreas Färber
@ 2015-09-19 15:36 ` Andreas Färber
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 2/6] hw/s390x/css: Use type_init() instead of machine_init() Andreas Färber
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Andreas Färber @ 2015-09-19 15:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Evgeny Voevodin, Rob Herring, Igor Mitsyanko,
	Leon Alrae, Michael S. Tsirkin, Mark Cave-Ayland, Alexander Graf,
	Blue Swirl, Max Filippov, Michael Walle, Hervé Poussineau,
	Dmitry Solodkiy, open list:405, Maksim Kozlov,
	Andreas Färber, Aurelien Jarno

This prepares for dropping machine_init(), now that QEMUMachine is gone.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 hw/arm/exynos4_boards.c |  2 +-
 hw/arm/gumstix.c        |  2 +-
 hw/arm/highbank.c       |  2 +-
 hw/arm/nseries.c        |  2 +-
 hw/arm/omap_sx1.c       |  2 +-
 hw/arm/realview.c       |  2 +-
 hw/arm/spitz.c          | 15 +++++----------
 hw/arm/stellaris.c      | 11 +++--------
 hw/arm/versatilepb.c    | 11 +++--------
 hw/arm/vexpress.c       |  2 +-
 hw/arm/virt.c           |  2 +-
 hw/lm32/lm32_boards.c   |  2 +-
 hw/mips/mips_jazz.c     |  2 +-
 hw/ppc/ppc405_boards.c  |  2 +-
 hw/sparc/sun4m.c        | 14 +++++---------
 hw/sparc64/sun4u.c      | 12 ++++--------
 hw/xtensa/xtfpga.c      |  2 +-
 include/hw/boards.h     |  2 +-
 include/hw/i386/pc.h    |  2 +-
 19 files changed, 34 insertions(+), 57 deletions(-)

diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c
index da82b27..336c8b2 100644
--- a/hw/arm/exynos4_boards.c
+++ b/hw/arm/exynos4_boards.c
@@ -180,4 +180,4 @@ static void exynos4_machines_init(void)
     type_register_static(&smdkc210_type);
 }
 
-machine_init(exynos4_machines_init)
+type_init(exynos4_machines_init)
diff --git a/hw/arm/gumstix.c b/hw/arm/gumstix.c
index 32ad041..9b5938b 100644
--- a/hw/arm/gumstix.c
+++ b/hw/arm/gumstix.c
@@ -155,4 +155,4 @@ static void gumstix_machine_init(void)
     type_register_static(&verdex_type);
 }
 
-machine_init(gumstix_machine_init)
+type_init(gumstix_machine_init)
diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c
index be04b27..98825e7 100644
--- a/hw/arm/highbank.c
+++ b/hw/arm/highbank.c
@@ -429,4 +429,4 @@ static void calxeda_machines_init(void)
     type_register_static(&midway_type);
 }
 
-machine_init(calxeda_machines_init)
+type_init(calxeda_machines_init)
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
index 6a6b3e6..2bfdc20 100644
--- a/hw/arm/nseries.c
+++ b/hw/arm/nseries.c
@@ -1449,4 +1449,4 @@ static void nseries_machine_init(void)
     type_register_static(&n810_type);
 }
 
-machine_init(nseries_machine_init)
+type_init(nseries_machine_init)
diff --git a/hw/arm/omap_sx1.c b/hw/arm/omap_sx1.c
index 8eaf8f3..98c4066 100644
--- a/hw/arm/omap_sx1.c
+++ b/hw/arm/omap_sx1.c
@@ -251,4 +251,4 @@ static void sx1_machine_init(void)
     type_register_static(&sx1_machine_v2_type);
 }
 
-machine_init(sx1_machine_init)
+type_init(sx1_machine_init)
diff --git a/hw/arm/realview.c b/hw/arm/realview.c
index e14828d..c14aab2 100644
--- a/hw/arm/realview.c
+++ b/hw/arm/realview.c
@@ -468,4 +468,4 @@ static void realview_machine_init(void)
     type_register_static(&realview_pbx_a9_type);
 }
 
-machine_init(realview_machine_init)
+type_init(realview_machine_init)
diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c
index 2af03be..8aa0172 100644
--- a/hw/arm/spitz.c
+++ b/hw/arm/spitz.c
@@ -1028,16 +1028,6 @@ static const TypeInfo terrierpda_type = {
     .class_init = terrierpda_class_init,
 };
 
-static void spitz_machine_init(void)
-{
-    type_register_static(&akitapda_type);
-    type_register_static(&spitzpda_type);
-    type_register_static(&borzoipda_type);
-    type_register_static(&terrierpda_type);
-}
-
-machine_init(spitz_machine_init)
-
 static bool is_version_0(void *opaque, int version_id)
 {
     return version_id == 0;
@@ -1167,6 +1157,11 @@ static const TypeInfo spitz_lcdtg_info = {
 
 static void spitz_register_types(void)
 {
+    type_register_static(&akitapda_type);
+    type_register_static(&spitzpda_type);
+    type_register_static(&borzoipda_type);
+    type_register_static(&terrierpda_type);
+
     type_register_static(&corgi_ssp_info);
     type_register_static(&spitz_lcdtg_info);
     type_register_static(&spitz_keyboard_info);
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
index 3d6486f..3b653c5 100644
--- a/hw/arm/stellaris.c
+++ b/hw/arm/stellaris.c
@@ -1394,14 +1394,6 @@ static const TypeInfo lm3s6965evb_type = {
     .class_init = lm3s6965evb_class_init,
 };
 
-static void stellaris_machine_init(void)
-{
-    type_register_static(&lm3s811evb_type);
-    type_register_static(&lm3s6965evb_type);
-}
-
-machine_init(stellaris_machine_init)
-
 static void stellaris_i2c_class_init(ObjectClass *klass, void *data)
 {
     SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass);
@@ -1446,6 +1438,9 @@ static const TypeInfo stellaris_adc_info = {
 
 static void stellaris_register_types(void)
 {
+    type_register_static(&lm3s811evb_type);
+    type_register_static(&lm3s6965evb_type);
+
     type_register_static(&stellaris_i2c_info);
     type_register_static(&stellaris_gptm_info);
     type_register_static(&stellaris_adc_info);
diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c
index 912c290..8f48a3c 100644
--- a/hw/arm/versatilepb.c
+++ b/hw/arm/versatilepb.c
@@ -421,14 +421,6 @@ static const TypeInfo versatileab_type = {
     .class_init = versatileab_class_init,
 };
 
-static void versatile_machine_init(void)
-{
-    type_register_static(&versatilepb_type);
-    type_register_static(&versatileab_type);
-}
-
-machine_init(versatile_machine_init)
-
 static void vpb_sic_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
@@ -447,6 +439,9 @@ static const TypeInfo vpb_sic_info = {
 
 static void versatilepb_register_types(void)
 {
+    type_register_static(&versatilepb_type);
+    type_register_static(&versatileab_type);
+
     type_register_static(&vpb_sic_info);
 }
 
diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c
index 058abbd..e888d46 100644
--- a/hw/arm/vexpress.c
+++ b/hw/arm/vexpress.c
@@ -802,4 +802,4 @@ static void vexpress_machine_init(void)
     type_register_static(&vexpress_a15_info);
 }
 
-machine_init(vexpress_machine_init);
+type_init(vexpress_machine_init)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 6bf0d6d..e7cb46a 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1095,4 +1095,4 @@ static void machvirt_machine_init(void)
     type_register_static(&machvirt_info);
 }
 
-machine_init(machvirt_machine_init);
+type_init(machvirt_machine_init);
diff --git a/hw/lm32/lm32_boards.c b/hw/lm32/lm32_boards.c
index 8e17a82..7093f3e 100644
--- a/hw/lm32/lm32_boards.c
+++ b/hw/lm32/lm32_boards.c
@@ -328,4 +328,4 @@ static void lm32_machine_init(void)
     type_register_static(&lm32_uclinux_type);
 }
 
-machine_init(lm32_machine_init)
+type_init(lm32_machine_init)
diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c
index 1ab885b..8d7e8ba 100644
--- a/hw/mips/mips_jazz.c
+++ b/hw/mips/mips_jazz.c
@@ -385,4 +385,4 @@ static void mips_jazz_machine_init(void)
     type_register_static(&mips_pica61_type);
 }
 
-machine_init(mips_jazz_machine_init)
+type_init(mips_jazz_machine_init)
diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c
index ec87587..7366b16 100644
--- a/hw/ppc/ppc405_boards.c
+++ b/hw/ppc/ppc405_boards.c
@@ -693,4 +693,4 @@ static void ppc405_machine_init(void)
     type_register_static(&taihu_type);
 }
 
-machine_init(ppc405_machine_init)
+type_init(ppc405_machine_init)
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index 9f1917f..8fea7b7 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -1570,14 +1570,6 @@ static const TypeInfo sbook_type = {
 
 static void sun4m_register_types(void)
 {
-    type_register_static(&idreg_info);
-    type_register_static(&afx_info);
-    type_register_static(&prom_info);
-    type_register_static(&ram_info);
-}
-
-static void sun4m_machine_init(void)
-{
     type_register_static(&ss5_type);
     type_register_static(&ss10_type);
     type_register_static(&ss600mp_type);
@@ -1587,7 +1579,11 @@ static void sun4m_machine_init(void)
     type_register_static(&ss4_type);
     type_register_static(&scls_type);
     type_register_static(&sbook_type);
+
+    type_register_static(&idreg_info);
+    type_register_static(&afx_info);
+    type_register_static(&prom_info);
+    type_register_static(&ram_info);
 }
 
 type_init(sun4m_register_types)
-machine_init(sun4m_machine_init)
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index a6b5957..46c8714 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -1016,17 +1016,13 @@ static const TypeInfo niagara_type = {
 
 static void sun4u_register_types(void)
 {
-    type_register_static(&ebus_info);
-    type_register_static(&prom_info);
-    type_register_static(&ram_info);
-}
-
-static void sun4u_machine_init(void)
-{
     type_register_static(&sun4u_type);
     type_register_static(&sun4v_type);
     type_register_static(&niagara_type);
+
+    type_register_static(&ebus_info);
+    type_register_static(&prom_info);
+    type_register_static(&ram_info);
 }
 
 type_init(sun4u_register_types)
-machine_init(sun4u_machine_init)
diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
index 7aca1cf..3cd76aa 100644
--- a/hw/xtensa/xtfpga.c
+++ b/hw/xtensa/xtfpga.c
@@ -496,4 +496,4 @@ static void xtensa_lx_machines_init(void)
     type_register_static(&xtensa_kc705_type);
 }
 
-machine_init(xtensa_lx_machines_init)
+type_init(xtensa_lx_machines_init)
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 3e9a92c..f5f4a17 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -147,6 +147,6 @@ struct MachineState {
     { \
         type_register_static(&machine_initfn##_typeinfo); \
     } \
-    machine_init(machine_initfn##_register_types)
+    type_init(machine_initfn##_register_types)
 
 #endif
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 3e002c9..b828bb9 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -717,7 +717,7 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
     { \
         type_register(&pc_machine_type_##suffix); \
     } \
-    machine_init(pc_machine_init_##suffix)
+    type_init(pc_machine_init_##suffix)
 
 #define SET_MACHINE_COMPAT(m, COMPAT) do { \
     static GlobalProperty props[] = { \
-- 
2.1.4

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

* [Qemu-devel] [PATCH 2/6] hw/s390x/css: Use type_init() instead of machine_init()
  2015-09-19 15:36 [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Andreas Färber
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 1/6] Use type_init() for all machine QOM types Andreas Färber
@ 2015-09-19 15:36 ` Andreas Färber
  2015-09-21  8:04   ` Christian Borntraeger
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 3/6] Introduce config_init() for QemuOpts Andreas Färber
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 9+ messages in thread
From: Andreas Färber @ 2015-09-19 15:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Cornelia Huck, Christian Borntraeger, Richard Henderson,
	Andreas Färber, Alexander Graf

Here, machine_init() is being misused to initialize global variables.
Being all local, it's safe to use the slightly earlier type_init().

This prepares for dropping machine_init().

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 hw/s390x/css.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index c033612..d164fa8 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -1509,7 +1509,7 @@ static void css_init(void)
     channel_subsys->chnmon_active = false;
     QTAILQ_INIT(&channel_subsys->io_adapters);
 }
-machine_init(css_init);
+type_init(css_init)
 
 void css_reset_sch(SubchDev *sch)
 {
-- 
2.1.4

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

* [Qemu-devel] [PATCH 3/6] Introduce config_init() for QemuOpts
  2015-09-19 15:36 [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Andreas Färber
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 1/6] Use type_init() for all machine QOM types Andreas Färber
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 2/6] hw/s390x/css: Use type_init() instead of machine_init() Andreas Färber
@ 2015-09-19 15:36 ` Andreas Färber
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 4/6] Drop machine_init() and MODULE_INIT_MACHINE Andreas Färber
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Andreas Färber @ 2015-09-19 15:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Gerd Hoffmann, Paolo Bonzini, Igor Mammedov,
	Andreas Färber, Aneesh Kumar K.V

This untangles QemuOpts from machine_init(), which is to be dropped.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 fsdev/qemu-fsdev-opts.c | 2 +-
 hw/acpi/core.c          | 2 +-
 hw/smbios/smbios.c      | 2 +-
 include/qemu/module.h   | 2 ++
 ui/spice-core.c         | 2 +-
 ui/vnc.c                | 2 +-
 vl.c                    | 2 ++
 7 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/fsdev/qemu-fsdev-opts.c b/fsdev/qemu-fsdev-opts.c
index 6311c7a..d53ef97 100644
--- a/fsdev/qemu-fsdev-opts.c
+++ b/fsdev/qemu-fsdev-opts.c
@@ -82,4 +82,4 @@ static void fsdev_register_config(void)
     qemu_add_opts(&qemu_fsdev_opts);
     qemu_add_opts(&qemu_virtfs_opts);
 }
-machine_init(fsdev_register_config);
+config_init(fsdev_register_config)
diff --git a/hw/acpi/core.c b/hw/acpi/core.c
index fe6215a..aef9c7f 100644
--- a/hw/acpi/core.c
+++ b/hw/acpi/core.c
@@ -67,7 +67,7 @@ static void acpi_register_config(void)
     qemu_add_opts(&qemu_acpi_opts);
 }
 
-machine_init(acpi_register_config);
+config_init(acpi_register_config)
 
 static int acpi_checksum(const uint8_t *data, int len)
 {
diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c
index b81a1d3..ea64171 100644
--- a/hw/smbios/smbios.c
+++ b/hw/smbios/smbios.c
@@ -319,7 +319,7 @@ static void smbios_register_config(void)
     qemu_add_opts(&qemu_smbios_opts);
 }
 
-machine_init(smbios_register_config);
+config_init(smbios_register_config)
 
 static void smbios_validate_table(void)
 {
diff --git a/include/qemu/module.h b/include/qemu/module.h
index 72d9498..d03f800 100644
--- a/include/qemu/module.h
+++ b/include/qemu/module.h
@@ -42,6 +42,7 @@ static void __attribute__((constructor)) do_qemu_init_ ## function(void)    \
 
 typedef enum {
     MODULE_INIT_BLOCK,
+    MODULE_INIT_CONFIG,
     MODULE_INIT_MACHINE,
     MODULE_INIT_QAPI,
     MODULE_INIT_QOM,
@@ -49,6 +50,7 @@ typedef enum {
 } module_init_type;
 
 #define block_init(function) module_init(function, MODULE_INIT_BLOCK)
+#define config_init(function) module_init(function, MODULE_INIT_CONFIG)
 #define machine_init(function) module_init(function, MODULE_INIT_MACHINE)
 #define qapi_init(function) module_init(function, MODULE_INIT_QAPI)
 #define type_init(function) module_init(function, MODULE_INIT_QOM)
diff --git a/ui/spice-core.c b/ui/spice-core.c
index bf4fd07..db5ff33 100644
--- a/ui/spice-core.c
+++ b/ui/spice-core.c
@@ -927,4 +927,4 @@ static void spice_register_config(void)
 {
     qemu_add_opts(&qemu_spice_opts);
 }
-machine_init(spice_register_config);
+config_init(spice_register_config)
diff --git a/ui/vnc.c b/ui/vnc.c
index d73966a..8c31fe5 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -3883,4 +3883,4 @@ static void vnc_register_config(void)
 {
     qemu_add_opts(&qemu_vnc_opts);
 }
-machine_init(vnc_register_config);
+config_init(vnc_register_config)
diff --git a/vl.c b/vl.c
index e211f6a..dcf0800 100644
--- a/vl.c
+++ b/vl.c
@@ -2996,6 +2996,8 @@ int main(int argc, char **argv, char **envp)
     qemu_add_opts(&qemu_semihosting_config_opts);
     qemu_add_opts(&qemu_fw_cfg_opts);
 
+    module_call_init(MODULE_INIT_CONFIG);
+
     runstate_init();
 
     if (qcrypto_init(&err) < 0) {
-- 
2.1.4

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

* [Qemu-devel] [PATCH 4/6] Drop machine_init() and MODULE_INIT_MACHINE
  2015-09-19 15:36 [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Andreas Färber
                   ` (2 preceding siblings ...)
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 3/6] Introduce config_init() for QemuOpts Andreas Färber
@ 2015-09-19 15:36 ` Andreas Färber
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 5/6] exynos4: Further QOM'ify machines Andreas Färber
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Andreas Färber @ 2015-09-19 15:36 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Andreas Färber

MODULE_INIT_MACHINE was used to register QEMUMachines. Now that those
have been converted to QOM we no longer need this separate registration.

For registering QemuOpts config_init() has been introduced.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 include/qemu/module.h | 2 --
 vl.c                  | 1 -
 2 files changed, 3 deletions(-)

diff --git a/include/qemu/module.h b/include/qemu/module.h
index d03f800..127d088 100644
--- a/include/qemu/module.h
+++ b/include/qemu/module.h
@@ -43,7 +43,6 @@ static void __attribute__((constructor)) do_qemu_init_ ## function(void)    \
 typedef enum {
     MODULE_INIT_BLOCK,
     MODULE_INIT_CONFIG,
-    MODULE_INIT_MACHINE,
     MODULE_INIT_QAPI,
     MODULE_INIT_QOM,
     MODULE_INIT_MAX
@@ -51,7 +50,6 @@ typedef enum {
 
 #define block_init(function) module_init(function, MODULE_INIT_BLOCK)
 #define config_init(function) module_init(function, MODULE_INIT_CONFIG)
-#define machine_init(function) module_init(function, MODULE_INIT_MACHINE)
 #define qapi_init(function) module_init(function, MODULE_INIT_QAPI)
 #define type_init(function) module_init(function, MODULE_INIT_QOM)
 
diff --git a/vl.c b/vl.c
index dcf0800..d55c3d6 100644
--- a/vl.c
+++ b/vl.c
@@ -3010,7 +3010,6 @@ int main(int argc, char **argv, char **envp)
     QLIST_INIT (&vm_change_state_head);
     os_setup_early_signal_handling();
 
-    module_call_init(MODULE_INIT_MACHINE);
     machine_class = find_default_machine();
     cpu_model = NULL;
     snapshot = 0;
-- 
2.1.4

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

* [Qemu-devel] [PATCH 5/6] exynos4: Further QOM'ify machines
  2015-09-19 15:36 [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Andreas Färber
                   ` (3 preceding siblings ...)
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 4/6] Drop machine_init() and MODULE_INIT_MACHINE Andreas Färber
@ 2015-09-19 15:36 ` Andreas Färber
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 6/6] pc: Use type_register_static() for machine types Andreas Färber
  2015-09-21 15:53 ` [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Eduardo Habkost
  6 siblings, 0 replies; 9+ messages in thread
From: Andreas Färber @ 2015-09-19 15:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Evgeny Voevodin, Igor Mitsyanko, Dmitry Solodkiy,
	Maksim Kozlov, Andreas Färber

Drop board enumeration in favor of an abstract type, and move static
tables into class initialization.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 hw/arm/exynos4_boards.c | 71 ++++++++++++++++++++++++++-----------------------
 1 file changed, 38 insertions(+), 33 deletions(-)

diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c
index 336c8b2..ec7f235 100644
--- a/hw/arm/exynos4_boards.c
+++ b/hw/arm/exynos4_boards.c
@@ -46,26 +46,17 @@
 
 #define SMDK_LAN9118_BASE_ADDR      0x05000000
 
-typedef enum Exynos4BoardType {
-    EXYNOS4_BOARD_NURI,
-    EXYNOS4_BOARD_SMDKC210,
-    EXYNOS4_NUM_OF_BOARDS
-} Exynos4BoardType;
-
-static int exynos4_board_id[EXYNOS4_NUM_OF_BOARDS] = {
-    [EXYNOS4_BOARD_NURI]     = 0xD33,
-    [EXYNOS4_BOARD_SMDKC210] = 0xB16,
-};
+typedef struct Exynos4MachineClass {
+    MachineClass parent_class;
 
-static int exynos4_board_smp_bootreg_addr[EXYNOS4_NUM_OF_BOARDS] = {
-    [EXYNOS4_BOARD_NURI]     = EXYNOS4210_SECOND_CPU_BOOTREG,
-    [EXYNOS4_BOARD_SMDKC210] = EXYNOS4210_SECOND_CPU_BOOTREG,
-};
+    int id;
+    int smp_bootreg_addr;
+    unsigned long ram_size;
+} Exynos4MachineClass;
 
-static unsigned long exynos4_board_ram_size[EXYNOS4_NUM_OF_BOARDS] = {
-    [EXYNOS4_BOARD_NURI]     = 0x40000000,
-    [EXYNOS4_BOARD_SMDKC210] = 0x40000000,
-};
+#define TYPE_EXYNOS4_MACHINE MACHINE_TYPE_NAME("exynos4")
+#define EXYNOS4_MACHINE_CLASS(cls) \
+    OBJECT_CLASS_CHECK(Exynos4MachineClass, (cls), TYPE_EXYNOS4_MACHINE)
 
 static struct arm_boot_info exynos4_board_binfo = {
     .loader_start     = EXYNOS4210_BASE_BOOT_ADDR,
@@ -92,10 +83,10 @@ static void lan9215_init(uint32_t base, qemu_irq irq)
     }
 }
 
-static Exynos4210State *exynos4_boards_init_common(MachineState *machine,
-                                                   Exynos4BoardType board_type)
+static Exynos4210State *exynos4_boards_init_common(MachineState *machine)
 {
     MachineClass *mc = MACHINE_GET_CLASS(machine);
+    Exynos4MachineClass *emc = EXYNOS4_MACHINE_CLASS(mc);
 
     if (smp_cpus != EXYNOS4210_NCPUS && !qtest_enabled()) {
         fprintf(stderr, "%s board supports only %d CPU cores. Ignoring smp_cpus"
@@ -103,10 +94,9 @@ static Exynos4210State *exynos4_boards_init_common(MachineState *machine,
                 mc->name, EXYNOS4210_NCPUS);
     }
 
-    exynos4_board_binfo.ram_size = exynos4_board_ram_size[board_type];
-    exynos4_board_binfo.board_id = exynos4_board_id[board_type];
-    exynos4_board_binfo.smp_bootreg_addr =
-            exynos4_board_smp_bootreg_addr[board_type];
+    exynos4_board_binfo.ram_size = emc->ram_size;
+    exynos4_board_binfo.board_id = emc->id;
+    exynos4_board_binfo.smp_bootreg_addr = emc->smp_bootreg_addr;
     exynos4_board_binfo.kernel_filename = machine->kernel_filename;
     exynos4_board_binfo.initrd_filename = machine->initrd_filename;
     exynos4_board_binfo.kernel_cmdline = machine->kernel_cmdline;
@@ -117,27 +107,24 @@ static Exynos4210State *exynos4_boards_init_common(MachineState *machine,
             " kernel_filename: %s\n"
             " kernel_cmdline: %s\n"
             " initrd_filename: %s\n",
-            exynos4_board_ram_size[board_type] / 1048576,
-            exynos4_board_ram_size[board_type],
+            emc->ram_size / 1048576, emc->ram_size,
             machine->kernel_filename,
             machine->kernel_cmdline,
             machine->initrd_filename);
 
-    return exynos4210_init(get_system_memory(),
-            exynos4_board_ram_size[board_type]);
+    return exynos4210_init(get_system_memory(), emc->ram_size);
 }
 
 static void nuri_init(MachineState *machine)
 {
-    exynos4_boards_init_common(machine, EXYNOS4_BOARD_NURI);
+    exynos4_boards_init_common(machine);
 
     arm_load_kernel(ARM_CPU(first_cpu), &exynos4_board_binfo);
 }
 
 static void smdkc210_init(MachineState *machine)
 {
-    Exynos4210State *s = exynos4_boards_init_common(machine,
-                                                    EXYNOS4_BOARD_SMDKC210);
+    Exynos4210State *s = exynos4_boards_init_common(machine);
 
     lan9215_init(SMDK_LAN9118_BASE_ADDR,
             qemu_irq_invert(s->irq_table[exynos4210_get_irq(37, 1)]));
@@ -147,35 +134,53 @@ static void smdkc210_init(MachineState *machine)
 static void nuri_class_init(ObjectClass *oc, void *data)
 {
     MachineClass *mc = MACHINE_CLASS(oc);
+    Exynos4MachineClass *emc = EXYNOS4_MACHINE_CLASS(oc);
 
     mc->desc = "Samsung NURI board (Exynos4210)";
     mc->init = nuri_init;
     mc->max_cpus = EXYNOS4210_NCPUS;
+
+    emc->id = 0xD33;
+    emc->smp_bootreg_addr = EXYNOS4210_SECOND_CPU_BOOTREG;
+    emc->ram_size = 0x40000000;
 }
 
 static const TypeInfo nuri_type = {
     .name = MACHINE_TYPE_NAME("nuri"),
-    .parent = TYPE_MACHINE,
+    .parent = TYPE_EXYNOS4_MACHINE,
     .class_init = nuri_class_init,
 };
 
 static void smdkc210_class_init(ObjectClass *oc, void *data)
 {
     MachineClass *mc = MACHINE_CLASS(oc);
+    Exynos4MachineClass *emc = EXYNOS4_MACHINE_CLASS(oc);
 
     mc->desc = "Samsung SMDKC210 board (Exynos4210)";
     mc->init = smdkc210_init;
     mc->max_cpus = EXYNOS4210_NCPUS;
+
+    emc->id = 0xB16;
+    emc->smp_bootreg_addr = EXYNOS4210_SECOND_CPU_BOOTREG;
+    emc->ram_size = 0x40000000;
 }
 
 static const TypeInfo smdkc210_type = {
     .name = MACHINE_TYPE_NAME("smdkc210"),
-    .parent = TYPE_MACHINE,
+    .parent = TYPE_EXYNOS4_MACHINE,
     .class_init = smdkc210_class_init,
 };
 
+static const TypeInfo exynos4_machine_type = {
+    .name = TYPE_EXYNOS4_MACHINE,
+    .parent = TYPE_MACHINE,
+    .abstract = true,
+    .class_size = sizeof(Exynos4MachineClass),
+};
+
 static void exynos4_machines_init(void)
 {
+    type_register_static(&exynos4_machine_type);
     type_register_static(&nuri_type);
     type_register_static(&smdkc210_type);
 }
-- 
2.1.4

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

* [Qemu-devel] [PATCH 6/6] pc: Use type_register_static() for machine types
  2015-09-19 15:36 [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Andreas Färber
                   ` (4 preceding siblings ...)
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 5/6] exynos4: Further QOM'ify machines Andreas Färber
@ 2015-09-19 15:36 ` Andreas Färber
  2015-09-21 15:53 ` [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Eduardo Habkost
  6 siblings, 0 replies; 9+ messages in thread
From: Andreas Färber @ 2015-09-19 15:36 UTC (permalink / raw)
  To: qemu-devel; +Cc: Andreas Färber, Michael S. Tsirkin

The TypeInfos are being generated statically and the name is a constant.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 include/hw/i386/pc.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index b828bb9..0f60170 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -715,7 +715,7 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
     }; \
     static void pc_machine_init_##suffix(void) \
     { \
-        type_register(&pc_machine_type_##suffix); \
+        type_register_static(&pc_machine_type_##suffix); \
     } \
     type_init(pc_machine_init_##suffix)
 
-- 
2.1.4

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

* Re: [Qemu-devel] [PATCH 2/6] hw/s390x/css: Use type_init() instead of machine_init()
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 2/6] hw/s390x/css: Use type_init() instead of machine_init() Andreas Färber
@ 2015-09-21  8:04   ` Christian Borntraeger
  0 siblings, 0 replies; 9+ messages in thread
From: Christian Borntraeger @ 2015-09-21  8:04 UTC (permalink / raw)
  To: Andreas Färber, qemu-devel
  Cc: Cornelia Huck, Alexander Graf, Richard Henderson

Am 19.09.2015 um 17:36 schrieb Andreas Färber:
> Here, machine_init() is being misused to initialize global variables.
> Being all local, it's safe to use the slightly earlier type_init().
> 
> This prepares for dropping machine_init().
> 
> Signed-off-by: Andreas Färber <afaerber@suse.de>

Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>

I think this should go via your tree to coordinate with machine_init removal.



> ---
>  hw/s390x/css.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index c033612..d164fa8 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -1509,7 +1509,7 @@ static void css_init(void)
>      channel_subsys->chnmon_active = false;
>      QTAILQ_INIT(&channel_subsys->io_adapters);
>  }
> -machine_init(css_init);
> +type_init(css_init)
> 
>  void css_reset_sch(SubchDev *sch)
>  {
> 

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

* Re: [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init()
  2015-09-19 15:36 [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Andreas Färber
                   ` (5 preceding siblings ...)
  2015-09-19 15:36 ` [Qemu-devel] [PATCH 6/6] pc: Use type_register_static() for machine types Andreas Färber
@ 2015-09-21 15:53 ` Eduardo Habkost
  6 siblings, 0 replies; 9+ messages in thread
From: Eduardo Habkost @ 2015-09-21 15:53 UTC (permalink / raw)
  To: Andreas Färber; +Cc: Marcel Apfelbaum, qemu-devel, Michael S. Tsirkin

On Sat, Sep 19, 2015 at 05:36:37PM +0200, Andreas Färber wrote:
> Hello,
> 
> Based on my pending qom-next pull, this series continues Eduardo's machine cleanups.
> Having eliminated QEMUMachine and qemu_machine_register(), this series eliminates
> machine_init() and MODULE_INIT_MACHINE.
> 
> As a side effect a few non-machine callers had to be updated, mostly for QemuOpts.
> 
> It goes on to update Exynos4 machines for QOM, demonstrating that DEFINE_MACHINE()
> can be inferior to inlining the QOM boilerplate code in case of multiple machines.

Marcel once asked me if we could call DEFINE_MACHINE something like
DEFINE_SIMPLE_MACHINE, to clarify that it's supposed to be used only on
very simple cases that don't require anything except initializing some
MachineClass fields.

Initially, I assumed that almost every machine class would use
DEFINE_MACHINE, but then I noticed that it is not enough when one extra
inheritance level or a different class_size is involved. So I think
Marcel was right and we could rename DEFINE_MACHINE to
DEFINE_SIMPLE_MACHINE.

> 
> Independently, I noticed a nit in the PC machine macro I'm touching that could
> probably even be cherry-picked.

Thanks!

-- 
Eduardo

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

end of thread, other threads:[~2015-09-21 15:53 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-19 15:36 [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Andreas Färber
2015-09-19 15:36 ` [Qemu-devel] [PATCH 1/6] Use type_init() for all machine QOM types Andreas Färber
2015-09-19 15:36 ` [Qemu-devel] [PATCH 2/6] hw/s390x/css: Use type_init() instead of machine_init() Andreas Färber
2015-09-21  8:04   ` Christian Borntraeger
2015-09-19 15:36 ` [Qemu-devel] [PATCH 3/6] Introduce config_init() for QemuOpts Andreas Färber
2015-09-19 15:36 ` [Qemu-devel] [PATCH 4/6] Drop machine_init() and MODULE_INIT_MACHINE Andreas Färber
2015-09-19 15:36 ` [Qemu-devel] [PATCH 5/6] exynos4: Further QOM'ify machines Andreas Färber
2015-09-19 15:36 ` [Qemu-devel] [PATCH 6/6] pc: Use type_register_static() for machine types Andreas Färber
2015-09-21 15:53 ` [Qemu-devel] [PATCH 0/6] machine: Deprecate machine_init() Eduardo Habkost

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).