From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:49626) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T6FlE-0003yV-8E for qemu-devel@nongnu.org; Tue, 28 Aug 2012 02:58:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T6FlD-0008TH-8O for qemu-devel@nongnu.org; Tue, 28 Aug 2012 02:58:52 -0400 Received: from mail.ispras.ru ([83.149.199.43]:40840) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T6FlD-0008TB-10 for qemu-devel@nongnu.org; Tue, 28 Aug 2012 02:58:51 -0400 Received: from PASHAISP (unknown [80.250.189.177]) by mail.ispras.ru (Postfix) with ESMTP id 5427F24FE7E for ; Tue, 28 Aug 2012 10:58:49 +0400 (MSK) From: "Pavel Dovgaluk" Date: Tue, 28 Aug 2012 10:58:49 +0400 Message-ID: <002701cd84ea$93644c50$ba2ce4f0$@Dovgaluk@ispras.ru> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Language: ru Subject: [Qemu-devel] [PATCH] Save/load PC speaker internal state (v2) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: 'qemu-devel' 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 --- 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 = {