[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] Save/load PC speaker internal state (v2)
From: |
Jan Kiszka |
Subject: |
Re: [Qemu-devel] [PATCH] Save/load PC speaker internal state (v2) |
Date: |
Wed, 29 Aug 2012 10:57:12 +0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 |
On 2012-08-29 09:05, Pavel Dovgaluk wrote:
>> -----Original Message-----
>> From: Jan Kiszka [mailto:address@hidden
>> 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<address@hidden>
>>> ---
>>> 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),
>>
>> Just to understand the plan: The intention is to leave the audio
>> disabled after resume, just saving those bits that can be read back via
>> IO port, correct? Then please document this in a comment, otherwise fix it.
>
> 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 used for
> samples generation could be not reloaded yet at that moment and the buffer'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
signature.asc
Description: OpenPGP digital signature