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>
This commit is contained in:
parent
1aa1d8308d
commit
59851868a2
@ -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)
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user