X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=accel.c;h=664bb88422a4babeaaa47416d64e8bba6f143172;hb=15d8f91446fe922ccabb20b7e4ab4b32d8f7b5a7;hp=b151d558a5ffd414bc10d43ca9c2c72c2bb8b8e7;hpb=0d15da8e6fc3cbcd088476c561dcc88b9aae493a;p=mirror_qemu.git 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; }