X-Git-Url: https://repo.jachan.dev/qemu.git/blobdiff_plain/0d15da8e6fc3cbcd088476c561dcc88b9aae493a..b8c7193fe9479a941a56863595766d4517152dae:/accel.c diff --git a/accel.c b/accel.c index b151d558a5..664bb88422 100644 --- a/accel.c +++ b/accel.c @@ -23,7 +23,9 @@ * THE SOFTWARE. */ +#include "qemu/osdep.h" #include "sysemu/accel.h" +#include "hw/boards.h" #include "qemu-common.h" #include "sysemu/arch_init.h" #include "sysemu/sysemu.h" @@ -35,7 +37,7 @@ int tcg_tb_size; static bool tcg_allowed = true; -static int tcg_init(MachineClass *mc) +static int tcg_init(MachineState *ms) { tcg_exec_init(tcg_tb_size * 1024 * 1024); return 0; @@ -57,18 +59,24 @@ static AccelClass *accel_find(const char *opt_name) return ac; } -static int accel_init_machine(AccelClass *acc, MachineClass *mc) +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(mc); + ret = acc->init_machine(ms); if (ret < 0) { + ms->accelerator = NULL; *(acc->allowed) = false; + object_unref(OBJECT(accel)); } return ret; } -int configure_accelerator(MachineClass *mc) +void configure_accelerator(MachineState *ms) { const char *p; char buf[10]; @@ -98,7 +106,7 @@ int configure_accelerator(MachineClass *mc) acc->name); continue; } - ret = accel_init_machine(acc, mc); + ret = accel_init_machine(acc, ms); if (ret < 0) { init_failed = true; fprintf(stderr, "failed to initialize %s: %s\n", @@ -119,8 +127,6 @@ int configure_accelerator(MachineClass *mc) if (init_failed) { fprintf(stderr, "Back to %s accelerator.\n", acc->name); } - - return !accel_initialised; }