Introduce a TCGCPUOps::cpu_realize hook and call it at the end of tcg_exec_realizefn().
Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- include/accel/tcg/cpu-ops.h | 1 + accel/tcg/cpu-exec.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/accel/tcg/cpu-ops.h b/include/accel/tcg/cpu-ops.h index d7d329e419d..5eba6949ba1 100644 --- a/include/accel/tcg/cpu-ops.h +++ b/include/accel/tcg/cpu-ops.h @@ -49,6 +49,7 @@ struct TCGCPUOps { */ void (*initialize)(void); void (*cpu_instance_init)(CPUState *cpu); + bool (*cpu_realize)(CPUState *cpu, Error **errp); /** * @translate_code: Translate guest instructions to TCGOps * @cpu: cpu context diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index ef44c12b601..1efa3bbe53d 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -1056,11 +1056,11 @@ void tcg_cpu_instance_init(CPUState *cpu) bool tcg_exec_realizefn(CPUState *cpu, Error **errp) { + const TCGCPUOps *tcg_ops = cpu->cc->tcg_ops; static bool tcg_target_initialized; if (!tcg_target_initialized) { /* Check mandatory TCGCPUOps handlers */ - const TCGCPUOps *tcg_ops = cpu->cc->tcg_ops; #ifndef CONFIG_USER_ONLY assert(tcg_ops->cpu_exec_halt); assert(tcg_ops->cpu_exec_interrupt); @@ -1081,6 +1081,10 @@ bool tcg_exec_realizefn(CPUState *cpu, Error **errp) #endif /* !CONFIG_USER_ONLY */ /* qemu_plugin_vcpu_init_hook delayed until cpu_index assigned. */ + if (tcg_ops->cpu_realize && !tcg_ops->cpu_realize(cpu, errp)) { + return false; + } + return true; } -- 2.53.0
