Save PC speaker state to remove differences between system states after saving the snapshot and after loading it again. This patch is needed for deterministic replay of the execution.
v2: Do not save the data that cannot affect the guest code behavior. Signed-off-by: Pavel Dovgalyuk<pavel.dovga...@gmail.com> --- hw/pcspk.c | 17 +++++++++++++++-- 1 files changed, 15 insertions(+), 2 deletions(-) diff --git a/hw/pcspk.c b/hw/pcspk.c index e430324..07a3de0 100644 --- a/hw/pcspk.c +++ b/hw/pcspk.c @@ -46,8 +46,8 @@ typedef struct { unsigned int pit_count; unsigned int samples; unsigned int play_pos; - int data_on; - int dummy_refresh_clock; + uint8_t data_on; + uint8_t dummy_refresh_clock; } PCSpkState; static const char *s_spk = "pcspk"; @@ -159,6 +159,18 @@ static const MemoryRegionOps pcspk_io_ops = { }, }; +static const VMStateDescription vmstate_spk = { + .name = "pcspk", + .version_id = 1, + .minimum_version_id = 1, + .minimum_version_id_old = 1, + .fields = (VMStateField[]) { + VMSTATE_UINT8(data_on, PCSpkState), + VMSTATE_UINT8(dummy_refresh_clock, PCSpkState), + VMSTATE_END_OF_LIST() + } +}; + static int pcspk_initfn(ISADevice *dev) { PCSpkState *s = DO_UPCAST(PCSpkState, dev, dev); @@ -185,6 +197,7 @@ static void pcspk_class_initfn(ObjectClass *klass, void *data) ic->init = pcspk_initfn; dc->no_user = 1; dc->props = pcspk_properties; + dc->vmsd = &vmstate_spk; } static TypeInfo pcspk_info = {