Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- include/qemu/accel.h | 3 +++ accel/accel-system.c | 9 +++++++++ system/cpus.c | 1 + 3 files changed, 13 insertions(+)
diff --git a/include/qemu/accel.h b/include/qemu/accel.h index 518c99ab643..065de80a87b 100644 --- a/include/qemu/accel.h +++ b/include/qemu/accel.h @@ -47,6 +47,7 @@ typedef struct AccelClass { bool (*has_memory)(AccelState *accel, AddressSpace *as, hwaddr start_addr, hwaddr size); bool (*cpus_are_resettable)(AccelState *as); + void (*pre_resume_vm)(AccelState *as, bool step_pending); /* gdbstub related hooks */ bool (*supports_guest_debug)(AccelState *as); @@ -86,6 +87,8 @@ int accel_init_machine(AccelState *accel, MachineState *ms); /* Called just before os_setup_post (ie just before drop OS privs) */ void accel_setup_post(MachineState *ms); +void accel_pre_resume(MachineState *ms, bool step_pending); + /** * accel_cpu_instance_init: * @cpu: The CPU that needs to do accel-specific object initializations. diff --git a/accel/accel-system.c b/accel/accel-system.c index 637e2390f35..11ba8e24d60 100644 --- a/accel/accel-system.c +++ b/accel/accel-system.c @@ -62,6 +62,15 @@ void accel_setup_post(MachineState *ms) } } +void accel_pre_resume(MachineState *ms, bool step_pending) +{ + AccelState *accel = ms->accelerator; + AccelClass *acc = ACCEL_GET_CLASS(accel); + if (acc->pre_resume_vm) { + acc->pre_resume_vm(accel, step_pending); + } +} + bool cpus_are_resettable(void) { AccelState *accel = current_accel(); diff --git a/system/cpus.c b/system/cpus.c index 4fb764ac880..98ae8b1e271 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -765,6 +765,7 @@ int vm_prepare_start(bool step_pending) if (cpus_accel->synchronize_pre_resume) { cpus_accel->synchronize_pre_resume(step_pending); } + accel_pre_resume(MACHINE(qdev_get_machine()), step_pending); /* We are sending this now, but the CPUs will be resumed shortly later */ qapi_event_send_resume(); -- 2.49.0