qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/2] KVM: i386: Add support for save and restore


From: Liran Alon
Subject: Re: [Qemu-devel] [PATCH 2/2] KVM: i386: Add support for save and restore nested state
Date: Sat, 15 Sep 2018 23:57:52 +0300


> On 15 Sep 2018, at 23:48, Liran Alon <address@hidden> wrote:
> 
> 
> 
>> On 14 Sep 2018, at 18:08, Paolo Bonzini <address@hidden> wrote:
>> 
>> On 14/09/2018 16:31, Liran Alon wrote:
>>>> There is still a problem, however, in that the same input stream would
>>>> be parsed differently depending on the kernel version.  In particular,
>>>> if in the future the maximum nested state size grows, you break all
>>>> existing save files.
>>> 
>>> I’m not sure I agree with this.
>>> 1) Newer kernels should change struct only by utilizing unused fields in 
>>> current struct
>>> or enlarging it with extra fields. It should not change the meaning of 
>>> existing fields.
>> 
>> Newer kernels will return a larger size, which is stored in
>> env->nested_state_len, and the file format depends on it:
>> 
>>> +        VMSTATE_VBUFFER_UINT32(env.nested_state, X86CPU, 
>>> +                               0, NULL, 
>>> +                               env.nested_state_len), 
>> 
> 
> Oh. I thought that QEMU will just receive to dest buffer only what was sent 
> from source buffer.
> I didn’t know that it also enforces that the sizes of the source and dest 
> buffer are equal.
> (I thought that dest_buffer_size only needed to be >= src_buffer_size).
> 
> Anyway, my intention here was that QEMU will only enforce (dest_buffer_size 
> >= source_buffer_size)
> and if so, receive source buffer into destination buffer.
> Is there a simple way to do this in QEMU’s VMSTATE framework without 
> implementing custom save/load callbacks?
> 

One possible, but not so elegant, way to do so is to put env.nested_state_len 
as part of VMState
and change env.nested_state to be declared in VMState as 
VMSTATE_VBUFFER_ALLOC_UINT32().
Then, make nested_state_post_load() to realloc env.nested_state in size 
specified by kvm_nested_state_length().
To guarantee that env.nested_state is always at max size that local kernel 
supports.

-Liran




reply via email to

[Prev in Thread] Current Thread [Next in Thread]