* [Qemu-devel] [PULL 01/21] qom: Do not reuse errp after a possible error
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 02/21] qom: Fix invalid error check in property_get_str() Andreas Färber
` (20 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Hu Tao, Markus Armbruster, qemu-stable, Anthony Liguori,
Andreas Färber
From: Markus Armbruster <armbru@redhat.com>
The argument for an Error **errp parameter must point to a null
pointer. If it doesn't, and an error happens, error_set() fails its
assertion.
Instead of
foo(foos, errp);
bar(bars, errp);
you need to do something like
Error *err = NULL;
foo(foos, &err);
if (err) {
error_propagate(errp, err);
goto out;
}
bar(bars, errp);
out:
Screwed up in commit 0e55884 (v1.3.0): property_get_bool().
Screwed up in commit 1f21772 (v2.1.0): object_property_get_enum() and
object_property_get_uint16List().
Screwed up in commit a8e3fbe (v2.4.0): property_get_enum(),
property_set_enum().
Found by inspection, no actual crashes observed.
Fix them up.
Cc: Anthony Liguori <anthony@codemonkey.ws>
Cc: Hu Tao <hutao@cn.fujitsu.com>
Cc: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
qom/object.c | 41 +++++++++++++++++++++++++++++++++++------
1 file changed, 35 insertions(+), 6 deletions(-)
diff --git a/qom/object.c b/qom/object.c
index b7b05d3..f28d703 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1098,6 +1098,7 @@ typedef struct EnumProperty {
int object_property_get_enum(Object *obj, const char *name,
const char *typename, Error **errp)
{
+ Error *err = NULL;
StringOutputVisitor *sov;
StringInputVisitor *siv;
char *str;
@@ -1119,7 +1120,12 @@ int object_property_get_enum(Object *obj, const char *name,
enumprop = prop->opaque;
sov = string_output_visitor_new(false);
- object_property_get(obj, string_output_get_visitor(sov), name, errp);
+ object_property_get(obj, string_output_get_visitor(sov), name, &err);
+ if (err) {
+ error_propagate(errp, err);
+ string_output_visitor_cleanup(sov);
+ return 0;
+ }
str = string_output_get_string(sov);
siv = string_input_visitor_new(str);
string_output_visitor_cleanup(sov);
@@ -1135,21 +1141,27 @@ int object_property_get_enum(Object *obj, const char *name,
void object_property_get_uint16List(Object *obj, const char *name,
uint16List **list, Error **errp)
{
+ Error *err = NULL;
StringOutputVisitor *ov;
StringInputVisitor *iv;
char *str;
ov = string_output_visitor_new(false);
object_property_get(obj, string_output_get_visitor(ov),
- name, errp);
+ name, &err);
+ if (err) {
+ error_propagate(errp, err);
+ goto out;
+ }
str = string_output_get_string(ov);
iv = string_input_visitor_new(str);
visit_type_uint16List(string_input_get_visitor(iv),
list, NULL, errp);
g_free(str);
- string_output_visitor_cleanup(ov);
string_input_visitor_cleanup(iv);
+out:
+ string_output_visitor_cleanup(ov);
}
void object_property_parse(Object *obj, const char *string,
@@ -1665,8 +1677,14 @@ static void property_get_bool(Object *obj, Visitor *v, void *opaque,
{
BoolProperty *prop = opaque;
bool value;
+ Error *err = NULL;
+
+ value = prop->get(obj, &err);
+ if (err) {
+ error_propagate(errp, err);
+ return;
+ }
- value = prop->get(obj, errp);
visit_type_bool(v, &value, name, errp);
}
@@ -1720,8 +1738,14 @@ static void property_get_enum(Object *obj, Visitor *v, void *opaque,
{
EnumProperty *prop = opaque;
int value;
+ Error *err = NULL;
+
+ value = prop->get(obj, &err);
+ if (err) {
+ error_propagate(errp, err);
+ return;
+ }
- value = prop->get(obj, errp);
visit_type_enum(v, &value, prop->strings, NULL, name, errp);
}
@@ -1730,8 +1754,13 @@ static void property_set_enum(Object *obj, Visitor *v, void *opaque,
{
EnumProperty *prop = opaque;
int value;
+ Error *err = NULL;
- visit_type_enum(v, &value, prop->strings, NULL, name, errp);
+ visit_type_enum(v, &value, prop->strings, NULL, name, &err);
+ if (err) {
+ error_propagate(errp, err);
+ return;
+ }
prop->set(obj, value, errp);
}
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 02/21] qom: Fix invalid error check in property_get_str()
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 01/21] qom: Do not reuse errp after a possible error Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 03/21] qdev: Do not use slow [*] expansion for GPIO creation Andreas Färber
` (19 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Andreas Färber, Markus Armbruster, Anthony Liguori,
qemu-stable
From: Markus Armbruster <armbru@redhat.com>
When a function returns a null pointer on error and only on error, you
can do
if (!foo(foos, errp)) {
... handle error ...
}
instead of the more cumbersome
Error *err = NULL;
if (!foo(foos, &err)) {
error_propagate(errp, err);
... handle error ...
}
A StringProperty's getter, however, may return null on success! We
then fail to call visit_type_str().
Screwed up in 6a146eb, v1.1.
Fails tests/qom-test in my current, heavily hacked QAPI branch. No
reproducer for master known (but I didn't look hard).
Cc: Anthony Liguori <anthony@codemonkey.ws>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
qom/object.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/qom/object.c b/qom/object.c
index f28d703..4805328 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1612,12 +1612,16 @@ static void property_get_str(Object *obj, Visitor *v, void *opaque,
{
StringProperty *prop = opaque;
char *value;
+ Error *err = NULL;
- value = prop->get(obj, errp);
- if (value) {
- visit_type_str(v, &value, name, errp);
- g_free(value);
+ value = prop->get(obj, &err);
+ if (err) {
+ error_propagate(errp, err);
+ return;
}
+
+ visit_type_str(v, &value, name, errp);
+ g_free(value);
}
static void property_set_str(Object *obj, Visitor *v, void *opaque,
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 03/21] qdev: Do not use slow [*] expansion for GPIO creation
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 01/21] qom: Do not reuse errp after a possible error Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 02/21] qom: Fix invalid error check in property_get_str() Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 04/21] machine: MACHINE_TYPE_NAME macro Andreas Färber
` (18 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Pavel Fedin, Andreas Färber
From: Pavel Fedin <p.fedin@samsung.com>
Expansion of [*] suffix is very slow because index expansion is done using
trial and error strategy, starting every time from zero and retrying with
the next index until insertion succeeds. With large number of already added
properties this process takes huge amount of time (O(n^2) complexity).
Some architectures (like ARM) use very large amount of IRQ pins in interrupt
controller models. This flaw makes machine startup extremely slow
(~20 seconds for ARM64 with 32 CPUs). This patch decreases this time down to
~10 seconds.
Also in qdev_init_gpio_out_named() memset() is now called only once for the
whole array instead of per-cell cleaning
Signed-off-by: Pavel Fedin <p.fedin@samsung.com>
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/core/qdev.c | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index a24493a..4ab04aa 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -417,17 +417,21 @@ void qdev_init_gpio_in_named(DeviceState *dev, qemu_irq_handler handler,
{
int i;
NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
- char *propname = g_strdup_printf("%s[*]", name ? name : "unnamed-gpio-in");
assert(gpio_list->num_out == 0 || !name);
gpio_list->in = qemu_extend_irqs(gpio_list->in, gpio_list->num_in, handler,
dev, n);
+ if (!name) {
+ name = "unnamed-gpio-in";
+ }
for (i = gpio_list->num_in; i < gpio_list->num_in + n; i++) {
+ gchar *propname = g_strdup_printf("%s[%u]", name, i);
+
object_property_add_child(OBJECT(dev), propname,
OBJECT(gpio_list->in[i]), &error_abort);
+ g_free(propname);
}
- g_free(propname);
gpio_list->num_in += n;
}
@@ -442,20 +446,25 @@ void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins,
{
int i;
NamedGPIOList *gpio_list = qdev_get_named_gpio_list(dev, name);
- char *propname = g_strdup_printf("%s[*]", name ? name : "unnamed-gpio-out");
assert(gpio_list->num_in == 0 || !name);
- gpio_list->num_out += n;
+ if (!name) {
+ name = "unnamed-gpio-out";
+ }
+ memset(pins, 0, sizeof(*pins) * n);
for (i = 0; i < n; ++i) {
- memset(&pins[i], 0, sizeof(*pins));
+ gchar *propname = g_strdup_printf("%s[%u]", name,
+ gpio_list->num_out + i);
+
object_property_add_link(OBJECT(dev), propname, TYPE_IRQ,
(Object **)&pins[i],
object_property_allow_set_link,
OBJ_PROP_LINK_UNREF_ON_RELEASE,
&error_abort);
+ g_free(propname);
}
- g_free(propname);
+ gpio_list->num_out += n;
}
void qdev_init_gpio_out(DeviceState *dev, qemu_irq *pins, int n)
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 04/21] machine: MACHINE_TYPE_NAME macro
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (2 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 03/21] qdev: Do not use slow [*] expansion for GPIO creation Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 05/21] vexpress: Don't set name on abstract class Andreas Färber
` (17 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Eduardo Habkost, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
The macro will be useful to ensure the machine class names follow the
right format to make machine class lookup by class name work correctly.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
include/hw/boards.h | 6 ++++++
vl.c | 2 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 566a5ca..586f939 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -40,6 +40,12 @@ void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
int qemu_register_machine(QEMUMachine *m);
#define TYPE_MACHINE_SUFFIX "-machine"
+
+/* Machine class name that needs to be used for class-name-based machine
+ * type lookup to work.
+ */
+#define MACHINE_TYPE_NAME(machinename) (machinename TYPE_MACHINE_SUFFIX)
+
#define TYPE_MACHINE "machine"
#undef MACHINE /* BSD defines it and QEMU does not use it */
#define MACHINE(obj) \
diff --git a/vl.c b/vl.c
index 3c6480d..3c6c9b0 100644
--- a/vl.c
+++ b/vl.c
@@ -1452,7 +1452,7 @@ static void qemu_machine_class_init(ObjectClass *oc, void *data)
int qemu_register_machine(QEMUMachine *m)
{
- char *name = g_strconcat(m->name, TYPE_MACHINE_SUFFIX, NULL);
+ char *name = g_strdup_printf(MACHINE_TYPE_NAME("%s"), m->name);
TypeInfo ti = {
.name = name,
.parent = TYPE_MACHINE,
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 05/21] vexpress: Don't set name on abstract class
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (3 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 04/21] machine: MACHINE_TYPE_NAME macro Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 06/21] vexpress: Rename machine classes to use MACHINE_TYPE_NAME Andreas Färber
` (16 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Eduardo Habkost, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
The MachineClass::name field won't be ever be used on TYPE_VEXPRESS, as
it is an abstract class and the machine class lookup code explicitly
skips abstract classes. We can remove it to make the code simpler.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/arm/vexpress.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c
index da8301a..e7ac3a5 100644
--- a/hw/arm/vexpress.c
+++ b/hw/arm/vexpress.c
@@ -747,7 +747,6 @@ static void vexpress_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->name = TYPE_VEXPRESS_MACHINE;
mc->desc = "ARM Versatile Express";
mc->init = vexpress_common_init;
mc->block_default_type = IF_SCSI;
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 06/21] vexpress: Rename machine classes to use MACHINE_TYPE_NAME
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (4 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 05/21] vexpress: Don't set name on abstract class Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 07/21] arm: Rename virt machine class " Andreas Färber
` (15 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Eduardo Habkost, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
Machine class names should use the "-machine" suffix to allow
class-name-based machine class lookup to work. Rename the vexpress
machine classes using the MACHINE_TYPE_NAME macro.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
[AF: Introduce VEXPRESS_*_MACHINE_NAME]
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/arm/vexpress.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c
index e7ac3a5..2bcd312 100644
--- a/hw/arm/vexpress.c
+++ b/hw/arm/vexpress.c
@@ -168,8 +168,10 @@ typedef struct {
} VexpressMachineState;
#define TYPE_VEXPRESS_MACHINE "vexpress"
-#define TYPE_VEXPRESS_A9_MACHINE "vexpress-a9"
-#define TYPE_VEXPRESS_A15_MACHINE "vexpress-a15"
+#define VEXPRESS_A9_MACHINE_NAME "vexpress-a9"
+#define VEXPRESS_A15_MACHINE_NAME "vexpress-a15"
+#define TYPE_VEXPRESS_A9_MACHINE MACHINE_TYPE_NAME(VEXPRESS_A9_MACHINE_NAME)
+#define TYPE_VEXPRESS_A15_MACHINE MACHINE_TYPE_NAME(VEXPRESS_A15_MACHINE_NAME)
#define VEXPRESS_MACHINE(obj) \
OBJECT_CHECK(VexpressMachineState, (obj), TYPE_VEXPRESS_MACHINE)
#define VEXPRESS_MACHINE_GET_CLASS(obj) \
@@ -758,7 +760,7 @@ static void vexpress_a9_class_init(ObjectClass *oc, void *data)
MachineClass *mc = MACHINE_CLASS(oc);
VexpressMachineClass *vmc = VEXPRESS_MACHINE_CLASS(oc);
- mc->name = TYPE_VEXPRESS_A9_MACHINE;
+ mc->name = VEXPRESS_A9_MACHINE_NAME;
mc->desc = "ARM Versatile Express for Cortex-A9";
vmc->daughterboard = &a9_daughterboard;
@@ -769,7 +771,7 @@ static void vexpress_a15_class_init(ObjectClass *oc, void *data)
MachineClass *mc = MACHINE_CLASS(oc);
VexpressMachineClass *vmc = VEXPRESS_MACHINE_CLASS(oc);
- mc->name = TYPE_VEXPRESS_A15_MACHINE;
+ mc->name = VEXPRESS_A15_MACHINE_NAME;
mc->desc = "ARM Versatile Express for Cortex-A15";
vmc->daughterboard = &a15_daughterboard;
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 07/21] arm: Rename virt machine class to use MACHINE_TYPE_NAME
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (5 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 06/21] vexpress: Rename machine classes to use MACHINE_TYPE_NAME Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 08/21] pseries: Rename machine class names " Andreas Färber
` (14 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Eduardo Habkost, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
Machine class names should use the "-machine" suffix to allow
class-name-based machine class lookup to work. Rename the arm virt
machine class using the MACHINE_TYPE_NAME macro.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/arm/virt.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index e9324f5..fba2595 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -83,7 +83,8 @@ typedef struct {
bool highmem;
} VirtMachineState;
-#define TYPE_VIRT_MACHINE "virt"
+#define VIRT_MACHINE_NAME "virt"
+#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME(VIRT_MACHINE_NAME)
#define VIRT_MACHINE(obj) \
OBJECT_CHECK(VirtMachineState, (obj), TYPE_VIRT_MACHINE)
#define VIRT_MACHINE_GET_CLASS(obj) \
@@ -1073,7 +1074,7 @@ static void virt_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->name = TYPE_VIRT_MACHINE;
+ mc->name = VIRT_MACHINE_NAME;
mc->desc = "ARM Virtual Machine",
mc->init = machvirt_init;
mc->max_cpus = 8;
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 08/21] pseries: Rename machine class names to use MACHINE_TYPE_NAME
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (6 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 07/21] arm: Rename virt machine class " Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 09/21] s390-virtio: Rename machine class name " Andreas Färber
` (13 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Alexander Graf, David Gibson, open list:sPAPR pseries,
Eduardo Habkost, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
Machine class names should use the "-machine" suffix to allow
class-name-based machine class lookup to work. Rename the the pseries
machine classes using the MACHINE_TYPE_NAME macro.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/ppc/spapr.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index bf0c64f..012b6ed 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1925,7 +1925,7 @@ static void spapr_machine_2_1_class_init(ObjectClass *oc, void *data)
}
static const TypeInfo spapr_machine_2_1_info = {
- .name = TYPE_SPAPR_MACHINE "2.1",
+ .name = MACHINE_TYPE_NAME("pseries-2.1"),
.parent = TYPE_SPAPR_MACHINE,
.class_init = spapr_machine_2_1_class_init,
.instance_init = spapr_machine_2_1_instance_init,
@@ -1945,7 +1945,7 @@ static void spapr_machine_2_2_class_init(ObjectClass *oc, void *data)
}
static const TypeInfo spapr_machine_2_2_info = {
- .name = TYPE_SPAPR_MACHINE "2.2",
+ .name = MACHINE_TYPE_NAME("pseries-2.2"),
.parent = TYPE_SPAPR_MACHINE,
.class_init = spapr_machine_2_2_class_init,
.instance_init = spapr_machine_2_2_instance_init,
@@ -1965,7 +1965,7 @@ static void spapr_machine_2_3_class_init(ObjectClass *oc, void *data)
}
static const TypeInfo spapr_machine_2_3_info = {
- .name = TYPE_SPAPR_MACHINE "2.3",
+ .name = MACHINE_TYPE_NAME("pseries-2.3"),
.parent = TYPE_SPAPR_MACHINE,
.class_init = spapr_machine_2_3_class_init,
.instance_init = spapr_machine_2_3_instance_init,
@@ -1982,7 +1982,7 @@ static void spapr_machine_2_4_class_init(ObjectClass *oc, void *data)
}
static const TypeInfo spapr_machine_2_4_info = {
- .name = TYPE_SPAPR_MACHINE "2.4",
+ .name = MACHINE_TYPE_NAME("pseries-2.4"),
.parent = TYPE_SPAPR_MACHINE,
.class_init = spapr_machine_2_4_class_init,
};
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 09/21] s390-virtio: Rename machine class name to use MACHINE_TYPE_NAME
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (7 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 08/21] pseries: Rename machine class names " Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 10/21] s390: Rename s390-ccw-virtio-2.4 " Andreas Färber
` (12 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Alexander Graf, Richard Henderson, Eduardo Habkost,
Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
Machine class names should use the "-machine" suffix to allow
class-name-based machine class lookup to work. Rename the s390-virtio
machine class using the MACHINE_TYPE_NAME macro.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/s390x/s390-virtio.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c
index e4000c9..a1eca09 100644
--- a/hw/s390x/s390-virtio.c
+++ b/hw/s390x/s390-virtio.c
@@ -54,7 +54,8 @@
#define MAX_BLK_DEVS 10
#define ZIPL_FILENAME "s390-zipl.rom"
-#define TYPE_S390_MACHINE "s390-machine"
+#define S390_MACHINE "s390-virtio"
+#define TYPE_S390_MACHINE MACHINE_TYPE_NAME(S390_MACHINE)
#define S390_TOD_CLOCK_VALUE_MISSING 0x00
#define S390_TOD_CLOCK_VALUE_PRESENT 0x01
@@ -318,7 +319,7 @@ static void s390_machine_class_init(ObjectClass *oc, void *data)
MachineClass *mc = MACHINE_CLASS(oc);
NMIClass *nc = NMI_CLASS(oc);
- mc->name = "s390-virtio";
+ mc->name = S390_MACHINE;
mc->alias = "s390";
mc->desc = "VirtIO based S390 machine";
mc->init = s390_init;
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 10/21] s390: Rename s390-ccw-virtio-2.4 class name to use MACHINE_TYPE_NAME
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (8 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 09/21] s390-virtio: Rename machine class name " Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 11/21] mac99: Use MACHINE_TYPE_NAME to encode class name Andreas Färber
` (11 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Eduardo Habkost, Alexander Graf, Christian Borntraeger,
Cornelia Huck, Andreas Färber, Richard Henderson
From: Eduardo Habkost <ehabkost@redhat.com>
Machine class names should use the "-machine" suffix to allow
class-name-based machine class lookup to work. Rename the
s390-ccw-virtio-2.4 machine class using the MACHINE_TYPE_NAME macro.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
[AF/ehabkost: Updated for 2.5 machine]
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/s390x/s390-virtio-ccw.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 0e30c0f..e738b5b 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -258,7 +258,7 @@ static void ccw_machine_2_4_class_init(ObjectClass *oc, void *data)
}
static const TypeInfo ccw_machine_2_4_info = {
- .name = TYPE_S390_CCW_MACHINE "2.4",
+ .name = MACHINE_TYPE_NAME("s390-ccw-virtio-2.4"),
.parent = TYPE_S390_CCW_MACHINE,
.class_init = ccw_machine_2_4_class_init,
};
@@ -274,7 +274,7 @@ static void ccw_machine_2_5_class_init(ObjectClass *oc, void *data)
}
static const TypeInfo ccw_machine_2_5_info = {
- .name = TYPE_S390_CCW_MACHINE "2.5",
+ .name = MACHINE_TYPE_NAME("s390-ccw-virtio-2.5"),
.parent = TYPE_S390_CCW_MACHINE,
.class_init = ccw_machine_2_5_class_init,
};
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 11/21] mac99: Use MACHINE_TYPE_NAME to encode class name
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (9 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 10/21] s390: Rename s390-ccw-virtio-2.4 " Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 12/21] machine: Ensure all TYPE_MACHINE subclasses have the right suffix Andreas Färber
` (10 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Alexander Graf, open list:New World, Eduardo Habkost,
Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
It will result in exactly the same class name, but it will make the code
consistent with the other classes.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/ppc/mac_newworld.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index 3c82be2..31c40c9 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -517,7 +517,7 @@ static void core99_machine_class_init(ObjectClass *oc, void *data)
}
static const TypeInfo core99_machine_info = {
- .name = "mac99-machine",
+ .name = MACHINE_TYPE_NAME("mac99"),
.parent = TYPE_MACHINE,
.class_init = core99_machine_class_init,
};
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 12/21] machine: Ensure all TYPE_MACHINE subclasses have the right suffix
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (10 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 11/21] mac99: Use MACHINE_TYPE_NAME to encode class name Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 13/21] machine: Set MachineClass::name automatically Andreas Färber
` (9 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Eduardo Habkost, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
Now that all non-abstract TYPE_MACHINE subclasses have the -machine
suffix, add an assert to ensure this will be always true.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/core/machine.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 51ed6b2..3c1f248 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -316,6 +316,14 @@ static void machine_class_init(ObjectClass *oc, void *data)
mc->default_ram_size = 128 * M_BYTE;
}
+static void machine_class_base_init(ObjectClass *oc, void *data)
+{
+ if (!object_class_is_abstract(oc)) {
+ const char *cname = object_class_get_name(oc);
+ assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX));
+ }
+}
+
static void machine_initfn(Object *obj)
{
MachineState *ms = MACHINE(obj);
@@ -492,6 +500,7 @@ static const TypeInfo machine_info = {
.abstract = true,
.class_size = sizeof(MachineClass),
.class_init = machine_class_init,
+ .class_base_init = machine_class_base_init,
.instance_size = sizeof(MachineState),
.instance_init = machine_initfn,
.instance_finalize = machine_finalize,
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 13/21] machine: Set MachineClass::name automatically
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (11 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 12/21] machine: Ensure all TYPE_MACHINE subclasses have the right suffix Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 14/21] exynos4: Use EXYNOS4210_NCPUS instead of max_cpus on error message Andreas Färber
` (8 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Eduardo Habkost, Alexander Graf,
Christian Borntraeger, open list:New World, Cornelia Huck,
Paolo Bonzini, Richard Henderson, Andreas Färber,
David Gibson
From: Eduardo Habkost <ehabkost@redhat.com>
Now all TYPE_MACHINE subclasses use MACHINE_TYPE_NAME to generate the
class name. So instead of requiring each subclass to set
MachineClass::name manually, we can now set it automatically at the
TYPE_MACHINE class_base_init() function.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
[AF/ehabkost: Updated for s390-ccw machines]
[AF: Cleanup of intermediate virt and vexpress name handling]
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/arm/vexpress.c | 8 ++------
hw/arm/virt.c | 4 +---
hw/core/machine.c | 3 +++
hw/ppc/mac_newworld.c | 1 -
hw/ppc/spapr.c | 4 ----
hw/s390x/s390-virtio-ccw.c | 2 --
hw/s390x/s390-virtio.c | 1 -
vl.c | 1 -
8 files changed, 6 insertions(+), 18 deletions(-)
diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c
index 2bcd312..058abbd 100644
--- a/hw/arm/vexpress.c
+++ b/hw/arm/vexpress.c
@@ -168,10 +168,8 @@ typedef struct {
} VexpressMachineState;
#define TYPE_VEXPRESS_MACHINE "vexpress"
-#define VEXPRESS_A9_MACHINE_NAME "vexpress-a9"
-#define VEXPRESS_A15_MACHINE_NAME "vexpress-a15"
-#define TYPE_VEXPRESS_A9_MACHINE MACHINE_TYPE_NAME(VEXPRESS_A9_MACHINE_NAME)
-#define TYPE_VEXPRESS_A15_MACHINE MACHINE_TYPE_NAME(VEXPRESS_A15_MACHINE_NAME)
+#define TYPE_VEXPRESS_A9_MACHINE MACHINE_TYPE_NAME("vexpress-a9")
+#define TYPE_VEXPRESS_A15_MACHINE MACHINE_TYPE_NAME("vexpress-a15")
#define VEXPRESS_MACHINE(obj) \
OBJECT_CHECK(VexpressMachineState, (obj), TYPE_VEXPRESS_MACHINE)
#define VEXPRESS_MACHINE_GET_CLASS(obj) \
@@ -760,7 +758,6 @@ static void vexpress_a9_class_init(ObjectClass *oc, void *data)
MachineClass *mc = MACHINE_CLASS(oc);
VexpressMachineClass *vmc = VEXPRESS_MACHINE_CLASS(oc);
- mc->name = VEXPRESS_A9_MACHINE_NAME;
mc->desc = "ARM Versatile Express for Cortex-A9";
vmc->daughterboard = &a9_daughterboard;
@@ -771,7 +768,6 @@ static void vexpress_a15_class_init(ObjectClass *oc, void *data)
MachineClass *mc = MACHINE_CLASS(oc);
VexpressMachineClass *vmc = VEXPRESS_MACHINE_CLASS(oc);
- mc->name = VEXPRESS_A15_MACHINE_NAME;
mc->desc = "ARM Versatile Express for Cortex-A15";
vmc->daughterboard = &a15_daughterboard;
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index fba2595..6bf0d6d 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -83,8 +83,7 @@ typedef struct {
bool highmem;
} VirtMachineState;
-#define VIRT_MACHINE_NAME "virt"
-#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME(VIRT_MACHINE_NAME)
+#define TYPE_VIRT_MACHINE MACHINE_TYPE_NAME("virt")
#define VIRT_MACHINE(obj) \
OBJECT_CHECK(VirtMachineState, (obj), TYPE_VIRT_MACHINE)
#define VIRT_MACHINE_GET_CLASS(obj) \
@@ -1074,7 +1073,6 @@ static void virt_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->name = VIRT_MACHINE_NAME;
mc->desc = "ARM Virtual Machine",
mc->init = machvirt_init;
mc->max_cpus = 8;
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 3c1f248..f4db340 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -319,8 +319,11 @@ static void machine_class_init(ObjectClass *oc, void *data)
static void machine_class_base_init(ObjectClass *oc, void *data)
{
if (!object_class_is_abstract(oc)) {
+ MachineClass *mc = MACHINE_CLASS(oc);
const char *cname = object_class_get_name(oc);
assert(g_str_has_suffix(cname, TYPE_MACHINE_SUFFIX));
+ mc->name = g_strndup(cname,
+ strlen(cname) - strlen(TYPE_MACHINE_SUFFIX));
}
}
diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index 31c40c9..e1c5ed7 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -508,7 +508,6 @@ static void core99_machine_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->name = "mac99";
mc->desc = "Mac99 based PowerMAC";
mc->init = ppc_core99_init;
mc->max_cpus = MAX_CPUS;
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 012b6ed..05926a3 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1919,7 +1919,6 @@ static void spapr_machine_2_1_class_init(ObjectClass *oc, void *data)
{ /* end of list */ }
};
- mc->name = "pseries-2.1";
mc->desc = "pSeries Logical Partition (PAPR compliant) v2.1";
mc->compat_props = compat_props;
}
@@ -1939,7 +1938,6 @@ static void spapr_machine_2_2_class_init(ObjectClass *oc, void *data)
};
MachineClass *mc = MACHINE_CLASS(oc);
- mc->name = "pseries-2.2";
mc->desc = "pSeries Logical Partition (PAPR compliant) v2.2";
mc->compat_props = compat_props;
}
@@ -1959,7 +1957,6 @@ static void spapr_machine_2_3_class_init(ObjectClass *oc, void *data)
};
MachineClass *mc = MACHINE_CLASS(oc);
- mc->name = "pseries-2.3";
mc->desc = "pSeries Logical Partition (PAPR compliant) v2.3";
mc->compat_props = compat_props;
}
@@ -1975,7 +1972,6 @@ static void spapr_machine_2_4_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->name = "pseries-2.4";
mc->desc = "pSeries Logical Partition (PAPR compliant) v2.4";
mc->alias = "pseries";
mc->is_default = 1;
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index e738b5b..36f78b4 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -252,7 +252,6 @@ static void ccw_machine_2_4_class_init(ObjectClass *oc, void *data)
{ /* end of list */ }
};
- mc->name = "s390-ccw-virtio-2.4";
mc->desc = "VirtIO-ccw based S390 machine v2.4";
mc->compat_props = compat_props;
}
@@ -267,7 +266,6 @@ static void ccw_machine_2_5_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
- mc->name = "s390-ccw-virtio-2.5";
mc->alias = "s390-ccw-virtio";
mc->desc = "VirtIO-ccw based S390 machine v2.5";
mc->is_default = 1;
diff --git a/hw/s390x/s390-virtio.c b/hw/s390x/s390-virtio.c
index a1eca09..bc013eb 100644
--- a/hw/s390x/s390-virtio.c
+++ b/hw/s390x/s390-virtio.c
@@ -319,7 +319,6 @@ static void s390_machine_class_init(ObjectClass *oc, void *data)
MachineClass *mc = MACHINE_CLASS(oc);
NMIClass *nc = NMI_CLASS(oc);
- mc->name = S390_MACHINE;
mc->alias = "s390";
mc->desc = "VirtIO based S390 machine";
mc->init = s390_init;
diff --git a/vl.c b/vl.c
index 3c6c9b0..3b92635 100644
--- a/vl.c
+++ b/vl.c
@@ -1437,7 +1437,6 @@ static void qemu_machine_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
QEMUMachine *qm = data;
- mc->name = qm->name;
mc->desc = qm->desc;
mc->init = qm->init;
mc->kvm_type = qm->kvm_type;
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 14/21] exynos4: Use EXYNOS4210_NCPUS instead of max_cpus on error message
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (12 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 13/21] machine: Set MachineClass::name automatically Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 15/21] exynos4: Use MachineClass instead of exynos4_machines array Andreas Färber
` (7 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Eduardo Habkost, Evgeny Voevodin, Igor Mitsyanko,
Dmitry Solodkiy, Maksim Kozlov, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
The code is checking smp_cpus against EXYNOS4210_NCPUS, not against
max_cpus, so use EXYNOS4210_NCPUS in the error message for consistency.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/arm/exynos4_boards.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c
index d644db1..3f88c4a 100644
--- a/hw/arm/exynos4_boards.c
+++ b/hw/arm/exynos4_boards.c
@@ -100,8 +100,7 @@ static Exynos4210State *exynos4_boards_init_common(MachineState *machine,
if (smp_cpus != EXYNOS4210_NCPUS && !qtest_enabled()) {
fprintf(stderr, "%s board supports only %d CPU cores. Ignoring smp_cpus"
" value.\n",
- exynos4_machines[board_type].name,
- exynos4_machines[board_type].max_cpus);
+ exynos4_machines[board_type].name, EXYNOS4210_NCPUS);
}
exynos4_board_binfo.ram_size = exynos4_board_ram_size[board_type];
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 15/21] exynos4: Use MachineClass instead of exynos4_machines array
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (13 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 14/21] exynos4: Use EXYNOS4210_NCPUS instead of max_cpus on error message Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 16/21] exynos4: Declare each QEMUMachine as a separate variable Andreas Färber
` (6 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Eduardo Habkost, Evgeny Voevodin, Igor Mitsyanko,
Dmitry Solodkiy, Maksim Kozlov, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
We don't need a QEMUMachine array to query max_cpus, if we can get the
corresponding MachineClass.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/arm/exynos4_boards.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c
index 3f88c4a..312a014 100644
--- a/hw/arm/exynos4_boards.c
+++ b/hw/arm/exynos4_boards.c
@@ -97,10 +97,12 @@ static void lan9215_init(uint32_t base, qemu_irq irq)
static Exynos4210State *exynos4_boards_init_common(MachineState *machine,
Exynos4BoardType board_type)
{
+ MachineClass *mc = MACHINE_GET_CLASS(machine);
+
if (smp_cpus != EXYNOS4210_NCPUS && !qtest_enabled()) {
fprintf(stderr, "%s board supports only %d CPU cores. Ignoring smp_cpus"
" value.\n",
- exynos4_machines[board_type].name, EXYNOS4210_NCPUS);
+ mc->name, EXYNOS4210_NCPUS);
}
exynos4_board_binfo.ram_size = exynos4_board_ram_size[board_type];
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 16/21] exynos4: Declare each QEMUMachine as a separate variable
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (14 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 15/21] exynos4: Use MachineClass instead of exynos4_machines array Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 17/21] machine: DEFINE_MACHINE() macro Andreas Färber
` (5 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Eduardo Habkost, Evgeny Voevodin, Igor Mitsyanko,
Dmitry Solodkiy, Maksim Kozlov, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
This will make the code follow the same pattern used for other machines,
and will make it easier to automatically convert the code to be
QOM-based.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/arm/exynos4_boards.c | 31 ++++++++++++++-----------------
1 file changed, 14 insertions(+), 17 deletions(-)
diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c
index 312a014..35fc7c4 100644
--- a/hw/arm/exynos4_boards.c
+++ b/hw/arm/exynos4_boards.c
@@ -74,8 +74,6 @@ static struct arm_boot_info exynos4_board_binfo = {
.write_secondary_boot = exynos4210_write_secondary,
};
-static QEMUMachine exynos4_machines[EXYNOS4_NUM_OF_BOARDS];
-
static void lan9215_init(uint32_t base, qemu_irq irq)
{
DeviceState *dev;
@@ -146,25 +144,24 @@ static void smdkc210_init(MachineState *machine)
arm_load_kernel(ARM_CPU(first_cpu), &exynos4_board_binfo);
}
-static QEMUMachine exynos4_machines[EXYNOS4_NUM_OF_BOARDS] = {
- [EXYNOS4_BOARD_NURI] = {
- .name = "nuri",
- .desc = "Samsung NURI board (Exynos4210)",
- .init = nuri_init,
- .max_cpus = EXYNOS4210_NCPUS,
- },
- [EXYNOS4_BOARD_SMDKC210] = {
- .name = "smdkc210",
- .desc = "Samsung SMDKC210 board (Exynos4210)",
- .init = smdkc210_init,
- .max_cpus = EXYNOS4210_NCPUS,
- },
+static QEMUMachine exynos4_machine_nuri = {
+ .name = "nuri",
+ .desc = "Samsung NURI board (Exynos4210)",
+ .init = nuri_init,
+ .max_cpus = EXYNOS4210_NCPUS,
+};
+
+static QEMUMachine exynos4_machine_smdkc210 = {
+ .name = "smdkc210",
+ .desc = "Samsung SMDKC210 board (Exynos4210)",
+ .init = smdkc210_init,
+ .max_cpus = EXYNOS4210_NCPUS,
};
static void exynos4_machine_init(void)
{
- qemu_register_machine(&exynos4_machines[EXYNOS4_BOARD_NURI]);
- qemu_register_machine(&exynos4_machines[EXYNOS4_BOARD_SMDKC210]);
+ qemu_register_machine(&exynos4_machine_nuri);
+ qemu_register_machine(&exynos4_machine_smdkc210);
}
machine_init(exynos4_machine_init);
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 17/21] machine: DEFINE_MACHINE() macro
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (15 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 16/21] exynos4: Declare each QEMUMachine as a separate variable Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 18/21] mac_world: Break long line Andreas Färber
` (4 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Eduardo Habkost, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
The macro will allow easy registration of a TYPE_MACHINE subclass, using
only the machine name and a MachineClass initialization function as
parameter.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
include/hw/boards.h | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 586f939..4fe2ce5 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -159,4 +159,21 @@ struct MachineState {
AccelState *accelerator;
};
+#define DEFINE_MACHINE(namestr, machine_initfn) \
+ static void machine_initfn##_class_init(ObjectClass *oc, void *data) \
+ { \
+ MachineClass *mc = MACHINE_CLASS(oc); \
+ machine_initfn(mc); \
+ } \
+ static const TypeInfo machine_initfn##_typeinfo = { \
+ .name = MACHINE_TYPE_NAME(namestr), \
+ .parent = TYPE_MACHINE, \
+ .class_init = machine_initfn##_class_init, \
+ }; \
+ static void machine_initfn##_register_types(void) \
+ { \
+ type_register_static(&machine_initfn##_typeinfo); \
+ } \
+ machine_init(machine_initfn##_register_types)
+
#endif
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 18/21] mac_world: Break long line
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (16 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 17/21] machine: DEFINE_MACHINE() macro Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 15:14 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 19/21] Use DEFINE_MACHINE() to register all machines Andreas Färber
` (3 subsequent siblings)
21 siblings, 1 reply; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Alexander Graf, open list:Old World, Eduardo Habkost,
Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
Coding style change only.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/ppc/mac_oldworld.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c
index 1e4b55a..4c5fe46 100644
--- a/hw/ppc/mac_oldworld.c
+++ b/hw/ppc/mac_oldworld.c
@@ -365,7 +365,8 @@ static QEMUMachine heathrow_machine = {
#ifndef TARGET_PPC64
.is_default = 1,
#endif
- .default_boot_order = "cd", /* TOFIX "cad" when Mac floppy is implemented */
+ /* TOFIX "cad" when Mac floppy is implemented */
+ .default_boot_order = "cd",
.kvm_type = heathrow_kvm_type,
};
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PULL 18/21] mac_world: Break long line
2015-09-19 14:43 ` [Qemu-devel] [PULL 18/21] mac_world: Break long line Andreas Färber
@ 2015-09-19 15:14 ` Andreas Färber
0 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 15:14 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-ppc, Alexander Graf, Eduardo Habkost
Am 19.09.2015 um 16:43 schrieb Andreas Färber:
> From: Eduardo Habkost <ehabkost@redhat.com>
>
> Coding style change only.
>
> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> Signed-off-by: Andreas Färber <afaerber@suse.de>
> ---
> hw/ppc/mac_oldworld.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
Subject should've been mac_oldworld... not worth a respin on its own.
Andreas
--
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton; HRB 21284 (AG Nürnberg)
^ permalink raw reply [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 19/21] Use DEFINE_MACHINE() to register all machines
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (17 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 18/21] mac_world: Break long line Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 14:43 ` [Qemu-devel] [PULL 20/21] Revert use of DEFINE_MACHINE() for registrations of multiple machines Andreas Färber
` (2 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Evgeny Voevodin, Mark Cave-Ayland, Blue Swirl,
Max Filippov, Edgar E. Iglesias, Guan Xuetao, Rob Herring,
Jia Liu, Alexander Graf, Andreas Färber,
Hervé Poussineau, Antony Pavlov, Maksim Kozlov, Leon Alrae,
Eduardo Habkost, Li Guang, Fabien Chouteau, Alistair Francis,
Peter Chubb, Scott Wood, Richard Henderson, Peter Crosthwaite,
Igor Mitsyanko, Michael Walle, open list:e500, Dmitry Solodkiy,
Bastian Koppelmann, Jan Kiszka, Andreas Färber,
Aurelien Jarno
From: Eduardo Habkost <ehabkost@redhat.com>
Convert all machines to use DEFINE_MACHINE() instead of QEMUMachine
automatically using a script.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
[AF: Style cleanups, convert imx25_pdk machine]
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/alpha/dp264.c | 17 ++--
hw/arm/collie.c | 13 +--
hw/arm/cubieboard.c | 14 +--
hw/arm/digic_boards.c | 13 +--
hw/arm/exynos4_boards.c | 28 +++---
hw/arm/gumstix.c | 28 +++---
hw/arm/highbank.c | 32 +++---
hw/arm/imx25_pdk.c | 13 +--
hw/arm/integratorcp.c | 13 +--
hw/arm/kzm.c | 13 +--
hw/arm/mainstone.c | 13 +--
hw/arm/musicpal.c | 13 +--
hw/arm/netduino2.c | 13 +--
hw/arm/nseries.c | 28 +++---
hw/arm/omap_sx1.c | 24 ++---
hw/arm/palm.c | 13 +--
hw/arm/realview.c | 60 ++++++-----
hw/arm/spitz.c | 50 +++++-----
hw/arm/stellaris.c | 24 ++---
hw/arm/tosa.c | 13 +--
hw/arm/versatilepb.c | 28 +++---
hw/arm/xilinx_zynq.c | 19 ++--
hw/arm/xlnx-ep108.c | 13 +--
hw/arm/z2.c | 13 +--
hw/core/null-machine.c | 16 +--
hw/cris/axis_dev88.c | 15 +--
hw/lm32/lm32_boards.c | 32 +++---
hw/lm32/milkymist.c | 15 +--
hw/m68k/an5206.c | 13 +--
hw/m68k/dummy_m68k.c | 13 +--
hw/m68k/mcf5208.c | 15 +--
hw/microblaze/petalogix_ml605_mmu.c | 15 +--
hw/microblaze/petalogix_s3adsp1800_mmu.c | 15 +--
hw/mips/mips_fulong2e.c | 13 +--
hw/mips/mips_jazz.c | 28 +++---
hw/mips/mips_malta.c | 22 ++--
hw/mips/mips_mipssim.c | 13 +--
hw/mips/mips_r4k.c | 13 +--
hw/moxie/moxiesim.c | 15 +--
hw/openrisc/openrisc_sim.c | 17 ++--
hw/ppc/e500plat.c | 17 ++--
hw/ppc/mac_oldworld.c | 23 ++---
hw/ppc/mpc8544ds.c | 15 +--
hw/ppc/ppc405_boards.c | 26 ++---
hw/ppc/ppc440_bamboo.c | 13 +--
hw/ppc/prep.c | 17 ++--
hw/ppc/virtex_ml507.c | 13 +--
hw/sh4/r2d.c | 13 +--
hw/sh4/shix.c | 15 +--
hw/sparc/leon3.c | 13 +--
hw/sparc/sun4m.c | 166 ++++++++++++++++---------------
hw/sparc64/sun4u.c | 58 ++++++-----
hw/tricore/tricore_testboard.c | 15 +--
hw/unicore32/puv3.c | 15 +--
hw/xenpv/xen_machine_pv.c | 17 ++--
hw/xtensa/sim.c | 17 ++--
hw/xtensa/xtfpga.c | 58 ++++++-----
57 files changed, 517 insertions(+), 772 deletions(-)
diff --git a/hw/alpha/dp264.c b/hw/alpha/dp264.c
index f86e7bb..27bdaa1 100644
--- a/hw/alpha/dp264.c
+++ b/hw/alpha/dp264.c
@@ -168,17 +168,12 @@ static void clipper_init(MachineState *machine)
}
}
-static QEMUMachine clipper_machine = {
- .name = "clipper",
- .desc = "Alpha DP264/CLIPPER",
- .init = clipper_init,
- .max_cpus = 4,
- .is_default = 1,
-};
-
-static void clipper_machine_init(void)
+static void clipper_machine_init(MachineClass *mc)
{
- qemu_register_machine(&clipper_machine);
+ mc->desc = "Alpha DP264/CLIPPER";
+ mc->init = clipper_init;
+ mc->max_cpus = 4;
+ mc->is_default = 1;
}
-machine_init(clipper_machine_init);
+DEFINE_MACHINE("clipper", clipper_machine_init)
diff --git a/hw/arm/collie.c b/hw/arm/collie.c
index 6c9b82f..4e6541e 100644
--- a/hw/arm/collie.c
+++ b/hw/arm/collie.c
@@ -58,15 +58,10 @@ static void collie_init(MachineState *machine)
arm_load_kernel(s->cpu, &collie_binfo);
}
-static QEMUMachine collie_machine = {
- .name = "collie",
- .desc = "Collie PDA (SA-1110)",
- .init = collie_init,
-};
-
-static void collie_machine_init(void)
+static void collie_machine_init(MachineClass *mc)
{
- qemu_register_machine(&collie_machine);
+ mc->desc = "Collie PDA (SA-1110)";
+ mc->init = collie_init;
}
-machine_init(collie_machine_init)
+DEFINE_MACHINE("collie", collie_machine_init)
diff --git a/hw/arm/cubieboard.c b/hw/arm/cubieboard.c
index 1582250..bf068cd 100644
--- a/hw/arm/cubieboard.c
+++ b/hw/arm/cubieboard.c
@@ -74,16 +74,10 @@ static void cubieboard_init(MachineState *machine)
arm_load_kernel(&s->a10->cpu, &cubieboard_binfo);
}
-static QEMUMachine cubieboard_machine = {
- .name = "cubieboard",
- .desc = "cubietech cubieboard",
- .init = cubieboard_init,
-};
-
-
-static void cubieboard_machine_init(void)
+static void cubieboard_machine_init(MachineClass *mc)
{
- qemu_register_machine(&cubieboard_machine);
+ mc->desc = "cubietech cubieboard";
+ mc->init = cubieboard_init;
}
-machine_init(cubieboard_machine_init)
+DEFINE_MACHINE("cubieboard", cubieboard_machine_init)
diff --git a/hw/arm/digic_boards.c b/hw/arm/digic_boards.c
index f8ba9e5..710045a 100644
--- a/hw/arm/digic_boards.c
+++ b/hw/arm/digic_boards.c
@@ -148,15 +148,10 @@ static void canon_a1100_init(MachineState *machine)
digic4_board_init(&digic4_board_canon_a1100);
}
-static QEMUMachine canon_a1100 = {
- .name = "canon-a1100",
- .desc = "Canon PowerShot A1100 IS",
- .init = &canon_a1100_init,
-};
-
-static void digic_register_machines(void)
+static void canon_a1100_machine_init(MachineClass *mc)
{
- qemu_register_machine(&canon_a1100);
+ mc->desc = "Canon PowerShot A1100 IS";
+ mc->init = &canon_a1100_init;
}
-machine_init(digic_register_machines)
+DEFINE_MACHINE("canon-a1100", canon_a1100_machine_init)
diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c
index 35fc7c4..fadf372 100644
--- a/hw/arm/exynos4_boards.c
+++ b/hw/arm/exynos4_boards.c
@@ -144,24 +144,20 @@ static void smdkc210_init(MachineState *machine)
arm_load_kernel(ARM_CPU(first_cpu), &exynos4_board_binfo);
}
-static QEMUMachine exynos4_machine_nuri = {
- .name = "nuri",
- .desc = "Samsung NURI board (Exynos4210)",
- .init = nuri_init,
- .max_cpus = EXYNOS4210_NCPUS,
-};
+static void exynos4_machine_nuri_machine_init(MachineClass *mc)
+{
+ mc->desc = "Samsung NURI board (Exynos4210)";
+ mc->init = nuri_init;
+ mc->max_cpus = EXYNOS4210_NCPUS;
+}
-static QEMUMachine exynos4_machine_smdkc210 = {
- .name = "smdkc210",
- .desc = "Samsung SMDKC210 board (Exynos4210)",
- .init = smdkc210_init,
- .max_cpus = EXYNOS4210_NCPUS,
-};
+DEFINE_MACHINE("nuri", exynos4_machine_nuri_machine_init)
-static void exynos4_machine_init(void)
+static void exynos4_machine_smdkc210_machine_init(MachineClass *mc)
{
- qemu_register_machine(&exynos4_machine_nuri);
- qemu_register_machine(&exynos4_machine_smdkc210);
+ mc->desc = "Samsung SMDKC210 board (Exynos4210)";
+ mc->init = smdkc210_init;
+ mc->max_cpus = EXYNOS4210_NCPUS;
}
-machine_init(exynos4_machine_init);
+DEFINE_MACHINE("smdkc210", exynos4_machine_smdkc210_machine_init)
diff --git a/hw/arm/gumstix.c b/hw/arm/gumstix.c
index 8103278..6dc98c8 100644
--- a/hw/arm/gumstix.c
+++ b/hw/arm/gumstix.c
@@ -121,22 +121,18 @@ static void verdex_init(MachineState *machine)
qdev_get_gpio_in(cpu->gpio, 99));
}
-static QEMUMachine connex_machine = {
- .name = "connex",
- .desc = "Gumstix Connex (PXA255)",
- .init = connex_init,
-};
-
-static QEMUMachine verdex_machine = {
- .name = "verdex",
- .desc = "Gumstix Verdex (PXA270)",
- .init = verdex_init,
-};
-
-static void gumstix_machine_init(void)
+static void connex_machine_init(MachineClass *mc)
{
- qemu_register_machine(&connex_machine);
- qemu_register_machine(&verdex_machine);
+ mc->desc = "Gumstix Connex (PXA255)";
+ mc->init = connex_init;
}
-machine_init(gumstix_machine_init);
+DEFINE_MACHINE("connex", connex_machine_init)
+
+static void verdex_machine_init(MachineClass *mc)
+{
+ mc->desc = "Gumstix Verdex (PXA270)";
+ mc->init = verdex_init;
+}
+
+DEFINE_MACHINE("verdex", verdex_machine_init)
diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c
index 960bc39..9b2887e 100644
--- a/hw/arm/highbank.c
+++ b/hw/arm/highbank.c
@@ -391,26 +391,22 @@ static void midway_init(MachineState *machine)
calxeda_init(machine, CALXEDA_MIDWAY);
}
-static QEMUMachine highbank_machine = {
- .name = "highbank",
- .desc = "Calxeda Highbank (ECX-1000)",
- .init = highbank_init,
- .block_default_type = IF_SCSI,
- .max_cpus = 4,
-};
+static void highbank_machine_init(MachineClass *mc)
+{
+ mc->desc = "Calxeda Highbank (ECX-1000)";
+ mc->init = highbank_init;
+ mc->block_default_type = IF_SCSI;
+ mc->max_cpus = 4;
+}
-static QEMUMachine midway_machine = {
- .name = "midway",
- .desc = "Calxeda Midway (ECX-2000)",
- .init = midway_init,
- .block_default_type = IF_SCSI,
- .max_cpus = 4,
-};
+DEFINE_MACHINE("highbank", highbank_machine_init)
-static void calxeda_machines_init(void)
+static void midway_machine_init(MachineClass *mc)
{
- qemu_register_machine(&highbank_machine);
- qemu_register_machine(&midway_machine);
+ mc->desc = "Calxeda Midway (ECX-2000)";
+ mc->init = midway_init;
+ mc->block_default_type = IF_SCSI;
+ mc->max_cpus = 4;
}
-machine_init(calxeda_machines_init);
+DEFINE_MACHINE("midway", midway_machine_init)
diff --git a/hw/arm/imx25_pdk.c b/hw/arm/imx25_pdk.c
index c34667f..4250114 100644
--- a/hw/arm/imx25_pdk.c
+++ b/hw/arm/imx25_pdk.c
@@ -145,15 +145,10 @@ static void imx25_pdk_init(MachineState *machine)
}
}
-static QEMUMachine imx25_pdk_machine = {
- .name = "imx25_pdk",
- .desc = "ARM i.MX25 PDK board (ARM926)",
- .init = imx25_pdk_init,
-};
-
-static void imx25_pdk_machine_init(void)
+static void imx25_pdk_machine_init(MachineClass *mc)
{
- qemu_register_machine(&imx25_pdk_machine);
+ mc->desc = "ARM i.MX25 PDK board (ARM926)";
+ mc->init = imx25_pdk_init;
}
-machine_init(imx25_pdk_machine_init)
+DEFINE_MACHINE("imx25_pdk", imx25_pdk_machine_init)
diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c
index d87d36f..421bde9 100644
--- a/hw/arm/integratorcp.c
+++ b/hw/arm/integratorcp.c
@@ -619,18 +619,13 @@ static void integratorcp_init(MachineState *machine)
arm_load_kernel(cpu, &integrator_binfo);
}
-static QEMUMachine integratorcp_machine = {
- .name = "integratorcp",
- .desc = "ARM Integrator/CP (ARM926EJ-S)",
- .init = integratorcp_init,
-};
-
-static void integratorcp_machine_init(void)
+static void integratorcp_machine_init(MachineClass *mc)
{
- qemu_register_machine(&integratorcp_machine);
+ mc->desc = "ARM Integrator/CP (ARM926EJ-S)";
+ mc->init = integratorcp_init;
}
-machine_init(integratorcp_machine_init);
+DEFINE_MACHINE("integratorcp", integratorcp_machine_init)
static Property core_properties[] = {
DEFINE_PROP_UINT32("memsz", IntegratorCMState, memsz, 0),
diff --git a/hw/arm/kzm.c b/hw/arm/kzm.c
index 241b1d7..eff6f46 100644
--- a/hw/arm/kzm.c
+++ b/hw/arm/kzm.c
@@ -139,15 +139,10 @@ static void kzm_init(MachineState *machine)
}
}
-static QEMUMachine kzm_machine = {
- .name = "kzm",
- .desc = "ARM KZM Emulation Baseboard (ARM1136)",
- .init = kzm_init,
-};
-
-static void kzm_machine_init(void)
+static void kzm_machine_init(MachineClass *mc)
{
- qemu_register_machine(&kzm_machine);
+ mc->desc = "ARM KZM Emulation Baseboard (ARM1136)";
+ mc->init = kzm_init;
}
-machine_init(kzm_machine_init)
+DEFINE_MACHINE("kzm", kzm_machine_init)
diff --git a/hw/arm/mainstone.c b/hw/arm/mainstone.c
index 03e9fa5..e434cb6 100644
--- a/hw/arm/mainstone.c
+++ b/hw/arm/mainstone.c
@@ -188,15 +188,10 @@ static void mainstone_init(MachineState *machine)
mainstone_common_init(get_system_memory(), machine, mainstone, 0x196);
}
-static QEMUMachine mainstone2_machine = {
- .name = "mainstone",
- .desc = "Mainstone II (PXA27x)",
- .init = mainstone_init,
-};
-
-static void mainstone_machine_init(void)
+static void mainstone2_machine_init(MachineClass *mc)
{
- qemu_register_machine(&mainstone2_machine);
+ mc->desc = "Mainstone II (PXA27x)";
+ mc->init = mainstone_init;
}
-machine_init(mainstone_machine_init);
+DEFINE_MACHINE("mainstone", mainstone2_machine_init)
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
index 5cff3d41..b534bb9 100644
--- a/hw/arm/musicpal.c
+++ b/hw/arm/musicpal.c
@@ -1709,18 +1709,13 @@ static void musicpal_init(MachineState *machine)
arm_load_kernel(cpu, &musicpal_binfo);
}
-static QEMUMachine musicpal_machine = {
- .name = "musicpal",
- .desc = "Marvell 88w8618 / MusicPal (ARM926EJ-S)",
- .init = musicpal_init,
-};
-
-static void musicpal_machine_init(void)
+static void musicpal_machine_init(MachineClass *mc)
{
- qemu_register_machine(&musicpal_machine);
+ mc->desc = "Marvell 88w8618 / MusicPal (ARM926EJ-S)";
+ mc->init = musicpal_init;
}
-machine_init(musicpal_machine_init);
+DEFINE_MACHINE("musicpal", musicpal_machine_init)
static void mv88w8618_wlan_class_init(ObjectClass *klass, void *data)
{
diff --git a/hw/arm/netduino2.c b/hw/arm/netduino2.c
index 8f26780..a3b9e82 100644
--- a/hw/arm/netduino2.c
+++ b/hw/arm/netduino2.c
@@ -43,15 +43,10 @@ static void netduino2_init(MachineState *machine)
}
}
-static QEMUMachine netduino2_machine = {
- .name = "netduino2",
- .desc = "Netduino 2 Machine",
- .init = netduino2_init,
-};
-
-static void netduino2_machine_init(void)
+static void netduino2_machine_init(MachineClass *mc)
{
- qemu_register_machine(&netduino2_machine);
+ mc->desc = "Netduino 2 Machine";
+ mc->init = netduino2_init;
}
-machine_init(netduino2_machine_init);
+DEFINE_MACHINE("netduino2", netduino2_machine_init)
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
index a659e85..af28449 100644
--- a/hw/arm/nseries.c
+++ b/hw/arm/nseries.c
@@ -1413,24 +1413,20 @@ static void n810_init(MachineState *machine)
n8x0_init(machine, &n810_binfo, 810);
}
-static QEMUMachine n800_machine = {
- .name = "n800",
- .desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)",
- .init = n800_init,
- .default_boot_order = "",
-};
+static void n800_machine_init(MachineClass *mc)
+{
+ mc->desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)";
+ mc->init = n800_init;
+ mc->default_boot_order = "";
+}
-static QEMUMachine n810_machine = {
- .name = "n810",
- .desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)",
- .init = n810_init,
- .default_boot_order = "",
-};
+DEFINE_MACHINE("n800", n800_machine_init)
-static void nseries_machine_init(void)
+static void n810_machine_init(MachineClass *mc)
{
- qemu_register_machine(&n800_machine);
- qemu_register_machine(&n810_machine);
+ mc->desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)";
+ mc->init = n810_init;
+ mc->default_boot_order = "";
}
-machine_init(nseries_machine_init);
+DEFINE_MACHINE("n810", n810_machine_init)
diff --git a/hw/arm/omap_sx1.c b/hw/arm/omap_sx1.c
index 4de88f3..68924fc 100644
--- a/hw/arm/omap_sx1.c
+++ b/hw/arm/omap_sx1.c
@@ -217,22 +217,18 @@ static void sx1_init_v2(MachineState *machine)
sx1_init(machine, 2);
}
-static QEMUMachine sx1_machine_v2 = {
- .name = "sx1",
- .desc = "Siemens SX1 (OMAP310) V2",
- .init = sx1_init_v2,
-};
+static void sx1_machine_v2_machine_init(MachineClass *mc)
+{
+ mc->desc = "Siemens SX1 (OMAP310) V2";
+ mc->init = sx1_init_v2;
+}
-static QEMUMachine sx1_machine_v1 = {
- .name = "sx1-v1",
- .desc = "Siemens SX1 (OMAP310) V1",
- .init = sx1_init_v1,
-};
+DEFINE_MACHINE("sx1", sx1_machine_v2_machine_init)
-static void sx1_machine_init(void)
+static void sx1_machine_v1_machine_init(MachineClass *mc)
{
- qemu_register_machine(&sx1_machine_v2);
- qemu_register_machine(&sx1_machine_v1);
+ mc->desc = "Siemens SX1 (OMAP310) V1";
+ mc->init = sx1_init_v1;
}
-machine_init(sx1_machine_init);
+DEFINE_MACHINE("sx1-v1", sx1_machine_v1_machine_init)
diff --git a/hw/arm/palm.c b/hw/arm/palm.c
index 1f84dbf..82ec99d 100644
--- a/hw/arm/palm.c
+++ b/hw/arm/palm.c
@@ -269,15 +269,10 @@ static void palmte_init(MachineState *machine)
arm_load_kernel(mpu->cpu, &palmte_binfo);
}
-static QEMUMachine palmte_machine = {
- .name = "cheetah",
- .desc = "Palm Tungsten|E aka. Cheetah PDA (OMAP310)",
- .init = palmte_init,
-};
-
-static void palmte_machine_init(void)
+static void palmte_machine_init(MachineClass *mc)
{
- qemu_register_machine(&palmte_machine);
+ mc->desc = "Palm Tungsten|E aka. Cheetah PDA (OMAP310)";
+ mc->init = palmte_init;
}
-machine_init(palmte_machine_init);
+DEFINE_MACHINE("cheetah", palmte_machine_init)
diff --git a/hw/arm/realview.c b/hw/arm/realview.c
index 23779ec..6c83817 100644
--- a/hw/arm/realview.c
+++ b/hw/arm/realview.c
@@ -399,41 +399,39 @@ static void realview_pbx_a9_init(MachineState *machine)
realview_init(machine, BOARD_PBX_A9);
}
-static QEMUMachine realview_eb_machine = {
- .name = "realview-eb",
- .desc = "ARM RealView Emulation Baseboard (ARM926EJ-S)",
- .init = realview_eb_init,
- .block_default_type = IF_SCSI,
-};
+static void realview_eb_machine_init(MachineClass *mc)
+{
+ mc->desc = "ARM RealView Emulation Baseboard (ARM926EJ-S)";
+ mc->init = realview_eb_init;
+ mc->block_default_type = IF_SCSI;
+}
-static QEMUMachine realview_eb_mpcore_machine = {
- .name = "realview-eb-mpcore",
- .desc = "ARM RealView Emulation Baseboard (ARM11MPCore)",
- .init = realview_eb_mpcore_init,
- .block_default_type = IF_SCSI,
- .max_cpus = 4,
-};
+DEFINE_MACHINE("realview-eb", realview_eb_machine_init)
-static QEMUMachine realview_pb_a8_machine = {
- .name = "realview-pb-a8",
- .desc = "ARM RealView Platform Baseboard for Cortex-A8",
- .init = realview_pb_a8_init,
-};
+static void realview_eb_mpcore_machine_init(MachineClass *mc)
+{
+ mc->desc = "ARM RealView Emulation Baseboard (ARM11MPCore)";
+ mc->init = realview_eb_mpcore_init;
+ mc->block_default_type = IF_SCSI;
+ mc->max_cpus = 4;
+}
-static QEMUMachine realview_pbx_a9_machine = {
- .name = "realview-pbx-a9",
- .desc = "ARM RealView Platform Baseboard Explore for Cortex-A9",
- .init = realview_pbx_a9_init,
- .block_default_type = IF_SCSI,
- .max_cpus = 4,
-};
+DEFINE_MACHINE("realview-eb-mpcore", realview_eb_mpcore_machine_init)
+
+static void realview_pb_a8_machine_init(MachineClass *mc)
+{
+ mc->desc = "ARM RealView Platform Baseboard for Cortex-A8";
+ mc->init = realview_pb_a8_init;
+}
+
+DEFINE_MACHINE("realview-pb-a8", realview_pb_a8_machine_init)
-static void realview_machine_init(void)
+static void realview_pbx_a9_machine_init(MachineClass *mc)
{
- qemu_register_machine(&realview_eb_machine);
- qemu_register_machine(&realview_eb_mpcore_machine);
- qemu_register_machine(&realview_pb_a8_machine);
- qemu_register_machine(&realview_pbx_a9_machine);
+ mc->desc = "ARM RealView Platform Baseboard Explore for Cortex-A9";
+ mc->init = realview_pbx_a9_init;
+ mc->block_default_type = IF_SCSI;
+ mc->max_cpus = 4;
}
-machine_init(realview_machine_init);
+DEFINE_MACHINE("realview-pbx-a9", realview_pbx_a9_machine_init)
diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c
index 6c2cbcb..0f59489 100644
--- a/hw/arm/spitz.c
+++ b/hw/arm/spitz.c
@@ -972,39 +972,37 @@ static void terrier_init(MachineState *machine)
spitz_common_init(machine, terrier, 0x33f);
}
-static QEMUMachine akitapda_machine = {
- .name = "akita",
- .desc = "Akita PDA (PXA270)",
- .init = akita_init,
-};
+static void akitapda_machine_init(MachineClass *mc)
+{
+ mc->desc = "Akita PDA (PXA270)";
+ mc->init = akita_init;
+}
-static QEMUMachine spitzpda_machine = {
- .name = "spitz",
- .desc = "Spitz PDA (PXA270)",
- .init = spitz_init,
-};
+DEFINE_MACHINE("akita", akitapda_machine_init)
-static QEMUMachine borzoipda_machine = {
- .name = "borzoi",
- .desc = "Borzoi PDA (PXA270)",
- .init = borzoi_init,
-};
+static void spitzpda_machine_init(MachineClass *mc)
+{
+ mc->desc = "Spitz PDA (PXA270)";
+ mc->init = spitz_init;
+}
-static QEMUMachine terrierpda_machine = {
- .name = "terrier",
- .desc = "Terrier PDA (PXA270)",
- .init = terrier_init,
-};
+DEFINE_MACHINE("spitz", spitzpda_machine_init)
+
+static void borzoipda_machine_init(MachineClass *mc)
+{
+ mc->desc = "Borzoi PDA (PXA270)";
+ mc->init = borzoi_init;
+}
+
+DEFINE_MACHINE("borzoi", borzoipda_machine_init)
-static void spitz_machine_init(void)
+static void terrierpda_machine_init(MachineClass *mc)
{
- qemu_register_machine(&akitapda_machine);
- qemu_register_machine(&spitzpda_machine);
- qemu_register_machine(&borzoipda_machine);
- qemu_register_machine(&terrierpda_machine);
+ mc->desc = "Terrier PDA (PXA270)";
+ mc->init = terrier_init;
}
-machine_init(spitz_machine_init);
+DEFINE_MACHINE("terrier", terrierpda_machine_init)
static bool is_version_0(void *opaque, int version_id)
{
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
index a76f051..a97d9e3 100644
--- a/hw/arm/stellaris.c
+++ b/hw/arm/stellaris.c
@@ -1366,25 +1366,21 @@ static void lm3s6965evb_init(MachineState *machine)
stellaris_init(kernel_filename, cpu_model, &stellaris_boards[1]);
}
-static QEMUMachine lm3s811evb_machine = {
- .name = "lm3s811evb",
- .desc = "Stellaris LM3S811EVB",
- .init = lm3s811evb_init,
-};
+static void lm3s811evb_machine_init(MachineClass *mc)
+{
+ mc->desc = "Stellaris LM3S811EVB";
+ mc->init = lm3s811evb_init;
+}
-static QEMUMachine lm3s6965evb_machine = {
- .name = "lm3s6965evb",
- .desc = "Stellaris LM3S6965EVB",
- .init = lm3s6965evb_init,
-};
+DEFINE_MACHINE("lm3s811evb", lm3s811evb_machine_init)
-static void stellaris_machine_init(void)
+static void lm3s6965evb_machine_init(MachineClass *mc)
{
- qemu_register_machine(&lm3s811evb_machine);
- qemu_register_machine(&lm3s6965evb_machine);
+ mc->desc = "Stellaris LM3S6965EVB";
+ mc->init = lm3s6965evb_init;
}
-machine_init(stellaris_machine_init);
+DEFINE_MACHINE("lm3s6965evb", lm3s6965evb_machine_init)
static void stellaris_i2c_class_init(ObjectClass *klass, void *data)
{
diff --git a/hw/arm/tosa.c b/hw/arm/tosa.c
index 2c216e9..51d0b89 100644
--- a/hw/arm/tosa.c
+++ b/hw/arm/tosa.c
@@ -252,18 +252,13 @@ static void tosa_init(MachineState *machine)
sl_bootparam_write(SL_PXA_PARAM_BASE);
}
-static QEMUMachine tosapda_machine = {
- .name = "tosa",
- .desc = "Tosa PDA (PXA255)",
- .init = tosa_init,
-};
-
-static void tosapda_machine_init(void)
+static void tosapda_machine_init(MachineClass *mc)
{
- qemu_register_machine(&tosapda_machine);
+ mc->desc = "Tosa PDA (PXA255)";
+ mc->init = tosa_init;
}
-machine_init(tosapda_machine_init);
+DEFINE_MACHINE("tosa", tosapda_machine_init)
static void tosa_dac_class_init(ObjectClass *klass, void *data)
{
diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c
index 6c69f4e..54281f4 100644
--- a/hw/arm/versatilepb.c
+++ b/hw/arm/versatilepb.c
@@ -391,27 +391,23 @@ static void vab_init(MachineState *machine)
versatile_init(machine, 0x25e);
}
-static QEMUMachine versatilepb_machine = {
- .name = "versatilepb",
- .desc = "ARM Versatile/PB (ARM926EJ-S)",
- .init = vpb_init,
- .block_default_type = IF_SCSI,
-};
+static void versatilepb_machine_init(MachineClass *mc)
+{
+ mc->desc = "ARM Versatile/PB (ARM926EJ-S)";
+ mc->init = vpb_init;
+ mc->block_default_type = IF_SCSI;
+}
-static QEMUMachine versatileab_machine = {
- .name = "versatileab",
- .desc = "ARM Versatile/AB (ARM926EJ-S)",
- .init = vab_init,
- .block_default_type = IF_SCSI,
-};
+DEFINE_MACHINE("versatilepb", versatilepb_machine_init)
-static void versatile_machine_init(void)
+static void versatileab_machine_init(MachineClass *mc)
{
- qemu_register_machine(&versatilepb_machine);
- qemu_register_machine(&versatileab_machine);
+ mc->desc = "ARM Versatile/AB (ARM926EJ-S)";
+ mc->init = vab_init;
+ mc->block_default_type = IF_SCSI;
}
-machine_init(versatile_machine_init);
+DEFINE_MACHINE("versatileab", versatileab_machine_init)
static void vpb_sic_class_init(ObjectClass *klass, void *data)
{
diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c
index 37dc0b0..9f89483 100644
--- a/hw/arm/xilinx_zynq.c
+++ b/hw/arm/xilinx_zynq.c
@@ -255,18 +255,13 @@ static void zynq_init(MachineState *machine)
arm_load_kernel(ARM_CPU(first_cpu), &zynq_binfo);
}
-static QEMUMachine zynq_machine = {
- .name = "xilinx-zynq-a9",
- .desc = "Xilinx Zynq Platform Baseboard for Cortex-A9",
- .init = zynq_init,
- .block_default_type = IF_SCSI,
- .max_cpus = 1,
- .no_sdcard = 1,
-};
-
-static void zynq_machine_init(void)
+static void zynq_machine_init(MachineClass *mc)
{
- qemu_register_machine(&zynq_machine);
+ mc->desc = "Xilinx Zynq Platform Baseboard for Cortex-A9";
+ mc->init = zynq_init;
+ mc->block_default_type = IF_SCSI;
+ mc->max_cpus = 1;
+ mc->no_sdcard = 1;
}
-machine_init(zynq_machine_init);
+DEFINE_MACHINE("xilinx-zynq-a9", zynq_machine_init)
diff --git a/hw/arm/xlnx-ep108.c b/hw/arm/xlnx-ep108.c
index f94da86..2899698 100644
--- a/hw/arm/xlnx-ep108.c
+++ b/hw/arm/xlnx-ep108.c
@@ -68,15 +68,10 @@ static void xlnx_ep108_init(MachineState *machine)
arm_load_kernel(s->soc.boot_cpu_ptr, &xlnx_ep108_binfo);
}
-static QEMUMachine xlnx_ep108_machine = {
- .name = "xlnx-ep108",
- .desc = "Xilinx ZynqMP EP108 board",
- .init = xlnx_ep108_init,
-};
-
-static void xlnx_ep108_machine_init(void)
+static void xlnx_ep108_machine_init(MachineClass *mc)
{
- qemu_register_machine(&xlnx_ep108_machine);
+ mc->desc = "Xilinx ZynqMP EP108 board";
+ mc->init = xlnx_ep108_init;
}
-machine_init(xlnx_ep108_machine_init);
+DEFINE_MACHINE("xlnx-ep108", xlnx_ep108_machine_init)
diff --git a/hw/arm/z2.c b/hw/arm/z2.c
index 1735547..b44eb76 100644
--- a/hw/arm/z2.c
+++ b/hw/arm/z2.c
@@ -372,15 +372,10 @@ static void z2_init(MachineState *machine)
arm_load_kernel(mpu->cpu, &z2_binfo);
}
-static QEMUMachine z2_machine = {
- .name = "z2",
- .desc = "Zipit Z2 (PXA27x)",
- .init = z2_init,
-};
-
-static void z2_machine_init(void)
+static void z2_machine_init(MachineClass *mc)
{
- qemu_register_machine(&z2_machine);
+ mc->desc = "Zipit Z2 (PXA27x)";
+ mc->init = z2_init;
}
-machine_init(z2_machine_init);
+DEFINE_MACHINE("z2", z2_machine_init)
diff --git a/hw/core/null-machine.c b/hw/core/null-machine.c
index 1ec7c3b..f36fbf2 100644
--- a/hw/core/null-machine.c
+++ b/hw/core/null-machine.c
@@ -19,17 +19,11 @@ static void machine_none_init(MachineState *machine)
{
}
-static QEMUMachine machine_none = {
- .name = "none",
- .desc = "empty machine",
- .init = machine_none_init,
- .max_cpus = 0,
-};
-
-static void register_machines(void)
+static void machine_none_machine_init(MachineClass *mc)
{
- qemu_register_machine(&machine_none);
+ mc->desc = "empty machine";
+ mc->init = machine_none_init;
+ mc->max_cpus = 0;
}
-machine_init(register_machines);
-
+DEFINE_MACHINE("none", machine_none_machine_init)
diff --git a/hw/cris/axis_dev88.c b/hw/cris/axis_dev88.c
index d948449..de880d1 100644
--- a/hw/cris/axis_dev88.c
+++ b/hw/cris/axis_dev88.c
@@ -351,16 +351,11 @@ void axisdev88_init(MachineState *machine)
}
}
-static QEMUMachine axisdev88_machine = {
- .name = "axis-dev88",
- .desc = "AXIS devboard 88",
- .init = axisdev88_init,
- .is_default = 1,
-};
-
-static void axisdev88_machine_init(void)
+static void axisdev88_machine_init(MachineClass *mc)
{
- qemu_register_machine(&axisdev88_machine);
+ mc->desc = "AXIS devboard 88";
+ mc->init = axisdev88_init;
+ mc->is_default = 1;
}
-machine_init(axisdev88_machine_init);
+DEFINE_MACHINE("axis-dev88", axisdev88_machine_init)
diff --git a/hw/lm32/lm32_boards.c b/hw/lm32/lm32_boards.c
index 70f48d3..04d2066 100644
--- a/hw/lm32/lm32_boards.c
+++ b/hw/lm32/lm32_boards.c
@@ -292,24 +292,20 @@ static void lm32_uclinux_init(MachineState *machine)
qemu_register_reset(main_cpu_reset, reset_info);
}
-static QEMUMachine lm32_evr_machine = {
- .name = "lm32-evr",
- .desc = "LatticeMico32 EVR32 eval system",
- .init = lm32_evr_init,
- .is_default = 1,
-};
-
-static QEMUMachine lm32_uclinux_machine = {
- .name = "lm32-uclinux",
- .desc = "lm32 platform for uClinux and u-boot by Theobroma Systems",
- .init = lm32_uclinux_init,
- .is_default = 0,
-};
-
-static void lm32_machine_init(void)
+static void lm32_evr_machine_init(MachineClass *mc)
{
- qemu_register_machine(&lm32_uclinux_machine);
- qemu_register_machine(&lm32_evr_machine);
+ mc->desc = "LatticeMico32 EVR32 eval system";
+ mc->init = lm32_evr_init;
+ mc->is_default = 1;
}
-machine_init(lm32_machine_init);
+DEFINE_MACHINE("lm32-evr", lm32_evr_machine_init)
+
+static void lm32_uclinux_machine_init(MachineClass *mc)
+{
+ mc->desc = "lm32 platform for uClinux and u-boot by Theobroma Systems";
+ mc->init = lm32_uclinux_init;
+ mc->is_default = 0;
+}
+
+DEFINE_MACHINE("lm32-uclinux", lm32_uclinux_machine_init)
diff --git a/hw/lm32/milkymist.c b/hw/lm32/milkymist.c
index e755f5b..cb30850 100644
--- a/hw/lm32/milkymist.c
+++ b/hw/lm32/milkymist.c
@@ -209,16 +209,11 @@ milkymist_init(MachineState *machine)
qemu_register_reset(main_cpu_reset, reset_info);
}
-static QEMUMachine milkymist_machine = {
- .name = "milkymist",
- .desc = "Milkymist One",
- .init = milkymist_init,
- .is_default = 0,
-};
-
-static void milkymist_machine_init(void)
+static void milkymist_machine_init(MachineClass *mc)
{
- qemu_register_machine(&milkymist_machine);
+ mc->desc = "Milkymist One";
+ mc->init = milkymist_init;
+ mc->is_default = 0;
}
-machine_init(milkymist_machine_init);
+DEFINE_MACHINE("milkymist", milkymist_machine_init)
diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c
index b18dc7f..aa49cd5 100644
--- a/hw/m68k/an5206.c
+++ b/hw/m68k/an5206.c
@@ -89,15 +89,10 @@ static void an5206_init(MachineState *machine)
env->pc = entry;
}
-static QEMUMachine an5206_machine = {
- .name = "an5206",
- .desc = "Arnewsh 5206",
- .init = an5206_init,
-};
-
-static void an5206_machine_init(void)
+static void an5206_machine_init(MachineClass *mc)
{
- qemu_register_machine(&an5206_machine);
+ mc->desc = "Arnewsh 5206";
+ mc->init = an5206_init;
}
-machine_init(an5206_machine_init);
+DEFINE_MACHINE("an5206", an5206_machine_init)
diff --git a/hw/m68k/dummy_m68k.c b/hw/m68k/dummy_m68k.c
index 5b77d93..d4f2073 100644
--- a/hw/m68k/dummy_m68k.c
+++ b/hw/m68k/dummy_m68k.c
@@ -72,15 +72,10 @@ static void dummy_m68k_init(MachineState *machine)
env->pc = entry;
}
-static QEMUMachine dummy_m68k_machine = {
- .name = "dummy",
- .desc = "Dummy board",
- .init = dummy_m68k_init,
-};
-
-static void dummy_m68k_machine_init(void)
+static void dummy_m68k_machine_init(MachineClass *mc)
{
- qemu_register_machine(&dummy_m68k_machine);
+ mc->desc = "Dummy board";
+ mc->init = dummy_m68k_init;
}
-machine_init(dummy_m68k_machine_init);
+DEFINE_MACHINE("dummy", dummy_m68k_machine_init)
diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c
index c38ffb8..c3365eb 100644
--- a/hw/m68k/mcf5208.c
+++ b/hw/m68k/mcf5208.c
@@ -294,16 +294,11 @@ static void mcf5208evb_init(MachineState *machine)
env->pc = entry;
}
-static QEMUMachine mcf5208evb_machine = {
- .name = "mcf5208evb",
- .desc = "MCF5206EVB",
- .init = mcf5208evb_init,
- .is_default = 1,
-};
-
-static void mcf5208evb_machine_init(void)
+static void mcf5208evb_machine_init(MachineClass *mc)
{
- qemu_register_machine(&mcf5208evb_machine);
+ mc->desc = "MCF5206EVB";
+ mc->init = mcf5208evb_init;
+ mc->is_default = 1;
}
-machine_init(mcf5208evb_machine_init);
+DEFINE_MACHINE("mcf5208evb", mcf5208evb_machine_init)
diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c
index d75b053..462060f 100644
--- a/hw/microblaze/petalogix_ml605_mmu.c
+++ b/hw/microblaze/petalogix_ml605_mmu.c
@@ -206,16 +206,11 @@ petalogix_ml605_init(MachineState *machine)
}
-static QEMUMachine petalogix_ml605_machine = {
- .name = "petalogix-ml605",
- .desc = "PetaLogix linux refdesign for xilinx ml605 little endian",
- .init = petalogix_ml605_init,
- .is_default = 0,
-};
-
-static void petalogix_ml605_machine_init(void)
+static void petalogix_ml605_machine_init(MachineClass *mc)
{
- qemu_register_machine(&petalogix_ml605_machine);
+ mc->desc = "PetaLogix linux refdesign for xilinx ml605 little endian";
+ mc->init = petalogix_ml605_init;
+ mc->is_default = 0;
}
-machine_init(petalogix_ml605_machine_init);
+DEFINE_MACHINE("petalogix-ml605", petalogix_ml605_machine_init)
diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/microblaze/petalogix_s3adsp1800_mmu.c
index 701b435..3381156 100644
--- a/hw/microblaze/petalogix_s3adsp1800_mmu.c
+++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c
@@ -124,16 +124,11 @@ petalogix_s3adsp1800_init(MachineState *machine)
NULL);
}
-static QEMUMachine petalogix_s3adsp1800_machine = {
- .name = "petalogix-s3adsp1800",
- .desc = "PetaLogix linux refdesign for xilinx Spartan 3ADSP1800",
- .init = petalogix_s3adsp1800_init,
- .is_default = 1,
-};
-
-static void petalogix_s3adsp1800_machine_init(void)
+static void petalogix_s3adsp1800_machine_init(MachineClass *mc)
{
- qemu_register_machine(&petalogix_s3adsp1800_machine);
+ mc->desc = "PetaLogix linux refdesign for xilinx Spartan 3ADSP1800";
+ mc->init = petalogix_s3adsp1800_init;
+ mc->is_default = 1;
}
-machine_init(petalogix_s3adsp1800_machine_init);
+DEFINE_MACHINE("petalogix-s3adsp1800", petalogix_s3adsp1800_machine_init)
diff --git a/hw/mips/mips_fulong2e.c b/hw/mips/mips_fulong2e.c
index b8a11e4..e44521f 100644
--- a/hw/mips/mips_fulong2e.c
+++ b/hw/mips/mips_fulong2e.c
@@ -381,15 +381,10 @@ static void mips_fulong2e_init(MachineState *machine)
network_init(pci_bus);
}
-static QEMUMachine mips_fulong2e_machine = {
- .name = "fulong2e",
- .desc = "Fulong 2e mini pc",
- .init = mips_fulong2e_init,
-};
-
-static void mips_fulong2e_machine_init(void)
+static void mips_fulong2e_machine_init(MachineClass *mc)
{
- qemu_register_machine(&mips_fulong2e_machine);
+ mc->desc = "Fulong 2e mini pc";
+ mc->init = mips_fulong2e_init;
}
-machine_init(mips_fulong2e_machine_init);
+DEFINE_MACHINE("fulong2e", mips_fulong2e_machine_init)
diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c
index f944c4c..d3627ba 100644
--- a/hw/mips/mips_jazz.c
+++ b/hw/mips/mips_jazz.c
@@ -349,24 +349,20 @@ void mips_pica61_init(MachineState *machine)
mips_jazz_init(machine, JAZZ_PICA61);
}
-static QEMUMachine mips_magnum_machine = {
- .name = "magnum",
- .desc = "MIPS Magnum",
- .init = mips_magnum_init,
- .block_default_type = IF_SCSI,
-};
+static void mips_magnum_machine_init(MachineClass *mc)
+{
+ mc->desc = "MIPS Magnum";
+ mc->init = mips_magnum_init;
+ mc->block_default_type = IF_SCSI;
+}
-static QEMUMachine mips_pica61_machine = {
- .name = "pica61",
- .desc = "Acer Pica 61",
- .init = mips_pica61_init,
- .block_default_type = IF_SCSI,
-};
+DEFINE_MACHINE("magnum", mips_magnum_machine_init)
-static void mips_jazz_machine_init(void)
+static void mips_pica61_machine_init(MachineClass *mc)
{
- qemu_register_machine(&mips_magnum_machine);
- qemu_register_machine(&mips_pica61_machine);
+ mc->desc = "Acer Pica 61";
+ mc->init = mips_pica61_init;
+ mc->block_default_type = IF_SCSI;
}
-machine_init(mips_jazz_machine_init);
+DEFINE_MACHINE("pica61", mips_pica61_machine_init)
diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
index 1004e37..bb864fe 100644
--- a/hw/mips/mips_malta.c
+++ b/hw/mips/mips_malta.c
@@ -1205,23 +1205,19 @@ static const TypeInfo mips_malta_device = {
.class_init = mips_malta_class_init,
};
-static QEMUMachine mips_malta_machine = {
- .name = "malta",
- .desc = "MIPS Malta Core LV",
- .init = mips_malta_init,
- .max_cpus = 16,
- .is_default = 1,
-};
-
-static void mips_malta_register_types(void)
+static void mips_malta_machine_init(MachineClass *mc)
{
- type_register_static(&mips_malta_device);
+ mc->desc = "MIPS Malta Core LV";
+ mc->init = mips_malta_init;
+ mc->max_cpus = 16;
+ mc->is_default = 1;
}
-static void mips_malta_machine_init(void)
+DEFINE_MACHINE("malta", mips_malta_machine_init)
+
+static void mips_malta_register_types(void)
{
- qemu_register_machine(&mips_malta_machine);
+ type_register_static(&mips_malta_device);
}
type_init(mips_malta_register_types)
-machine_init(mips_malta_machine_init);
diff --git a/hw/mips/mips_mipssim.c b/hw/mips/mips_mipssim.c
index 063151f..e651312 100644
--- a/hw/mips/mips_mipssim.c
+++ b/hw/mips/mips_mipssim.c
@@ -231,15 +231,10 @@ mips_mipssim_init(MachineState *machine)
mipsnet_init(0x4200, env->irq[2], &nd_table[0]);
}
-static QEMUMachine mips_mipssim_machine = {
- .name = "mipssim",
- .desc = "MIPS MIPSsim platform",
- .init = mips_mipssim_init,
-};
-
-static void mips_mipssim_machine_init(void)
+static void mips_mipssim_machine_init(MachineClass *mc)
{
- qemu_register_machine(&mips_mipssim_machine);
+ mc->desc = "MIPS MIPSsim platform";
+ mc->init = mips_mipssim_init;
}
-machine_init(mips_mipssim_machine_init);
+DEFINE_MACHINE("mipssim", mips_mipssim_machine_init)
diff --git a/hw/mips/mips_r4k.c b/hw/mips/mips_r4k.c
index c961227..97628fc 100644
--- a/hw/mips/mips_r4k.c
+++ b/hw/mips/mips_r4k.c
@@ -298,15 +298,10 @@ void mips_r4k_init(MachineState *machine)
isa_create_simple(isa_bus, "i8042");
}
-static QEMUMachine mips_machine = {
- .name = "mips",
- .desc = "mips r4k platform",
- .init = mips_r4k_init,
-};
-
-static void mips_machine_init(void)
+static void mips_machine_init(MachineClass *mc)
{
- qemu_register_machine(&mips_machine);
+ mc->desc = "mips r4k platform";
+ mc->init = mips_r4k_init;
}
-machine_init(mips_machine_init);
+DEFINE_MACHINE("mips", mips_machine_init)
diff --git a/hw/moxie/moxiesim.c b/hw/moxie/moxiesim.c
index 5e69e11..a3d1a1b 100644
--- a/hw/moxie/moxiesim.c
+++ b/hw/moxie/moxiesim.c
@@ -146,16 +146,11 @@ static void moxiesim_init(MachineState *machine)
}
}
-static QEMUMachine moxiesim_machine = {
- .name = "moxiesim",
- .desc = "Moxie simulator platform",
- .init = moxiesim_init,
- .is_default = 1,
-};
-
-static void moxie_machine_init(void)
+static void moxiesim_machine_init(MachineClass *mc)
{
- qemu_register_machine(&moxiesim_machine);
+ mc->desc = "Moxie simulator platform";
+ mc->init = moxiesim_init;
+ mc->is_default = 1;
}
-machine_init(moxie_machine_init)
+DEFINE_MACHINE("moxiesim", moxiesim_machine_init)
diff --git a/hw/openrisc/openrisc_sim.c b/hw/openrisc/openrisc_sim.c
index 09285bd..5f26785 100644
--- a/hw/openrisc/openrisc_sim.c
+++ b/hw/openrisc/openrisc_sim.c
@@ -132,17 +132,12 @@ static void openrisc_sim_init(MachineState *machine)
cpu_openrisc_load_kernel(ram_size, kernel_filename, cpu);
}
-static QEMUMachine openrisc_sim_machine = {
- .name = "or32-sim",
- .desc = "or32 simulation",
- .init = openrisc_sim_init,
- .max_cpus = 1,
- .is_default = 1,
-};
-
-static void openrisc_sim_machine_init(void)
+static void openrisc_sim_machine_init(MachineClass *mc)
{
- qemu_register_machine(&openrisc_sim_machine);
+ mc->desc = "or32 simulation";
+ mc->init = openrisc_sim_init;
+ mc->max_cpus = 1;
+ mc->is_default = 1;
}
-machine_init(openrisc_sim_machine_init);
+DEFINE_MACHINE("or32-sim", openrisc_sim_machine_init)
diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c
index 14b14ea..384b6e8 100644
--- a/hw/ppc/e500plat.c
+++ b/hw/ppc/e500plat.c
@@ -57,17 +57,12 @@ static void e500plat_init(MachineState *machine)
ppce500_init(machine, ¶ms);
}
-static QEMUMachine e500plat_machine = {
- .name = "ppce500",
- .desc = "generic paravirt e500 platform",
- .init = e500plat_init,
- .max_cpus = 32,
- .has_dynamic_sysbus = true,
-};
-
-static void e500plat_machine_init(void)
+static void e500plat_machine_init(MachineClass *mc)
{
- qemu_register_machine(&e500plat_machine);
+ mc->desc = "generic paravirt e500 platform";
+ mc->init = e500plat_init;
+ mc->max_cpus = 32;
+ mc->has_dynamic_sysbus = true;
}
-machine_init(e500plat_machine_init);
+DEFINE_MACHINE("ppce500", e500plat_machine_init)
diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c
index 4c5fe46..5cba2cb 100644
--- a/hw/ppc/mac_oldworld.c
+++ b/hw/ppc/mac_oldworld.c
@@ -357,22 +357,17 @@ static int heathrow_kvm_type(const char *arg)
return 2;
}
-static QEMUMachine heathrow_machine = {
- .name = "g3beige",
- .desc = "Heathrow based PowerMAC",
- .init = ppc_heathrow_init,
- .max_cpus = MAX_CPUS,
+static void heathrow_machine_init(MachineClass *mc)
+{
+ mc->desc = "Heathrow based PowerMAC";
+ mc->init = ppc_heathrow_init;
+ mc->max_cpus = MAX_CPUS;
#ifndef TARGET_PPC64
- .is_default = 1,
+ mc->is_default = 1;
#endif
/* TOFIX "cad" when Mac floppy is implemented */
- .default_boot_order = "cd",
- .kvm_type = heathrow_kvm_type,
-};
-
-static void heathrow_machine_init(void)
-{
- qemu_register_machine(&heathrow_machine);
+ mc->default_boot_order = "cd";
+ mc->kvm_type = heathrow_kvm_type;
}
-machine_init(heathrow_machine_init);
+DEFINE_MACHINE("g3beige", heathrow_machine_init)
diff --git a/hw/ppc/mpc8544ds.c b/hw/ppc/mpc8544ds.c
index 3a3b141..0afbd34 100644
--- a/hw/ppc/mpc8544ds.c
+++ b/hw/ppc/mpc8544ds.c
@@ -50,16 +50,11 @@ static void mpc8544ds_init(MachineState *machine)
}
-static QEMUMachine ppce500_machine = {
- .name = "mpc8544ds",
- .desc = "mpc8544ds",
- .init = mpc8544ds_init,
- .max_cpus = 15,
-};
-
-static void ppce500_machine_init(void)
+static void ppce500_machine_init(MachineClass *mc)
{
- qemu_register_machine(&ppce500_machine);
+ mc->desc = "mpc8544ds";
+ mc->init = mpc8544ds_init;
+ mc->max_cpus = 15;
}
-machine_init(ppce500_machine_init);
+DEFINE_MACHINE("mpc8544ds", ppce500_machine_init)
diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c
index 5389725..56980bf 100644
--- a/hw/ppc/ppc405_boards.c
+++ b/hw/ppc/ppc405_boards.c
@@ -369,11 +369,13 @@ static void ref405ep_init(MachineState *machine)
#endif
}
-static QEMUMachine ref405ep_machine = {
- .name = "ref405ep",
- .desc = "ref405ep",
- .init = ref405ep_init,
-};
+static void ref405ep_machine_init(MachineClass *mc)
+{
+ mc->desc = "ref405ep";
+ mc->init = ref405ep_init;
+}
+
+DEFINE_MACHINE("ref405ep", ref405ep_machine_init)
/*****************************************************************************/
/* AMCC Taihu evaluation board */
@@ -665,16 +667,10 @@ static void taihu_405ep_init(MachineState *machine)
#endif
}
-static QEMUMachine taihu_machine = {
- .name = "taihu",
- .desc = "taihu",
- .init = taihu_405ep_init,
-};
-
-static void ppc405_machine_init(void)
+static void taihu_machine_init(MachineClass *mc)
{
- qemu_register_machine(&ref405ep_machine);
- qemu_register_machine(&taihu_machine);
+ mc->desc = "taihu";
+ mc->init = taihu_405ep_init;
}
-machine_init(ppc405_machine_init);
+DEFINE_MACHINE("taihu", taihu_machine_init)
diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c
index 032fa80..4726832 100644
--- a/hw/ppc/ppc440_bamboo.c
+++ b/hw/ppc/ppc440_bamboo.c
@@ -293,15 +293,10 @@ static void bamboo_init(MachineState *machine)
kvmppc_init();
}
-static QEMUMachine bamboo_machine = {
- .name = "bamboo",
- .desc = "bamboo",
- .init = bamboo_init,
-};
-
-static void bamboo_machine_init(void)
+static void bamboo_machine_init(MachineClass *mc)
{
- qemu_register_machine(&bamboo_machine);
+ mc->desc = "bamboo";
+ mc->init = bamboo_init;
}
-machine_init(bamboo_machine_init);
+DEFINE_MACHINE("bamboo", bamboo_machine_init)
diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c
index 81f0838..9d6d70a 100644
--- a/hw/ppc/prep.c
+++ b/hw/ppc/prep.c
@@ -687,17 +687,12 @@ static void ppc_prep_init(MachineState *machine)
graphic_width, graphic_height, graphic_depth);
}
-static QEMUMachine prep_machine = {
- .name = "prep",
- .desc = "PowerPC PREP platform",
- .init = ppc_prep_init,
- .max_cpus = MAX_CPUS,
- .default_boot_order = "cad",
-};
-
-static void prep_machine_init(void)
+static void prep_machine_init(MachineClass *mc)
{
- qemu_register_machine(&prep_machine);
+ mc->desc = "PowerPC PREP platform";
+ mc->init = ppc_prep_init;
+ mc->max_cpus = MAX_CPUS;
+ mc->default_boot_order = "cad";
}
-machine_init(prep_machine_init);
+DEFINE_MACHINE("prep", prep_machine_init)
diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c
index de86f7c..457d762 100644
--- a/hw/ppc/virtex_ml507.c
+++ b/hw/ppc/virtex_ml507.c
@@ -297,15 +297,10 @@ static void virtex_init(MachineState *machine)
env->load_info = &boot_info;
}
-static QEMUMachine virtex_machine = {
- .name = "virtex-ml507",
- .desc = "Xilinx Virtex ML507 reference design",
- .init = virtex_init,
-};
-
-static void virtex_machine_init(void)
+static void virtex_machine_init(MachineClass *mc)
{
- qemu_register_machine(&virtex_machine);
+ mc->desc = "Xilinx Virtex ML507 reference design";
+ mc->init = virtex_init;
}
-machine_init(virtex_machine_init);
+DEFINE_MACHINE("virtex-ml507", virtex_machine_init)
diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c
index 481bd92..c1ff9a0 100644
--- a/hw/sh4/r2d.c
+++ b/hw/sh4/r2d.c
@@ -354,15 +354,10 @@ static void r2d_init(MachineState *machine)
SDRAM_BASE + BOOT_PARAMS_OFFSET);
}
-static QEMUMachine r2d_machine = {
- .name = "r2d",
- .desc = "r2d-plus board",
- .init = r2d_init,
-};
-
-static void r2d_machine_init(void)
+static void r2d_machine_init(MachineClass *mc)
{
- qemu_register_machine(&r2d_machine);
+ mc->desc = "r2d-plus board";
+ mc->init = r2d_init;
}
-machine_init(r2d_machine_init);
+DEFINE_MACHINE("r2d", r2d_machine_init)
diff --git a/hw/sh4/shix.c b/hw/sh4/shix.c
index 59bcc23..d508be9 100644
--- a/hw/sh4/shix.c
+++ b/hw/sh4/shix.c
@@ -87,16 +87,11 @@ static void shix_init(MachineState *machine)
tc58128_init(s, "shix_linux_nand.bin", NULL);
}
-static QEMUMachine shix_machine = {
- .name = "shix",
- .desc = "shix card",
- .init = shix_init,
- .is_default = 1,
-};
-
-static void shix_machine_init(void)
+static void shix_machine_init(MachineClass *mc)
{
- qemu_register_machine(&shix_machine);
+ mc->desc = "shix card";
+ mc->init = shix_init;
+ mc->is_default = 1;
}
-machine_init(shix_machine_init);
+DEFINE_MACHINE("shix", shix_machine_init)
diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c
index dd01842..ee73fea 100644
--- a/hw/sparc/leon3.c
+++ b/hw/sparc/leon3.c
@@ -216,15 +216,10 @@ static void leon3_generic_hw_init(MachineState *machine)
}
}
-static QEMUMachine leon3_generic_machine = {
- .name = "leon3_generic",
- .desc = "Leon-3 generic",
- .init = leon3_generic_hw_init,
-};
-
-static void leon3_machine_init(void)
+static void leon3_generic_machine_init(MachineClass *mc)
{
- qemu_register_machine(&leon3_generic_machine);
+ mc->desc = "Leon-3 generic";
+ mc->init = leon3_generic_hw_init;
}
-machine_init(leon3_machine_init);
+DEFINE_MACHINE("leon3_generic", leon3_generic_machine_init)
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index dfb04f9..092e250 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -1420,81 +1420,99 @@ static void sbook_init(MachineState *machine)
sun4m_hw_init(&sun4m_hwdefs[8], machine);
}
-static QEMUMachine ss5_machine = {
- .name = "SS-5",
- .desc = "Sun4m platform, SPARCstation 5",
- .init = ss5_init,
- .block_default_type = IF_SCSI,
- .is_default = 1,
- .default_boot_order = "c",
-};
+static void ss5_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4m platform, SPARCstation 5";
+ mc->init = ss5_init;
+ mc->block_default_type = IF_SCSI;
+ mc->is_default = 1;
+ mc->default_boot_order = "c";
+}
-static QEMUMachine ss10_machine = {
- .name = "SS-10",
- .desc = "Sun4m platform, SPARCstation 10",
- .init = ss10_init,
- .block_default_type = IF_SCSI,
- .max_cpus = 4,
- .default_boot_order = "c",
-};
+DEFINE_MACHINE("SS-5", ss5_machine_init)
-static QEMUMachine ss600mp_machine = {
- .name = "SS-600MP",
- .desc = "Sun4m platform, SPARCserver 600MP",
- .init = ss600mp_init,
- .block_default_type = IF_SCSI,
- .max_cpus = 4,
- .default_boot_order = "c",
-};
+static void ss10_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4m platform, SPARCstation 10";
+ mc->init = ss10_init;
+ mc->block_default_type = IF_SCSI;
+ mc->max_cpus = 4;
+ mc->default_boot_order = "c";
+}
-static QEMUMachine ss20_machine = {
- .name = "SS-20",
- .desc = "Sun4m platform, SPARCstation 20",
- .init = ss20_init,
- .block_default_type = IF_SCSI,
- .max_cpus = 4,
- .default_boot_order = "c",
-};
+DEFINE_MACHINE("SS-10", ss10_machine_init)
-static QEMUMachine voyager_machine = {
- .name = "Voyager",
- .desc = "Sun4m platform, SPARCstation Voyager",
- .init = vger_init,
- .block_default_type = IF_SCSI,
- .default_boot_order = "c",
-};
+static void ss600mp_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4m platform, SPARCserver 600MP";
+ mc->init = ss600mp_init;
+ mc->block_default_type = IF_SCSI;
+ mc->max_cpus = 4;
+ mc->default_boot_order = "c";
+}
-static QEMUMachine ss_lx_machine = {
- .name = "LX",
- .desc = "Sun4m platform, SPARCstation LX",
- .init = ss_lx_init,
- .block_default_type = IF_SCSI,
- .default_boot_order = "c",
-};
+DEFINE_MACHINE("SS-600MP", ss600mp_machine_init)
-static QEMUMachine ss4_machine = {
- .name = "SS-4",
- .desc = "Sun4m platform, SPARCstation 4",
- .init = ss4_init,
- .block_default_type = IF_SCSI,
- .default_boot_order = "c",
-};
+static void ss20_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4m platform, SPARCstation 20";
+ mc->init = ss20_init;
+ mc->block_default_type = IF_SCSI;
+ mc->max_cpus = 4;
+ mc->default_boot_order = "c";
+}
-static QEMUMachine scls_machine = {
- .name = "SPARCClassic",
- .desc = "Sun4m platform, SPARCClassic",
- .init = scls_init,
- .block_default_type = IF_SCSI,
- .default_boot_order = "c",
-};
+DEFINE_MACHINE("SS-20", ss20_machine_init)
-static QEMUMachine sbook_machine = {
- .name = "SPARCbook",
- .desc = "Sun4m platform, SPARCbook",
- .init = sbook_init,
- .block_default_type = IF_SCSI,
- .default_boot_order = "c",
-};
+static void voyager_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4m platform, SPARCstation Voyager";
+ mc->init = vger_init;
+ mc->block_default_type = IF_SCSI;
+ mc->default_boot_order = "c";
+}
+
+DEFINE_MACHINE("Voyager", voyager_machine_init)
+
+static void ss_lx_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4m platform, SPARCstation LX";
+ mc->init = ss_lx_init;
+ mc->block_default_type = IF_SCSI;
+ mc->default_boot_order = "c";
+}
+
+DEFINE_MACHINE("LX", ss_lx_machine_init)
+
+static void ss4_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4m platform, SPARCstation 4";
+ mc->init = ss4_init;
+ mc->block_default_type = IF_SCSI;
+ mc->default_boot_order = "c";
+}
+
+DEFINE_MACHINE("SS-4", ss4_machine_init)
+
+static void scls_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4m platform, SPARCClassic";
+ mc->init = scls_init;
+ mc->block_default_type = IF_SCSI;
+ mc->default_boot_order = "c";
+}
+
+DEFINE_MACHINE("SPARCClassic", scls_machine_init)
+
+static void sbook_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4m platform, SPARCbook";
+ mc->init = sbook_init;
+ mc->block_default_type = IF_SCSI;
+ mc->default_boot_order = "c";
+}
+
+DEFINE_MACHINE("SPARCbook", sbook_machine_init)
static void sun4m_register_types(void)
{
@@ -1504,18 +1522,4 @@ static void sun4m_register_types(void)
type_register_static(&ram_info);
}
-static void sun4m_machine_init(void)
-{
- qemu_register_machine(&ss5_machine);
- qemu_register_machine(&ss10_machine);
- qemu_register_machine(&ss600mp_machine);
- qemu_register_machine(&ss20_machine);
- qemu_register_machine(&voyager_machine);
- qemu_register_machine(&ss_lx_machine);
- qemu_register_machine(&ss4_machine);
- qemu_register_machine(&scls_machine);
- qemu_register_machine(&sbook_machine);
-}
-
type_init(sun4m_register_types)
-machine_init(sun4m_machine_init);
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index e746f47..ab43dc6 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -965,30 +965,36 @@ static void niagara_init(MachineState *machine)
sun4uv_init(get_system_memory(), machine, &hwdefs[2]);
}
-static QEMUMachine sun4u_machine = {
- .name = "sun4u",
- .desc = "Sun4u platform",
- .init = sun4u_init,
- .max_cpus = 1, // XXX for now
- .is_default = 1,
- .default_boot_order = "c",
-};
+static void sun4u_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4u platform";
+ mc->init = sun4u_init;
+ mc->max_cpus = 1; /* XXX for now */
+ mc->is_default = 1;
+ mc->default_boot_order = "c";
+}
-static QEMUMachine sun4v_machine = {
- .name = "sun4v",
- .desc = "Sun4v platform",
- .init = sun4v_init,
- .max_cpus = 1, // XXX for now
- .default_boot_order = "c",
-};
+DEFINE_MACHINE("sun4u", sun4u_machine_init)
-static QEMUMachine niagara_machine = {
- .name = "Niagara",
- .desc = "Sun4v platform, Niagara",
- .init = niagara_init,
- .max_cpus = 1, // XXX for now
- .default_boot_order = "c",
-};
+static void sun4v_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4v platform";
+ mc->init = sun4v_init;
+ mc->max_cpus = 1; /* XXX for now */
+ mc->default_boot_order = "c";
+}
+
+DEFINE_MACHINE("sun4v", sun4v_machine_init)
+
+static void niagara_machine_init(MachineClass *mc)
+{
+ mc->desc = "Sun4v platform, Niagara";
+ mc->init = niagara_init;
+ mc->max_cpus = 1; /* XXX for now */
+ mc->default_boot_order = "c";
+}
+
+DEFINE_MACHINE("Niagara", niagara_machine_init)
static void sun4u_register_types(void)
{
@@ -997,12 +1003,4 @@ static void sun4u_register_types(void)
type_register_static(&ram_info);
}
-static void sun4u_machine_init(void)
-{
- qemu_register_machine(&sun4u_machine);
- qemu_register_machine(&sun4v_machine);
- qemu_register_machine(&niagara_machine);
-}
-
type_init(sun4u_register_types)
-machine_init(sun4u_machine_init);
diff --git a/hw/tricore/tricore_testboard.c b/hw/tricore/tricore_testboard.c
index ff4d2bd..8532410 100644
--- a/hw/tricore/tricore_testboard.c
+++ b/hw/tricore/tricore_testboard.c
@@ -115,16 +115,11 @@ static void tricoreboard_init(MachineState *machine)
tricore_testboard_init(machine, 0x183);
}
-static QEMUMachine ttb_machine = {
- .name = "tricore_testboard",
- .desc = "a minimal TriCore board",
- .init = tricoreboard_init,
- .is_default = 0,
-};
-
-static void tricore_testboard_machine_init(void)
+static void ttb_machine_init(MachineClass *mc)
{
- qemu_register_machine(&ttb_machine);
+ mc->desc = "a minimal TriCore board";
+ mc->init = tricoreboard_init;
+ mc->is_default = 0;
}
-machine_init(tricore_testboard_machine_init);
+DEFINE_MACHINE("tricore_testboard", ttb_machine_init)
diff --git a/hw/unicore32/puv3.c b/hw/unicore32/puv3.c
index 3026d94..91117b2 100644
--- a/hw/unicore32/puv3.c
+++ b/hw/unicore32/puv3.c
@@ -130,16 +130,11 @@ static void puv3_init(MachineState *machine)
puv3_load_kernel(kernel_filename);
}
-static QEMUMachine puv3_machine = {
- .name = "puv3",
- .desc = "PKUnity Version-3 based on UniCore32",
- .init = puv3_init,
- .is_default = 1,
-};
-
-static void puv3_machine_init(void)
+static void puv3_machine_init(MachineClass *mc)
{
- qemu_register_machine(&puv3_machine);
+ mc->desc = "PKUnity Version-3 based on UniCore32";
+ mc->init = puv3_init;
+ mc->is_default = 1;
}
-machine_init(puv3_machine_init)
+DEFINE_MACHINE("puv3", puv3_machine_init)
diff --git a/hw/xenpv/xen_machine_pv.c b/hw/xenpv/xen_machine_pv.c
index 2e545d2..23d6ef0 100644
--- a/hw/xenpv/xen_machine_pv.c
+++ b/hw/xenpv/xen_machine_pv.c
@@ -93,17 +93,12 @@ static void xen_init_pv(MachineState *machine)
xen_init_display(xen_domid);
}
-static QEMUMachine xenpv_machine = {
- .name = "xenpv",
- .desc = "Xen Para-virtualized PC",
- .init = xen_init_pv,
- .max_cpus = 1,
- .default_machine_opts = "accel=xen",
-};
-
-static void xenpv_machine_init(void)
+static void xenpv_machine_init(MachineClass *mc)
{
- qemu_register_machine(&xenpv_machine);
+ mc->desc = "Xen Para-virtualized PC";
+ mc->init = xen_init_pv;
+ mc->max_cpus = 1;
+ mc->default_machine_opts = "accel=xen";
}
-machine_init(xenpv_machine_init);
+DEFINE_MACHINE("xenpv", xenpv_machine_init)
diff --git a/hw/xtensa/sim.c b/hw/xtensa/sim.c
index 3a8140a..aa1cd10 100644
--- a/hw/xtensa/sim.c
+++ b/hw/xtensa/sim.c
@@ -104,17 +104,12 @@ static void xtensa_sim_init(MachineState *machine)
}
}
-static QEMUMachine xtensa_sim_machine = {
- .name = "sim",
- .desc = "sim machine (" XTENSA_DEFAULT_CPU_MODEL ")",
- .is_default = true,
- .init = xtensa_sim_init,
- .max_cpus = 4,
-};
-
-static void xtensa_sim_machine_init(void)
+static void xtensa_sim_machine_init(MachineClass *mc)
{
- qemu_register_machine(&xtensa_sim_machine);
+ mc->desc = "sim machine (" XTENSA_DEFAULT_CPU_MODEL ")";
+ mc->is_default = true;
+ mc->init = xtensa_sim_init;
+ mc->max_cpus = 4;
}
-machine_init(xtensa_sim_machine_init);
+DEFINE_MACHINE("sim", xtensa_sim_machine_init)
diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
index 5030ec9..d6ddfa1 100644
--- a/hw/xtensa/xtfpga.c
+++ b/hw/xtensa/xtfpga.c
@@ -428,40 +428,38 @@ static void xtensa_kc705_init(MachineState *machine)
lx_init(&kc705_board, machine);
}
-static QEMUMachine xtensa_lx60_machine = {
- .name = "lx60",
- .desc = "lx60 EVB (" XTENSA_DEFAULT_CPU_MODEL ")",
- .init = xtensa_lx60_init,
- .max_cpus = 4,
-};
+static void xtensa_lx60_machine_init(MachineClass *mc)
+{
+ mc->desc = "lx60 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
+ mc->init = xtensa_lx60_init;
+ mc->max_cpus = 4;
+}
-static QEMUMachine xtensa_lx200_machine = {
- .name = "lx200",
- .desc = "lx200 EVB (" XTENSA_DEFAULT_CPU_MODEL ")",
- .init = xtensa_lx200_init,
- .max_cpus = 4,
-};
+DEFINE_MACHINE("lx60", xtensa_lx60_machine_init)
-static QEMUMachine xtensa_ml605_machine = {
- .name = "ml605",
- .desc = "ml605 EVB (" XTENSA_DEFAULT_CPU_MODEL ")",
- .init = xtensa_ml605_init,
- .max_cpus = 4,
-};
+static void xtensa_lx200_machine_init(MachineClass *mc)
+{
+ mc->desc = "lx200 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
+ mc->init = xtensa_lx200_init;
+ mc->max_cpus = 4;
+}
-static QEMUMachine xtensa_kc705_machine = {
- .name = "kc705",
- .desc = "kc705 EVB (" XTENSA_DEFAULT_CPU_MODEL ")",
- .init = xtensa_kc705_init,
- .max_cpus = 4,
-};
+DEFINE_MACHINE("lx200", xtensa_lx200_machine_init)
+
+static void xtensa_ml605_machine_init(MachineClass *mc)
+{
+ mc->desc = "ml605 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
+ mc->init = xtensa_ml605_init;
+ mc->max_cpus = 4;
+}
+
+DEFINE_MACHINE("ml605", xtensa_ml605_machine_init)
-static void xtensa_lx_machines_init(void)
+static void xtensa_kc705_machine_init(MachineClass *mc)
{
- qemu_register_machine(&xtensa_lx60_machine);
- qemu_register_machine(&xtensa_lx200_machine);
- qemu_register_machine(&xtensa_ml605_machine);
- qemu_register_machine(&xtensa_kc705_machine);
+ mc->desc = "kc705 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
+ mc->init = xtensa_kc705_init;
+ mc->max_cpus = 4;
}
-machine_init(xtensa_lx_machines_init);
+DEFINE_MACHINE("kc705", xtensa_kc705_machine_init)
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 20/21] Revert use of DEFINE_MACHINE() for registrations of multiple machines
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (18 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 19/21] Use DEFINE_MACHINE() to register all machines Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-21 15:49 ` Eduardo Habkost
2015-09-19 14:43 ` [Qemu-devel] [PULL 21/21] machine: Eliminate QEMUMachine and qemu_register_machine() Andreas Färber
2015-09-19 16:56 ` [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Peter Maydell
21 siblings, 1 reply; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, Evgeny Voevodin, Rob Herring, Igor Mitsyanko,
Leon Alrae, Mark Cave-Ayland, Alexander Graf, Blue Swirl,
Max Filippov, Michael Walle, Hervé Poussineau,
Dmitry Solodkiy, open list:ppc4xx, Maksim Kozlov,
Andreas Färber, Aurelien Jarno
The script used for converting from QEMUMachine had used one
DEFINE_MACHINE() per machine registered. In cases where multiple
machines are registered from one source file, avoid the excessive
generation of module init functions by reverting this unrolling.
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/arm/exynos4_boards.c | 28 +++++++++++--
hw/arm/gumstix.c | 28 +++++++++++--
hw/arm/highbank.c | 28 +++++++++++--
hw/arm/nseries.c | 28 +++++++++++--
hw/arm/omap_sx1.c | 28 +++++++++++--
hw/arm/realview.c | 50 +++++++++++++++++++----
hw/arm/spitz.c | 50 +++++++++++++++++++----
hw/arm/stellaris.c | 28 +++++++++++--
hw/arm/versatilepb.c | 28 +++++++++++--
hw/lm32/lm32_boards.c | 28 +++++++++++--
hw/mips/mips_jazz.c | 28 +++++++++++--
hw/ppc/ppc405_boards.c | 28 +++++++++++--
hw/sparc/sun4m.c | 104 +++++++++++++++++++++++++++++++++++++++---------
hw/sparc64/sun4u.c | 38 +++++++++++++++---
hw/xtensa/xtfpga.c | 50 +++++++++++++++++++----
15 files changed, 484 insertions(+), 88 deletions(-)
diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c
index fadf372..da82b27 100644
--- a/hw/arm/exynos4_boards.c
+++ b/hw/arm/exynos4_boards.c
@@ -144,20 +144,40 @@ static void smdkc210_init(MachineState *machine)
arm_load_kernel(ARM_CPU(first_cpu), &exynos4_board_binfo);
}
-static void exynos4_machine_nuri_machine_init(MachineClass *mc)
+static void nuri_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Samsung NURI board (Exynos4210)";
mc->init = nuri_init;
mc->max_cpus = EXYNOS4210_NCPUS;
}
-DEFINE_MACHINE("nuri", exynos4_machine_nuri_machine_init)
+static const TypeInfo nuri_type = {
+ .name = MACHINE_TYPE_NAME("nuri"),
+ .parent = TYPE_MACHINE,
+ .class_init = nuri_class_init,
+};
-static void exynos4_machine_smdkc210_machine_init(MachineClass *mc)
+static void smdkc210_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Samsung SMDKC210 board (Exynos4210)";
mc->init = smdkc210_init;
mc->max_cpus = EXYNOS4210_NCPUS;
}
-DEFINE_MACHINE("smdkc210", exynos4_machine_smdkc210_machine_init)
+static const TypeInfo smdkc210_type = {
+ .name = MACHINE_TYPE_NAME("smdkc210"),
+ .parent = TYPE_MACHINE,
+ .class_init = smdkc210_class_init,
+};
+
+static void exynos4_machines_init(void)
+{
+ type_register_static(&nuri_type);
+ type_register_static(&smdkc210_type);
+}
+
+machine_init(exynos4_machines_init)
diff --git a/hw/arm/gumstix.c b/hw/arm/gumstix.c
index 6dc98c8..32ad041 100644
--- a/hw/arm/gumstix.c
+++ b/hw/arm/gumstix.c
@@ -121,18 +121,38 @@ static void verdex_init(MachineState *machine)
qdev_get_gpio_in(cpu->gpio, 99));
}
-static void connex_machine_init(MachineClass *mc)
+static void connex_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Gumstix Connex (PXA255)";
mc->init = connex_init;
}
-DEFINE_MACHINE("connex", connex_machine_init)
+static const TypeInfo connex_type = {
+ .name = MACHINE_TYPE_NAME("connex"),
+ .parent = TYPE_MACHINE,
+ .class_init = connex_class_init,
+};
-static void verdex_machine_init(MachineClass *mc)
+static void verdex_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Gumstix Verdex (PXA270)";
mc->init = verdex_init;
}
-DEFINE_MACHINE("verdex", verdex_machine_init)
+static const TypeInfo verdex_type = {
+ .name = MACHINE_TYPE_NAME("verdex"),
+ .parent = TYPE_MACHINE,
+ .class_init = verdex_class_init,
+};
+
+static void gumstix_machine_init(void)
+{
+ type_register_static(&connex_type);
+ type_register_static(&verdex_type);
+}
+
+machine_init(gumstix_machine_init)
diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c
index 9b2887e..be04b27 100644
--- a/hw/arm/highbank.c
+++ b/hw/arm/highbank.c
@@ -391,22 +391,42 @@ static void midway_init(MachineState *machine)
calxeda_init(machine, CALXEDA_MIDWAY);
}
-static void highbank_machine_init(MachineClass *mc)
+static void highbank_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Calxeda Highbank (ECX-1000)";
mc->init = highbank_init;
mc->block_default_type = IF_SCSI;
mc->max_cpus = 4;
}
-DEFINE_MACHINE("highbank", highbank_machine_init)
+static const TypeInfo highbank_type = {
+ .name = MACHINE_TYPE_NAME("highbank"),
+ .parent = TYPE_MACHINE,
+ .class_init = highbank_class_init,
+};
-static void midway_machine_init(MachineClass *mc)
+static void midway_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Calxeda Midway (ECX-2000)";
mc->init = midway_init;
mc->block_default_type = IF_SCSI;
mc->max_cpus = 4;
}
-DEFINE_MACHINE("midway", midway_machine_init)
+static const TypeInfo midway_type = {
+ .name = MACHINE_TYPE_NAME("midway"),
+ .parent = TYPE_MACHINE,
+ .class_init = midway_class_init,
+};
+
+static void calxeda_machines_init(void)
+{
+ type_register_static(&highbank_type);
+ type_register_static(&midway_type);
+}
+
+machine_init(calxeda_machines_init)
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
index af28449..6a6b3e6 100644
--- a/hw/arm/nseries.c
+++ b/hw/arm/nseries.c
@@ -1413,20 +1413,40 @@ static void n810_init(MachineState *machine)
n8x0_init(machine, &n810_binfo, 810);
}
-static void n800_machine_init(MachineClass *mc)
+static void n800_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Nokia N800 tablet aka. RX-34 (OMAP2420)";
mc->init = n800_init;
mc->default_boot_order = "";
}
-DEFINE_MACHINE("n800", n800_machine_init)
+static const TypeInfo n800_type = {
+ .name = MACHINE_TYPE_NAME("n800"),
+ .parent = TYPE_MACHINE,
+ .class_init = n800_class_init,
+};
-static void n810_machine_init(MachineClass *mc)
+static void n810_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Nokia N810 tablet aka. RX-44 (OMAP2420)";
mc->init = n810_init;
mc->default_boot_order = "";
}
-DEFINE_MACHINE("n810", n810_machine_init)
+static const TypeInfo n810_type = {
+ .name = MACHINE_TYPE_NAME("n810"),
+ .parent = TYPE_MACHINE,
+ .class_init = n810_class_init,
+};
+
+static void nseries_machine_init(void)
+{
+ type_register_static(&n800_type);
+ type_register_static(&n810_type);
+}
+
+machine_init(nseries_machine_init)
diff --git a/hw/arm/omap_sx1.c b/hw/arm/omap_sx1.c
index 68924fc..8eaf8f3 100644
--- a/hw/arm/omap_sx1.c
+++ b/hw/arm/omap_sx1.c
@@ -217,18 +217,38 @@ static void sx1_init_v2(MachineState *machine)
sx1_init(machine, 2);
}
-static void sx1_machine_v2_machine_init(MachineClass *mc)
+static void sx1_machine_v2_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Siemens SX1 (OMAP310) V2";
mc->init = sx1_init_v2;
}
-DEFINE_MACHINE("sx1", sx1_machine_v2_machine_init)
+static const TypeInfo sx1_machine_v2_type = {
+ .name = MACHINE_TYPE_NAME("sx1"),
+ .parent = TYPE_MACHINE,
+ .class_init = sx1_machine_v2_class_init,
+};
-static void sx1_machine_v1_machine_init(MachineClass *mc)
+static void sx1_machine_v1_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Siemens SX1 (OMAP310) V1";
mc->init = sx1_init_v1;
}
-DEFINE_MACHINE("sx1-v1", sx1_machine_v1_machine_init)
+static const TypeInfo sx1_machine_v1_type = {
+ .name = MACHINE_TYPE_NAME("sx1-v1"),
+ .parent = TYPE_MACHINE,
+ .class_init = sx1_machine_v1_class_init,
+};
+
+static void sx1_machine_init(void)
+{
+ type_register_static(&sx1_machine_v1_type);
+ type_register_static(&sx1_machine_v2_type);
+}
+
+machine_init(sx1_machine_init)
diff --git a/hw/arm/realview.c b/hw/arm/realview.c
index 6c83817..e14828d 100644
--- a/hw/arm/realview.c
+++ b/hw/arm/realview.c
@@ -399,39 +399,73 @@ static void realview_pbx_a9_init(MachineState *machine)
realview_init(machine, BOARD_PBX_A9);
}
-static void realview_eb_machine_init(MachineClass *mc)
+static void realview_eb_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "ARM RealView Emulation Baseboard (ARM926EJ-S)";
mc->init = realview_eb_init;
mc->block_default_type = IF_SCSI;
}
-DEFINE_MACHINE("realview-eb", realview_eb_machine_init)
+static const TypeInfo realview_eb_type = {
+ .name = MACHINE_TYPE_NAME("realview-eb"),
+ .parent = TYPE_MACHINE,
+ .class_init = realview_eb_class_init,
+};
-static void realview_eb_mpcore_machine_init(MachineClass *mc)
+static void realview_eb_mpcore_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "ARM RealView Emulation Baseboard (ARM11MPCore)";
mc->init = realview_eb_mpcore_init;
mc->block_default_type = IF_SCSI;
mc->max_cpus = 4;
}
-DEFINE_MACHINE("realview-eb-mpcore", realview_eb_mpcore_machine_init)
+static const TypeInfo realview_eb_mpcore_type = {
+ .name = MACHINE_TYPE_NAME("realview-eb-mpcore"),
+ .parent = TYPE_MACHINE,
+ .class_init = realview_eb_mpcore_class_init,
+};
-static void realview_pb_a8_machine_init(MachineClass *mc)
+static void realview_pb_a8_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "ARM RealView Platform Baseboard for Cortex-A8";
mc->init = realview_pb_a8_init;
}
-DEFINE_MACHINE("realview-pb-a8", realview_pb_a8_machine_init)
+static const TypeInfo realview_pb_a8_type = {
+ .name = MACHINE_TYPE_NAME("realview-pb-a8"),
+ .parent = TYPE_MACHINE,
+ .class_init = realview_pb_a8_class_init,
+};
-static void realview_pbx_a9_machine_init(MachineClass *mc)
+static void realview_pbx_a9_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "ARM RealView Platform Baseboard Explore for Cortex-A9";
mc->init = realview_pbx_a9_init;
mc->block_default_type = IF_SCSI;
mc->max_cpus = 4;
}
-DEFINE_MACHINE("realview-pbx-a9", realview_pbx_a9_machine_init)
+static const TypeInfo realview_pbx_a9_type = {
+ .name = MACHINE_TYPE_NAME("realview-pbx-a9"),
+ .parent = TYPE_MACHINE,
+ .class_init = realview_pbx_a9_class_init,
+};
+
+static void realview_machine_init(void)
+{
+ type_register_static(&realview_eb_type);
+ type_register_static(&realview_eb_mpcore_type);
+ type_register_static(&realview_pb_a8_type);
+ type_register_static(&realview_pbx_a9_type);
+}
+
+machine_init(realview_machine_init)
diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c
index 0f59489..2af03be 100644
--- a/hw/arm/spitz.c
+++ b/hw/arm/spitz.c
@@ -972,37 +972,71 @@ static void terrier_init(MachineState *machine)
spitz_common_init(machine, terrier, 0x33f);
}
-static void akitapda_machine_init(MachineClass *mc)
+static void akitapda_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Akita PDA (PXA270)";
mc->init = akita_init;
}
-DEFINE_MACHINE("akita", akitapda_machine_init)
+static const TypeInfo akitapda_type = {
+ .name = MACHINE_TYPE_NAME("akita"),
+ .parent = TYPE_MACHINE,
+ .class_init = akitapda_class_init,
+};
-static void spitzpda_machine_init(MachineClass *mc)
+static void spitzpda_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Spitz PDA (PXA270)";
mc->init = spitz_init;
}
-DEFINE_MACHINE("spitz", spitzpda_machine_init)
+static const TypeInfo spitzpda_type = {
+ .name = MACHINE_TYPE_NAME("spitz"),
+ .parent = TYPE_MACHINE,
+ .class_init = spitzpda_class_init,
+};
-static void borzoipda_machine_init(MachineClass *mc)
+static void borzoipda_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Borzoi PDA (PXA270)";
mc->init = borzoi_init;
}
-DEFINE_MACHINE("borzoi", borzoipda_machine_init)
+static const TypeInfo borzoipda_type = {
+ .name = MACHINE_TYPE_NAME("borzoi"),
+ .parent = TYPE_MACHINE,
+ .class_init = borzoipda_class_init,
+};
-static void terrierpda_machine_init(MachineClass *mc)
+static void terrierpda_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Terrier PDA (PXA270)";
mc->init = terrier_init;
}
-DEFINE_MACHINE("terrier", terrierpda_machine_init)
+static const TypeInfo terrierpda_type = {
+ .name = MACHINE_TYPE_NAME("terrier"),
+ .parent = TYPE_MACHINE,
+ .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)
{
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
index a97d9e3..3d6486f 100644
--- a/hw/arm/stellaris.c
+++ b/hw/arm/stellaris.c
@@ -1366,21 +1366,41 @@ static void lm3s6965evb_init(MachineState *machine)
stellaris_init(kernel_filename, cpu_model, &stellaris_boards[1]);
}
-static void lm3s811evb_machine_init(MachineClass *mc)
+static void lm3s811evb_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Stellaris LM3S811EVB";
mc->init = lm3s811evb_init;
}
-DEFINE_MACHINE("lm3s811evb", lm3s811evb_machine_init)
+static const TypeInfo lm3s811evb_type = {
+ .name = MACHINE_TYPE_NAME("lm3s811evb"),
+ .parent = TYPE_MACHINE,
+ .class_init = lm3s811evb_class_init,
+};
-static void lm3s6965evb_machine_init(MachineClass *mc)
+static void lm3s6965evb_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Stellaris LM3S6965EVB";
mc->init = lm3s6965evb_init;
}
-DEFINE_MACHINE("lm3s6965evb", lm3s6965evb_machine_init)
+static const TypeInfo lm3s6965evb_type = {
+ .name = MACHINE_TYPE_NAME("lm3s6965evb"),
+ .parent = TYPE_MACHINE,
+ .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)
{
diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c
index 54281f4..912c290 100644
--- a/hw/arm/versatilepb.c
+++ b/hw/arm/versatilepb.c
@@ -391,23 +391,43 @@ static void vab_init(MachineState *machine)
versatile_init(machine, 0x25e);
}
-static void versatilepb_machine_init(MachineClass *mc)
+static void versatilepb_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "ARM Versatile/PB (ARM926EJ-S)";
mc->init = vpb_init;
mc->block_default_type = IF_SCSI;
}
-DEFINE_MACHINE("versatilepb", versatilepb_machine_init)
+static const TypeInfo versatilepb_type = {
+ .name = MACHINE_TYPE_NAME("versatilepb"),
+ .parent = TYPE_MACHINE,
+ .class_init = versatilepb_class_init,
+};
-static void versatileab_machine_init(MachineClass *mc)
+static void versatileab_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "ARM Versatile/AB (ARM926EJ-S)";
mc->init = vab_init;
mc->block_default_type = IF_SCSI;
}
-DEFINE_MACHINE("versatileab", versatileab_machine_init)
+static const TypeInfo versatileab_type = {
+ .name = MACHINE_TYPE_NAME("versatileab"),
+ .parent = TYPE_MACHINE,
+ .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)
{
diff --git a/hw/lm32/lm32_boards.c b/hw/lm32/lm32_boards.c
index 04d2066..8e17a82 100644
--- a/hw/lm32/lm32_boards.c
+++ b/hw/lm32/lm32_boards.c
@@ -292,20 +292,40 @@ static void lm32_uclinux_init(MachineState *machine)
qemu_register_reset(main_cpu_reset, reset_info);
}
-static void lm32_evr_machine_init(MachineClass *mc)
+static void lm32_evr_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "LatticeMico32 EVR32 eval system";
mc->init = lm32_evr_init;
mc->is_default = 1;
}
-DEFINE_MACHINE("lm32-evr", lm32_evr_machine_init)
+static const TypeInfo lm32_evr_type = {
+ .name = MACHINE_TYPE_NAME("lm32-evr"),
+ .parent = TYPE_MACHINE,
+ .class_init = lm32_evr_class_init,
+};
-static void lm32_uclinux_machine_init(MachineClass *mc)
+static void lm32_uclinux_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "lm32 platform for uClinux and u-boot by Theobroma Systems";
mc->init = lm32_uclinux_init;
mc->is_default = 0;
}
-DEFINE_MACHINE("lm32-uclinux", lm32_uclinux_machine_init)
+static const TypeInfo lm32_uclinux_type = {
+ .name = MACHINE_TYPE_NAME("lm32-uclinux"),
+ .parent = TYPE_MACHINE,
+ .class_init = lm32_uclinux_class_init,
+};
+
+static void lm32_machine_init(void)
+{
+ type_register_static(&lm32_evr_type);
+ type_register_static(&lm32_uclinux_type);
+}
+
+machine_init(lm32_machine_init)
diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c
index d3627ba..1ab885b 100644
--- a/hw/mips/mips_jazz.c
+++ b/hw/mips/mips_jazz.c
@@ -349,20 +349,40 @@ void mips_pica61_init(MachineState *machine)
mips_jazz_init(machine, JAZZ_PICA61);
}
-static void mips_magnum_machine_init(MachineClass *mc)
+static void mips_magnum_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "MIPS Magnum";
mc->init = mips_magnum_init;
mc->block_default_type = IF_SCSI;
}
-DEFINE_MACHINE("magnum", mips_magnum_machine_init)
+static const TypeInfo mips_magnum_type = {
+ .name = MACHINE_TYPE_NAME("magnum"),
+ .parent = TYPE_MACHINE,
+ .class_init = mips_magnum_class_init,
+};
-static void mips_pica61_machine_init(MachineClass *mc)
+static void mips_pica61_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Acer Pica 61";
mc->init = mips_pica61_init;
mc->block_default_type = IF_SCSI;
}
-DEFINE_MACHINE("pica61", mips_pica61_machine_init)
+static const TypeInfo mips_pica61_type = {
+ .name = MACHINE_TYPE_NAME("pica61"),
+ .parent = TYPE_MACHINE,
+ .class_init = mips_pica61_class_init,
+};
+
+static void mips_jazz_machine_init(void)
+{
+ type_register_static(&mips_magnum_type);
+ type_register_static(&mips_pica61_type);
+}
+
+machine_init(mips_jazz_machine_init)
diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c
index 56980bf..ec87587 100644
--- a/hw/ppc/ppc405_boards.c
+++ b/hw/ppc/ppc405_boards.c
@@ -369,13 +369,19 @@ static void ref405ep_init(MachineState *machine)
#endif
}
-static void ref405ep_machine_init(MachineClass *mc)
+static void ref405ep_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "ref405ep";
mc->init = ref405ep_init;
}
-DEFINE_MACHINE("ref405ep", ref405ep_machine_init)
+static const TypeInfo ref405ep_type = {
+ .name = MACHINE_TYPE_NAME("ref405ep"),
+ .parent = TYPE_MACHINE,
+ .class_init = ref405ep_class_init,
+};
/*****************************************************************************/
/* AMCC Taihu evaluation board */
@@ -667,10 +673,24 @@ static void taihu_405ep_init(MachineState *machine)
#endif
}
-static void taihu_machine_init(MachineClass *mc)
+static void taihu_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "taihu";
mc->init = taihu_405ep_init;
}
-DEFINE_MACHINE("taihu", taihu_machine_init)
+static const TypeInfo taihu_type = {
+ .name = MACHINE_TYPE_NAME("taihu"),
+ .parent = TYPE_MACHINE,
+ .class_init = taihu_class_init,
+};
+
+static void ppc405_machine_init(void)
+{
+ type_register_static(&ref405ep_type);
+ type_register_static(&taihu_type);
+}
+
+machine_init(ppc405_machine_init)
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index 092e250..9f1917f 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -1420,8 +1420,10 @@ static void sbook_init(MachineState *machine)
sun4m_hw_init(&sun4m_hwdefs[8], machine);
}
-static void ss5_machine_init(MachineClass *mc)
+static void ss5_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4m platform, SPARCstation 5";
mc->init = ss5_init;
mc->block_default_type = IF_SCSI;
@@ -1429,10 +1431,16 @@ static void ss5_machine_init(MachineClass *mc)
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("SS-5", ss5_machine_init)
+static const TypeInfo ss5_type = {
+ .name = MACHINE_TYPE_NAME("SS-5"),
+ .parent = TYPE_MACHINE,
+ .class_init = ss5_class_init,
+};
-static void ss10_machine_init(MachineClass *mc)
+static void ss10_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4m platform, SPARCstation 10";
mc->init = ss10_init;
mc->block_default_type = IF_SCSI;
@@ -1440,10 +1448,16 @@ static void ss10_machine_init(MachineClass *mc)
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("SS-10", ss10_machine_init)
+static const TypeInfo ss10_type = {
+ .name = MACHINE_TYPE_NAME("SS-10"),
+ .parent = TYPE_MACHINE,
+ .class_init = ss10_class_init,
+};
-static void ss600mp_machine_init(MachineClass *mc)
+static void ss600mp_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4m platform, SPARCserver 600MP";
mc->init = ss600mp_init;
mc->block_default_type = IF_SCSI;
@@ -1451,10 +1465,16 @@ static void ss600mp_machine_init(MachineClass *mc)
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("SS-600MP", ss600mp_machine_init)
+static const TypeInfo ss600mp_type = {
+ .name = MACHINE_TYPE_NAME("SS-600MP"),
+ .parent = TYPE_MACHINE,
+ .class_init = ss600mp_class_init,
+};
-static void ss20_machine_init(MachineClass *mc)
+static void ss20_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4m platform, SPARCstation 20";
mc->init = ss20_init;
mc->block_default_type = IF_SCSI;
@@ -1462,57 +1482,91 @@ static void ss20_machine_init(MachineClass *mc)
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("SS-20", ss20_machine_init)
+static const TypeInfo ss20_type = {
+ .name = MACHINE_TYPE_NAME("SS-20"),
+ .parent = TYPE_MACHINE,
+ .class_init = ss20_class_init,
+};
-static void voyager_machine_init(MachineClass *mc)
+static void voyager_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4m platform, SPARCstation Voyager";
mc->init = vger_init;
mc->block_default_type = IF_SCSI;
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("Voyager", voyager_machine_init)
+static const TypeInfo voyager_type = {
+ .name = MACHINE_TYPE_NAME("Voyager"),
+ .parent = TYPE_MACHINE,
+ .class_init = voyager_class_init,
+};
-static void ss_lx_machine_init(MachineClass *mc)
+static void ss_lx_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4m platform, SPARCstation LX";
mc->init = ss_lx_init;
mc->block_default_type = IF_SCSI;
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("LX", ss_lx_machine_init)
+static const TypeInfo ss_lx_type = {
+ .name = MACHINE_TYPE_NAME("LX"),
+ .parent = TYPE_MACHINE,
+ .class_init = ss_lx_class_init,
+};
-static void ss4_machine_init(MachineClass *mc)
+static void ss4_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4m platform, SPARCstation 4";
mc->init = ss4_init;
mc->block_default_type = IF_SCSI;
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("SS-4", ss4_machine_init)
+static const TypeInfo ss4_type = {
+ .name = MACHINE_TYPE_NAME("SS-4"),
+ .parent = TYPE_MACHINE,
+ .class_init = ss4_class_init,
+};
-static void scls_machine_init(MachineClass *mc)
+static void scls_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4m platform, SPARCClassic";
mc->init = scls_init;
mc->block_default_type = IF_SCSI;
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("SPARCClassic", scls_machine_init)
+static const TypeInfo scls_type = {
+ .name = MACHINE_TYPE_NAME("SPARCClassic"),
+ .parent = TYPE_MACHINE,
+ .class_init = scls_class_init,
+};
-static void sbook_machine_init(MachineClass *mc)
+static void sbook_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4m platform, SPARCbook";
mc->init = sbook_init;
mc->block_default_type = IF_SCSI;
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("SPARCbook", sbook_machine_init)
+static const TypeInfo sbook_type = {
+ .name = MACHINE_TYPE_NAME("SPARCbook"),
+ .parent = TYPE_MACHINE,
+ .class_init = sbook_class_init,
+};
static void sun4m_register_types(void)
{
@@ -1522,4 +1576,18 @@ static void sun4m_register_types(void)
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);
+ type_register_static(&ss20_type);
+ type_register_static(&voyager_type);
+ type_register_static(&ss_lx_type);
+ type_register_static(&ss4_type);
+ type_register_static(&scls_type);
+ type_register_static(&sbook_type);
+}
+
type_init(sun4m_register_types)
+machine_init(sun4m_machine_init)
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index ab43dc6..a6b5957 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -965,8 +965,10 @@ static void niagara_init(MachineState *machine)
sun4uv_init(get_system_memory(), machine, &hwdefs[2]);
}
-static void sun4u_machine_init(MachineClass *mc)
+static void sun4u_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4u platform";
mc->init = sun4u_init;
mc->max_cpus = 1; /* XXX for now */
@@ -974,27 +976,43 @@ static void sun4u_machine_init(MachineClass *mc)
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("sun4u", sun4u_machine_init)
+static const TypeInfo sun4u_type = {
+ .name = MACHINE_TYPE_NAME("sun4u"),
+ .parent = TYPE_MACHINE,
+ .class_init = sun4u_class_init,
+};
-static void sun4v_machine_init(MachineClass *mc)
+static void sun4v_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4v platform";
mc->init = sun4v_init;
mc->max_cpus = 1; /* XXX for now */
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("sun4v", sun4v_machine_init)
+static const TypeInfo sun4v_type = {
+ .name = MACHINE_TYPE_NAME("sun4v"),
+ .parent = TYPE_MACHINE,
+ .class_init = sun4v_class_init,
+};
-static void niagara_machine_init(MachineClass *mc)
+static void niagara_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "Sun4v platform, Niagara";
mc->init = niagara_init;
mc->max_cpus = 1; /* XXX for now */
mc->default_boot_order = "c";
}
-DEFINE_MACHINE("Niagara", niagara_machine_init)
+static const TypeInfo niagara_type = {
+ .name = MACHINE_TYPE_NAME("Niagara"),
+ .parent = TYPE_MACHINE,
+ .class_init = niagara_class_init,
+};
static void sun4u_register_types(void)
{
@@ -1003,4 +1021,12 @@ static void sun4u_register_types(void)
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_init(sun4u_register_types)
+machine_init(sun4u_machine_init)
diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
index d6ddfa1..7aca1cf 100644
--- a/hw/xtensa/xtfpga.c
+++ b/hw/xtensa/xtfpga.c
@@ -428,38 +428,72 @@ static void xtensa_kc705_init(MachineState *machine)
lx_init(&kc705_board, machine);
}
-static void xtensa_lx60_machine_init(MachineClass *mc)
+static void xtensa_lx60_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "lx60 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
mc->init = xtensa_lx60_init;
mc->max_cpus = 4;
}
-DEFINE_MACHINE("lx60", xtensa_lx60_machine_init)
+static const TypeInfo xtensa_lx60_type = {
+ .name = MACHINE_TYPE_NAME("lx60"),
+ .parent = TYPE_MACHINE,
+ .class_init = xtensa_lx60_class_init,
+};
-static void xtensa_lx200_machine_init(MachineClass *mc)
+static void xtensa_lx200_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "lx200 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
mc->init = xtensa_lx200_init;
mc->max_cpus = 4;
}
-DEFINE_MACHINE("lx200", xtensa_lx200_machine_init)
+static const TypeInfo xtensa_lx200_type = {
+ .name = MACHINE_TYPE_NAME("lx200"),
+ .parent = TYPE_MACHINE,
+ .class_init = xtensa_lx200_class_init,
+};
-static void xtensa_ml605_machine_init(MachineClass *mc)
+static void xtensa_ml605_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "ml605 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
mc->init = xtensa_ml605_init;
mc->max_cpus = 4;
}
-DEFINE_MACHINE("ml605", xtensa_ml605_machine_init)
+static const TypeInfo xtensa_ml605_type = {
+ .name = MACHINE_TYPE_NAME("ml605"),
+ .parent = TYPE_MACHINE,
+ .class_init = xtensa_ml605_class_init,
+};
-static void xtensa_kc705_machine_init(MachineClass *mc)
+static void xtensa_kc705_class_init(ObjectClass *oc, void *data)
{
+ MachineClass *mc = MACHINE_CLASS(oc);
+
mc->desc = "kc705 EVB (" XTENSA_DEFAULT_CPU_MODEL ")";
mc->init = xtensa_kc705_init;
mc->max_cpus = 4;
}
-DEFINE_MACHINE("kc705", xtensa_kc705_machine_init)
+static const TypeInfo xtensa_kc705_type = {
+ .name = MACHINE_TYPE_NAME("kc705"),
+ .parent = TYPE_MACHINE,
+ .class_init = xtensa_kc705_class_init,
+};
+
+static void xtensa_lx_machines_init(void)
+{
+ type_register_static(&xtensa_lx60_type);
+ type_register_static(&xtensa_lx200_type);
+ type_register_static(&xtensa_ml605_type);
+ type_register_static(&xtensa_kc705_type);
+}
+
+machine_init(xtensa_lx_machines_init)
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PULL 20/21] Revert use of DEFINE_MACHINE() for registrations of multiple machines
2015-09-19 14:43 ` [Qemu-devel] [PULL 20/21] Revert use of DEFINE_MACHINE() for registrations of multiple machines Andreas Färber
@ 2015-09-21 15:49 ` Eduardo Habkost
2015-09-21 15:52 ` Andreas Färber
0 siblings, 1 reply; 28+ messages in thread
From: Eduardo Habkost @ 2015-09-21 15:49 UTC (permalink / raw)
To: Andreas Färber
Cc: Peter Maydell, Evgeny Voevodin, Rob Herring, Igor Mitsyanko,
Mark Cave-Ayland, qemu-devel, Alexander Graf, Blue Swirl,
Max Filippov, Michael Walle, Hervé Poussineau,
Dmitry Solodkiy, open list:ppc4xx, Maksim Kozlov, Leon Alrae,
Aurelien Jarno
On Sat, Sep 19, 2015 at 04:43:29PM +0200, Andreas Färber wrote:
> The script used for converting from QEMUMachine had used one
> DEFINE_MACHINE() per machine registered. In cases where multiple
> machines are registered from one source file, avoid the excessive
> generation of module init functions by reverting this unrolling.
Why is that a problem?
--
Eduardo
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PULL 20/21] Revert use of DEFINE_MACHINE() for registrations of multiple machines
2015-09-21 15:49 ` Eduardo Habkost
@ 2015-09-21 15:52 ` Andreas Färber
2015-09-21 17:24 ` Eduardo Habkost
0 siblings, 1 reply; 28+ messages in thread
From: Andreas Färber @ 2015-09-21 15:52 UTC (permalink / raw)
To: Eduardo Habkost
Cc: Peter Maydell, Evgeny Voevodin, Rob Herring, Igor Mitsyanko,
Mark Cave-Ayland, qemu-devel, Alexander Graf, Blue Swirl,
Max Filippov, Michael Walle, Hervé Poussineau,
Dmitry Solodkiy, open list:ppc4xx, Maksim Kozlov, Leon Alrae,
Aurelien Jarno
Am 21.09.2015 um 17:49 schrieb Eduardo Habkost:
> On Sat, Sep 19, 2015 at 04:43:29PM +0200, Andreas Färber wrote:
>> The script used for converting from QEMUMachine had used one
>> DEFINE_MACHINE() per machine registered. In cases where multiple
>> machines are registered from one source file, avoid the excessive
>> generation of module init functions by reverting this unrolling.
>
> Why is that a problem?
It's unnecessary code bloat and it blocks the usual QOM patterns. See
the follow-up series for an example where an abstract base type helps,
which your macro does not allow.
Regards,
Andreas
--
SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton; HRB 21284 (AG Nürnberg)
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PULL 20/21] Revert use of DEFINE_MACHINE() for registrations of multiple machines
2015-09-21 15:52 ` Andreas Färber
@ 2015-09-21 17:24 ` Eduardo Habkost
2015-09-21 17:57 ` Eduardo Habkost
0 siblings, 1 reply; 28+ messages in thread
From: Eduardo Habkost @ 2015-09-21 17:24 UTC (permalink / raw)
To: Andreas Färber
Cc: Peter Maydell, Evgeny Voevodin, Rob Herring, Igor Mitsyanko,
Mark Cave-Ayland, qemu-devel, Alexander Graf, Blue Swirl,
Max Filippov, Michael Walle, Hervé Poussineau,
Dmitry Solodkiy, open list:ppc4xx, Maksim Kozlov, Leon Alrae,
Aurelien Jarno
On Mon, Sep 21, 2015 at 05:52:47PM +0200, Andreas Färber wrote:
> Am 21.09.2015 um 17:49 schrieb Eduardo Habkost:
> > On Sat, Sep 19, 2015 at 04:43:29PM +0200, Andreas Färber wrote:
> >> The script used for converting from QEMUMachine had used one
> >> DEFINE_MACHINE() per machine registered. In cases where multiple
> >> machines are registered from one source file, avoid the excessive
> >> generation of module init functions by reverting this unrolling.
> >
> > Why is that a problem?
>
> It's unnecessary code bloat and it blocks the usual QOM patterns. See
> the follow-up series for an example where an abstract base type helps,
> which your macro does not allow.
Do you have any numbers on the actual bloat impact? Personally, I
think the reduction of boilerplate code is worth the extra bytes
in the binary. Files that register lots of simple machine classes
are exactly the use case I had in mind when adding the macro.
About the cases where an abstract base type helps, I agree
DEFINE_MACHINE isn't appropriate, but in those cases I would use
a macro like DEFINE_PC_MACHINE to reduce boilerplate code anyway.
But I don't mind too much either way: if the maintainer of the
corresponding machine code prefers to not reduce boilerplate code
using a macro, that's OK to me. I am happy now that QEMUMachine
is gone.
--
Eduardo
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PULL 20/21] Revert use of DEFINE_MACHINE() for registrations of multiple machines
2015-09-21 17:24 ` Eduardo Habkost
@ 2015-09-21 17:57 ` Eduardo Habkost
0 siblings, 0 replies; 28+ messages in thread
From: Eduardo Habkost @ 2015-09-21 17:57 UTC (permalink / raw)
To: Andreas Färber
Cc: Peter Maydell, Evgeny Voevodin, Rob Herring, Igor Mitsyanko,
Mark Cave-Ayland, qemu-devel, Alexander Graf, Blue Swirl,
Max Filippov, Michael Walle, Hervé Poussineau,
Dmitry Solodkiy, open list:ppc4xx, Maksim Kozlov, Leon Alrae,
Aurelien Jarno
On Mon, Sep 21, 2015 at 02:24:51PM -0300, Eduardo Habkost wrote:
> On Mon, Sep 21, 2015 at 05:52:47PM +0200, Andreas Färber wrote:
> > Am 21.09.2015 um 17:49 schrieb Eduardo Habkost:
> > > On Sat, Sep 19, 2015 at 04:43:29PM +0200, Andreas Färber wrote:
> > >> The script used for converting from QEMUMachine had used one
> > >> DEFINE_MACHINE() per machine registered. In cases where multiple
> > >> machines are registered from one source file, avoid the excessive
> > >> generation of module init functions by reverting this unrolling.
> > >
> > > Why is that a problem?
> >
> > It's unnecessary code bloat and it blocks the usual QOM patterns. See
> > the follow-up series for an example where an abstract base type helps,
> > which your macro does not allow.
>
> Do you have any numbers on the actual bloat impact?
This is what I see on x86_64:
$ readelf -W -s before/qemu-system-arm | grep smdkc210
2675: 00000000001422b0 12 FUNC LOCAL DEFAULT 13 exynos4_machine_smdkc210_machine_init_register_types
2676: 00000000007051c0 104 OBJECT LOCAL DEFAULT 23 exynos4_machine_smdkc210_machine_init_typeinfo
2680: 0000000000142310 72 FUNC LOCAL DEFAULT 13 exynos4_machine_smdkc210_machine_init_class_init
2682: 00000000001424b0 264 FUNC LOCAL DEFAULT 13 smdkc210_init
2693: 00000000000a4d50 17 FUNC LOCAL DEFAULT 13 do_qemu_init_exynos4_machine_smdkc210_machine_init_register_types
$ readelf -W -s after/qemu-system-arm | grep smdkc210
2675: 00000000007041c0 104 OBJECT LOCAL DEFAULT 23 smdkc210_type
2676: 0000000000141ff0 72 FUNC LOCAL DEFAULT 13 smdkc210_class_init
2678: 00000000001421e0 264 FUNC LOCAL DEFAULT 13 smdkc210_init
An additional type_register_static() call inside an existing type_init()
function adds 16 bytes to the function.
An additional type_init() functions adds 29 bytes:
* 12 bytes for the the function calling type_register_static()
* 17 bytes for the do_qemu_init_*() function
So, you are saving 13 bytes for each machine class.
For comparison on the existing per-machine-class bloat, each new machine class
already adds at least:
* 104 bytes for the TypeInfo object
* 240 bytes for each MachineClass struct allocated at runtime when
find_machine() runs object_class_get_list()
* A variable number of bytes for strings, class_init and other machine
code (336 bytes for class_init and instance_init, in the smdkc210
case)
I would happily add extra 13 bytes for each machine class if it means simpler
code.
--
Eduardo
^ permalink raw reply [flat|nested] 28+ messages in thread
* [Qemu-devel] [PULL 21/21] machine: Eliminate QEMUMachine and qemu_register_machine()
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (19 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 20/21] Revert use of DEFINE_MACHINE() for registrations of multiple machines Andreas Färber
@ 2015-09-19 14:43 ` Andreas Färber
2015-09-19 16:56 ` [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Peter Maydell
21 siblings, 0 replies; 28+ messages in thread
From: Andreas Färber @ 2015-09-19 14:43 UTC (permalink / raw)
To: qemu-devel; +Cc: Paolo Bonzini, Eduardo Habkost, Andreas Färber
From: Eduardo Habkost <ehabkost@redhat.com>
The struct is not used anymore and can be eliminated.
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
include/hw/boards.h | 27 ---------------------------
include/qemu/typedefs.h | 1 -
include/sysemu/blockdev.h | 2 +-
include/sysemu/sysemu.h | 2 +-
vl.c | 36 ------------------------------------
5 files changed, 2 insertions(+), 66 deletions(-)
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 4fe2ce5..3e9a92c 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -9,36 +9,10 @@
#include "hw/qdev.h"
#include "qom/object.h"
-
-typedef void QEMUMachineInitFunc(MachineState *ms);
-
-typedef void QEMUMachineResetFunc(void);
-
-typedef void QEMUMachineHotAddCPUFunc(const int64_t id, Error **errp);
-
-typedef int QEMUMachineGetKvmtypeFunc(const char *arg);
-
-struct QEMUMachine {
- const char *name;
- const char *desc;
- QEMUMachineInitFunc *init;
- QEMUMachineGetKvmtypeFunc *kvm_type;
- BlockInterfaceType block_default_type;
- int max_cpus;
- unsigned int
- no_sdcard:1,
- has_dynamic_sysbus:1;
- int is_default;
- const char *default_machine_opts;
- const char *default_boot_order;
-};
-
void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
const char *name,
uint64_t ram_size);
-int qemu_register_machine(QEMUMachine *m);
-
#define TYPE_MACHINE_SUFFIX "-machine"
/* Machine class name that needs to be used for class-name-based machine
@@ -69,7 +43,6 @@ bool machine_mem_merge(MachineState *machine);
/**
* MachineClass:
- * @qemu_machine: #QEMUMachine
* @get_hotplug_handler: this function is called during bus-less
* device hotplug. If defined it returns pointer to an instance
* of HotplugHandler object, which handles hotplug operation
diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h
index 97ac727..ce82c64 100644
--- a/include/qemu/typedefs.h
+++ b/include/qemu/typedefs.h
@@ -67,7 +67,6 @@ typedef struct Property Property;
typedef struct QEMUBH QEMUBH;
typedef struct QemuConsole QemuConsole;
typedef struct QEMUFile QEMUFile;
-typedef struct QEMUMachine QEMUMachine;
typedef struct QEMUSGList QEMUSGList;
typedef struct QEMUSizedBuffer QEMUSizedBuffer;
typedef struct QEMUTimerListGroup QEMUTimerListGroup;
diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h
index 3104150..a00be94 100644
--- a/include/sysemu/blockdev.h
+++ b/include/sysemu/blockdev.h
@@ -20,7 +20,7 @@ void blockdev_auto_del(BlockBackend *blk);
typedef enum {
IF_DEFAULT = -1, /* for use with drive_add() only */
/*
- * IF_IDE must be zero, because we want QEMUMachine member
+ * IF_IDE must be zero, because we want MachineClass member
* block_default_type to default-initialize to IF_IDE
*/
IF_IDE = 0,
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 1f6ff8f..c439975 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -195,7 +195,7 @@ void device_add_bootindex_property(Object *obj, int32_t *bootindex,
void restore_boot_order(void *opaque);
void validate_bootdevices(const char *devices, Error **errp);
-/* handler to set the boot_device order for a specific type of QEMUMachine */
+/* handler to set the boot_device order for a specific type of MachineClass */
typedef void QEMUBootSetHandler(void *opaque, const char *boot_order,
Error **errp);
void qemu_register_boot_set(QEMUBootSetHandler *func, void *opaque);
diff --git a/vl.c b/vl.c
index 3b92635..e211f6a 100644
--- a/vl.c
+++ b/vl.c
@@ -1429,42 +1429,6 @@ void hmp_usb_del(Monitor *mon, const QDict *qdict)
MachineState *current_machine;
-/*
- * Transitional class registration/init used for converting from
- * legacy QEMUMachine to MachineClass.
- */
-static void qemu_machine_class_init(ObjectClass *oc, void *data)
-{
- MachineClass *mc = MACHINE_CLASS(oc);
- QEMUMachine *qm = data;
- mc->desc = qm->desc;
- mc->init = qm->init;
- mc->kvm_type = qm->kvm_type;
- mc->block_default_type = qm->block_default_type;
- mc->max_cpus = qm->max_cpus;
- mc->no_sdcard = qm->no_sdcard;
- mc->has_dynamic_sysbus = qm->has_dynamic_sysbus;
- mc->is_default = qm->is_default;
- mc->default_machine_opts = qm->default_machine_opts;
- mc->default_boot_order = qm->default_boot_order;
-}
-
-int qemu_register_machine(QEMUMachine *m)
-{
- char *name = g_strdup_printf(MACHINE_TYPE_NAME("%s"), m->name);
- TypeInfo ti = {
- .name = name,
- .parent = TYPE_MACHINE,
- .class_init = qemu_machine_class_init,
- .class_data = (void *)m,
- };
-
- type_register(&ti);
- g_free(name);
-
- return 0;
-}
-
static MachineClass *find_machine(const char *name)
{
GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
--
2.1.4
^ permalink raw reply related [flat|nested] 28+ messages in thread
* Re: [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19
2015-09-19 14:43 [Qemu-devel] [PULL 00/21] QOM devices patch queue 2015-09-19 Andreas Färber
` (20 preceding siblings ...)
2015-09-19 14:43 ` [Qemu-devel] [PULL 21/21] machine: Eliminate QEMUMachine and qemu_register_machine() Andreas Färber
@ 2015-09-19 16:56 ` Peter Maydell
21 siblings, 0 replies; 28+ messages in thread
From: Peter Maydell @ 2015-09-19 16:56 UTC (permalink / raw)
To: Andreas Färber; +Cc: QEMU Developers, Eduardo Habkost, Markus Armbruster
On 19 September 2015 at 15:43, Andreas Färber <afaerber@suse.de> wrote:
> Hello Peter,
>
> This is my QOM (devices) patch queue. Please pull.
>
> Regards,
> Andreas
>
> Cc: Peter Maydell <peter.maydell@linaro.org>
> Cc: Markus Armbruster <armbru@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
>
> The following changes since commit b12a84ce3c27e42c8f51c436aa196938d5cc2c71:
>
> cocoa: Suppress Cocoa window with -display (2015-09-18 18:33:02 +0100)
>
> are available in the git repository at:
>
> git://github.com/afaerber/qemu-cpu.git tags/qom-devices-for-peter
>
> for you to fetch changes up to 3b53e45f43825caaaf4fad6a5b85ce6a9949ff02:
>
> machine: Eliminate QEMUMachine and qemu_register_machine() (2015-09-19 16:40:30 +0200)
>
> ----------------------------------------------------------------
> QOM infrastructure fixes and device conversions
>
> * QOM API error handling fixes
> * Performance improvements for device GPIO property creation
> * Remaining conversion of QEMUMachine to QOM
>
> ----------------------------------------------------------------
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 28+ messages in thread