aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <philmd@linaro.org>2023-10-03 14:30:23 +0200
committerRichard Henderson <richard.henderson@linaro.org>2023-10-03 08:00:25 -0700
commit59851868a2fb632dbf080feda814137fd60242db (patch)
tree257533567b271303b9a33adbd3f7ecffa5266610
parent1aa1d8308d46c5ee3b8558f9f916f5da2492a60a (diff)
downloadqemu-59851868a2fb632dbf080feda814137fd60242db.zip
qemu-59851868a2fb632dbf080feda814137fd60242db.tar.gz
qemu-59851868a2fb632dbf080feda814137fd60242db.tar.bz2
accel: Declare AccelClass::cpu_common_[un]realize() handlers
Currently accel_cpu_realize() only performs target-specific realization. Introduce the cpu_common_[un]realize fields in the base AccelClass to be able to perform target-agnostic [un]realization of vCPUs. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-Id: <20231003123026.99229-6-philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r--accel/accel-common.c21
-rw-r--r--include/qemu/accel.h2
2 files changed, 21 insertions, 2 deletions
diff --git a/accel/accel-common.c b/accel/accel-common.c
index e9548ea..11d74b4 100644
--- a/accel/accel-common.c
+++ b/accel/accel-common.c
@@ -122,15 +122,32 @@ void accel_cpu_instance_init(CPUState *cpu)
bool accel_cpu_common_realize(CPUState *cpu, Error **errp)
{
CPUClass *cc = CPU_GET_CLASS(cpu);
+ AccelState *accel = current_accel();
+ AccelClass *acc = ACCEL_GET_CLASS(accel);
- if (cc->accel_cpu && cc->accel_cpu->cpu_target_realize) {
- return cc->accel_cpu->cpu_target_realize(cpu, errp);
+ /* target specific realization */
+ if (cc->accel_cpu && cc->accel_cpu->cpu_target_realize
+ && !cc->accel_cpu->cpu_target_realize(cpu, errp)) {
+ return false;
}
+
+ /* generic realization */
+ if (acc->cpu_common_realize && !acc->cpu_common_realize(cpu, errp)) {
+ return false;
+ }
+
return true;
}
void accel_cpu_common_unrealize(CPUState *cpu)
{
+ AccelState *accel = current_accel();
+ AccelClass *acc = ACCEL_GET_CLASS(accel);
+
+ /* generic unrealization */
+ if (acc->cpu_common_unrealize) {
+ acc->cpu_common_unrealize(cpu);
+ }
}
int accel_supported_gdbstub_sstep_flags(void)
diff --git a/include/qemu/accel.h b/include/qemu/accel.h
index 446153b..972a849 100644
--- a/include/qemu/accel.h
+++ b/include/qemu/accel.h
@@ -43,6 +43,8 @@ typedef struct AccelClass {
bool (*has_memory)(MachineState *ms, AddressSpace *as,
hwaddr start_addr, hwaddr size);
#endif
+ bool (*cpu_common_realize)(CPUState *cpu, Error **errp);
+ void (*cpu_common_unrealize)(CPUState *cpu);
/* gdbstub related hooks */
int (*gdbstub_supported_sstep_flags)(void);