aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEduardo Habkost <ehabkost@redhat.com>2014-09-26 17:45:31 -0300
committerPaolo Bonzini <pbonzini@redhat.com>2014-10-09 15:36:14 +0200
commitac2da55e01b1a84e6bba32768211201dec230232 (patch)
tree107c32c8d8667a3577146d7f151040f58dac6556
parentf6a1ef64408a5f7f52601589fef2a850b93d817e (diff)
accel: Create accel object when initializing machine
Create an actual TYPE_ACCEL object when initializing a machine. This will allow accelerator classes to implement some initialization on instance_init, and to save state on the TYPE_ACCEL object. Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--accel.c7
-rw-r--r--include/hw/boards.h2
2 files changed, 9 insertions, 0 deletions
diff --git a/accel.c b/accel.c
index 6087ab32b7..74e41daaa5 100644
--- a/accel.c
+++ b/accel.c
@@ -32,6 +32,7 @@
#include "sysemu/qtest.h"
#include "hw/xen/xen.h"
#include "qom/object.h"
+#include "hw/boards.h"
int tcg_tb_size;
static bool tcg_allowed = true;
@@ -60,11 +61,17 @@ static AccelClass *accel_find(const char *opt_name)
static int accel_init_machine(AccelClass *acc, MachineState *ms)
{
+ ObjectClass *oc = OBJECT_CLASS(acc);
+ const char *cname = object_class_get_name(oc);
+ AccelState *accel = ACCEL(object_new(cname));
int ret;
+ ms->accelerator = accel;
*(acc->allowed) = true;
ret = acc->init_machine(ms);
if (ret < 0) {
+ ms->accelerator = NULL;
*(acc->allowed) = false;
+ object_unref(OBJECT(accel));
}
return ret;
}
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 0058c49d8d..6a60c3cf97 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -5,6 +5,7 @@
#include "qemu/typedefs.h"
#include "sysemu/blockdev.h"
+#include "sysemu/accel.h"
#include "hw/qdev.h"
#include "qom/object.h"
@@ -131,6 +132,7 @@ struct MachineState {
char *kernel_cmdline;
char *initrd_filename;
const char *cpu_model;
+ AccelState *accelerator;
};
#endif