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)
|
bool accel_cpu_common_realize(CPUState *cpu, Error **errp)
|
||||||
{
|
{
|
||||||
CPUClass *cc = CPU_GET_CLASS(cpu);
|
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) {
|
/* target specific realization */
|
||||||
return cc->accel_cpu->cpu_target_realize(cpu, errp);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void accel_cpu_common_unrealize(CPUState *cpu)
|
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)
|
int accel_supported_gdbstub_sstep_flags(void)
|
||||||
|
@ -43,6 +43,8 @@ typedef struct AccelClass {
|
|||||||
bool (*has_memory)(MachineState *ms, AddressSpace *as,
|
bool (*has_memory)(MachineState *ms, AddressSpace *as,
|
||||||
hwaddr start_addr, hwaddr size);
|
hwaddr start_addr, hwaddr size);
|
||||||
#endif
|
#endif
|
||||||
|
bool (*cpu_common_realize)(CPUState *cpu, Error **errp);
|
||||||
|
void (*cpu_common_unrealize)(CPUState *cpu);
|
||||||
|
|
||||||
/* gdbstub related hooks */
|
/* gdbstub related hooks */
|
||||||
int (*gdbstub_supported_sstep_flags)(void);
|
int (*gdbstub_supported_sstep_flags)(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user