AccelClass is for methods dealing with AccelState.
When dealing with vCPUs, we want AccelOpsClass.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/qemu/accel.h | 2 --
include/system/accel-ops.h | 2 ++
accel/accel-common.c | 10 ++++++----
accel/tcg/tcg-accel-ops.c | 3 +++
accel/tcg/tcg-all.c | 2 --
5 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/include/qemu/accel.h b/include/qemu/accel.h
index 04d252d3d65..aee0a2e3309 100644
--- a/include/qemu/accel.h
+++ b/include/qemu/accel.h
@@ -41,8 +41,6 @@ typedef struct AccelClass {
AccelOpsClass *ops;
int (*init_machine)(MachineState *ms, AccelState *as);
- bool (*cpu_common_realize)(CPUState *cpu, Error **errp);
- void (*cpu_common_unrealize)(CPUState *cpu);
/* system related hooks */
void (*setup_post)(MachineState *ms, AccelState *accel);
diff --git a/include/system/accel-ops.h b/include/system/accel-ops.h
index d854b84a66a..fb199dc78f0 100644
--- a/include/system/accel-ops.h
+++ b/include/system/accel-ops.h
@@ -34,6 +34,8 @@ struct AccelOpsClass {
/* initialization function called when accel is chosen */
void (*ops_init)(AccelClass *ac);
+ bool (*cpu_common_realize)(CPUState *cpu, Error **errp);
+ void (*cpu_common_unrealize)(CPUState *cpu);
bool (*cpu_target_realize)(CPUState *cpu, Error **errp);
void (*cpu_reset_hold)(CPUState *cpu);
diff --git a/accel/accel-common.c b/accel/accel-common.c
index 1d04610f55e..d1a5f3ca3df 100644
--- a/accel/accel-common.c
+++ b/accel/accel-common.c
@@ -102,10 +102,12 @@ bool accel_cpu_common_realize(CPUState *cpu, Error **errp)
}
/* generic realization */
- if (acc->cpu_common_realize && !acc->cpu_common_realize(cpu, errp)) {
+ if (acc->ops->cpu_common_realize
+ && !acc->ops->cpu_common_realize(cpu, errp)) {
return false;
}
- if (acc->ops->cpu_target_realize && !acc->ops->cpu_target_realize(cpu, errp)) {
+ if (acc->ops->cpu_target_realize
+ && !acc->ops->cpu_target_realize(cpu, errp)) {
return false;
}
@@ -118,8 +120,8 @@ void accel_cpu_common_unrealize(CPUState *cpu)
AccelClass *acc = ACCEL_GET_CLASS(accel);
/* generic unrealization */
- if (acc->cpu_common_unrealize) {
- acc->cpu_common_unrealize(cpu);
+ if (acc->ops->cpu_common_unrealize) {
+ acc->ops->cpu_common_unrealize(cpu);
}
}
diff --git a/accel/tcg/tcg-accel-ops.c b/accel/tcg/tcg-accel-ops.c
index 07b1ec4ea50..95ff451c148 100644
--- a/accel/tcg/tcg-accel-ops.c
+++ b/accel/tcg/tcg-accel-ops.c
@@ -46,6 +46,7 @@
#include "tcg-accel-ops-mttcg.h"
#include "tcg-accel-ops-rr.h"
#include "tcg-accel-ops-icount.h"
+#include "internal-common.h"
/* common functionality among all TCG variants */
@@ -212,6 +213,8 @@ static void tcg_accel_ops_init(AccelClass *ac)
}
}
+ ops->cpu_common_realize = tcg_exec_realizefn;
+ ops->cpu_common_unrealize = tcg_exec_unrealizefn;
ops->cpu_reset_hold = tcg_cpu_reset_hold;
ops->insert_breakpoint = tcg_insert_breakpoint;
ops->remove_breakpoint = tcg_remove_breakpoint;
diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c
index 164bba41ed9..28206ca5e76 100644
--- a/accel/tcg/tcg-all.c
+++ b/accel/tcg/tcg-all.c
@@ -244,8 +244,6 @@ static void tcg_accel_class_init(ObjectClass *oc, const void *data)
AccelClass *ac = ACCEL_CLASS(oc);
ac->name = "tcg";
ac->init_machine = tcg_init_machine;
- ac->cpu_common_realize = tcg_exec_realizefn;
- ac->cpu_common_unrealize = tcg_exec_unrealizefn;
ac->allowed = &tcg_allowed;
ac->supports_guest_debug = tcg_supports_guest_debug;
ac->gdbstub_supported_sstep_flags = tcg_gdbstub_supported_sstep_flags;
--
2.49.0