qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH/s390-next 3/3] s390x/flic: migrate ais states


From: Christian Borntraeger
Subject: Re: [Qemu-devel] [PATCH/s390-next 3/3] s390x/flic: migrate ais states
Date: Thu, 13 Jul 2017 15:02:08 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.0

On 07/13/2017 02:27 PM, Cornelia Huck wrote:
> On Thu, 13 Jul 2017 12:40:29 +0200
> Christian Borntraeger <address@hidden> wrote:
> 
>> From: Yi Min Zhao <address@hidden>
>>
>> During migration we should transfer ais states to the target guest.
>> This patch introduces a subsection to kvm_s390_flic_vmstate and new
>> vmsd for qemu_flic. The ais states need to be migrated only when
>> ais is supported.
>>
>> Signed-off-by: Yi Min Zhao <address@hidden>
>> Signed-off-by: Christian Borntraeger <address@hidden>
>> ---
>>  hw/intc/s390_flic.c          | 20 ++++++++++++
>>  hw/intc/s390_flic_kvm.c      | 75 
>> ++++++++++++++++++++++++++++++++++++++++++++
>>  include/hw/s390x/s390_flic.h |  1 +
>>  3 files changed, 96 insertions(+)
>>
> 
>> diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c
>> index d93503f..4cf73ee 100644
>> --- a/hw/intc/s390_flic_kvm.c
>> +++ b/hw/intc/s390_flic_kvm.c
>> @@ -413,7 +413,78 @@ out:
>>      return r;
>>  }
>>  
>> +typedef struct KVMS390FLICStateMigTmp {
>> +    KVMS390FLICState *parent;
>> +    uint8_t simm;
>> +    uint8_t nimm;
>> +} KVMS390FLICStateMigTmp;
>> +
>> +static void kvm_flic_ais_pre_save(void *opaque)
>> +{
>> +    KVMS390FLICStateMigTmp *tmp = opaque;
>> +    KVMS390FLICState *flic = tmp->parent;
>> +    struct kvm_s390_ais_all ais;
>> +    struct kvm_device_attr attr = {
>> +        .group = KVM_DEV_FLIC_AISM_ALL,
>> +        .addr = (uint64_t)&ais,
>> +        .attr = sizeof(ais),
>> +    };
>> +
>> +    if (ioctl(flic->fd, KVM_GET_DEVICE_ATTR, &attr)) {
>> +        error_report("Failed to retrieve kvm flic ais states");
> 
> There's not much else we can do in that case, is there?
> 
>> +        return;
>> +    }
>> +
>> +    tmp->simm = ais.simm;
>> +    tmp->nimm = ais.nimm;
>> +}
>> +
>> +static int kvm_flic_ais_post_load(void *opaque, int version_id)
>> +{
>> +    KVMS390FLICStateMigTmp *tmp = opaque;
>> +    KVMS390FLICState *flic = tmp->parent;
>> +    struct kvm_s390_ais_all ais = {
>> +        .simm = tmp->simm,
>> +        .nimm = tmp->nimm,
>> +    };
>> +    struct kvm_device_attr attr = {
>> +        .group = KVM_DEV_FLIC_AISM_ALL,
>> +        .addr = (uint64_t)&ais,
>> +    };
>> +
>> +    if (!ais_needed(flic)) {
>> +        return -ENOSYS;
>> +    }
> 
> I do not understand this... does that mean that
> - we should never get here or 
> - we should not try to change the fields or
> - I need coffee?

My understanding is that this should not happen with a normal setup, 
but it can happen if the user does something "wrong". For example
use qemu without libvirt and with -cpu host (which is not migration safe)
and do a migration from a host that has AIS to a host that has no AIS.
In that case the target system will reject the migration (late, but hopefully
not too late).




reply via email to

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