diff mbox

Save/load PC speaker internal state (v2)

Message ID 002701cd84ea$93644c50$ba2ce4f0$@Dovgaluk@ispras.ru
State New
Headers show

Commit Message

Pavel Dovgalyuk Aug. 28, 2012, 6:58 a.m. UTC
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.dovgaluk@gmail.com>
---
 hw/pcspk.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)
diff mbox

Patch

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 = {