From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:35905) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T6e5f-00008N-Rx for qemu-devel@nongnu.org; Wed, 29 Aug 2012 04:57:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1T6e5a-0002ZJ-0P for qemu-devel@nongnu.org; Wed, 29 Aug 2012 04:57:35 -0400 Received: from mout.web.de ([212.227.17.12]:58977) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1T6e5Z-0002Z7-ND for qemu-devel@nongnu.org; Wed, 29 Aug 2012 04:57:29 -0400 Message-ID: <503DD968.9080202@web.de> Date: Wed, 29 Aug 2012 10:57:12 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <48961.0236989849$1346137146@news.gmane.org> <503C6F61.90900@web.de> <000c01cd85b4$ac3f75e0$04be61a0$@Dovgaluk@ispras.ru> In-Reply-To: <000c01cd85b4$ac3f75e0$04be61a0$@Dovgaluk@ispras.ru> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigF1E44E5053F109F09CD2512D" Subject: Re: [Qemu-devel] [PATCH] Save/load PC speaker internal state (v2) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Pavel Dovgaluk Cc: 'qemu-devel' This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigF1E44E5053F109F09CD2512D Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On 2012-08-29 09:05, Pavel Dovgaluk wrote: >> -----Original Message----- >> From: Jan Kiszka [mailto:jan.kiszka@web.de] >> Sent: Tuesday, August 28, 2012 11:13 AM >> To: Pavel Dovgaluk >> Cc: 'qemu-devel' >> Subject: Re: [PATCH] Save/load PC speaker internal state (v2) >> >> On 2012-08-28 08:58, Pavel Dovgaluk wrote: >>> 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 =3D "pcspk"; >>> @@ -159,6 +159,18 @@ static const MemoryRegionOps pcspk_io_ops =3D { >>> }, >>> }; >>> >>> +static const VMStateDescription vmstate_spk =3D { >>> + .name =3D "pcspk", >>> + .version_id =3D 1, >>> + .minimum_version_id =3D 1, >>> + .minimum_version_id_old =3D 1, >>> + .fields =3D (VMStateField[]) { >>> + VMSTATE_UINT8(data_on, PCSpkState), >>> + VMSTATE_UINT8(dummy_refresh_clock, PCSpkState), >> >> Just to understand the plan: The intention is to leave the audio >> disabled after resume, just saving those bits that can be read back vi= a >> IO port, correct? Then please document this in a comment, otherwise fi= x it. >=20 > The plan is to make guest system behavior deterministic. > Resuming the audio is not needed for this but could be a useful side = effect. > I thought about solutions of this problem and got the following: > we cannot reinitialize the buffer in post_load function, because pit us= ed for > samples generation could be not reloaded yet at that moment and the buf= fer's state > will be invalid in this case. > So the only solution is saving and loading the complete state of the = audio buffer. Theoretically, you could save the required PIT state inside the pcspk VMSD to solve this (still less bytes than saving the buffer). However, I see no relevant loss in leaving audio off until the guest fiddles with the controls again. I'm just asking for documenting this. Jan --------------enigF1E44E5053F109F09CD2512D Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://www.enigmail.net/ iEYEARECAAYFAlA92WwACgkQitSsb3rl5xS40ACbBQ1Ta4YBCrRxc8jD7EMdmdO1 JYEAn3pC4xOrhto2O8onbXf0wGM0z59g =4Bxj -----END PGP SIGNATURE----- --------------enigF1E44E5053F109F09CD2512D--