qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 7/8] pseries: savevm support for PAPR virtual SC


From: Alexey Kardashevskiy
Subject: Re: [Qemu-devel] [PATCH 7/8] pseries: savevm support for PAPR virtual SCSI
Date: Mon, 27 May 2013 16:48:12 +1000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130402 Thunderbird/17.0.5

On 05/06/2013 05:37 PM, Paolo Bonzini wrote:
> Il 03/05/2013 03:38, David Gibson ha scritto:
>> This patch adds the necessary support for saving the state of the PAPR VIO
>> virtual SCSI device.  This turns out to be trivial, because the generiC
>> SCSI code already quiesces the attached virtual SCSI bus.
>>
>> Signed-off-by: David Gibson <address@hidden>
>> ---
>>  hw/scsi/spapr_vscsi.c |   28 ++++++++++++++++++++++++++++
>>  1 file changed, 28 insertions(+)
>>
>> diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c
>> index 3d322d5..f416871 100644
>> --- a/hw/scsi/spapr_vscsi.c
>> +++ b/hw/scsi/spapr_vscsi.c
>> @@ -954,6 +954,33 @@ static Property spapr_vscsi_properties[] = {
>>      DEFINE_PROP_END_OF_LIST(),
>>  };
>>  
>> +static void spapr_vscsi_pre_save(void *opaque)
>> +{
>> +    VSCSIState *s = opaque;
>> +    int i;
>> +
>> +    /* Can't save active requests, apparently the general SCSI code
>> +     * quiesces the queue for us on vmsave */
>> +    for (i = 0; i < VSCSI_REQ_LIMIT; i++) {
>> +        assert(!s->reqs[i].active);
>> +    }
>> +}
> 
> This is only true when the rerror and werror options have the values
> "ignore" or "report".  See virtio-scsi for an example of how to save the
> requests using the save_request and load_request callbacks in SCSIBusInfo.


Sigh.
How do you test that requests are saved/restored correctly? What does
happen to requests which were already sent to the real hardware (real block
device, etc) but have not completed at the moment of the end of migration?


> Paolo
> 
>> +static const VMStateDescription vmstate_spapr_vscsi = {
>> +    .name = "spapr_vscsi",
>> +    .version_id = 1,
>> +    .minimum_version_id = 1,
>> +    .minimum_version_id_old = 1,
>> +    .pre_save = spapr_vscsi_pre_save,
>> +    .fields      = (VMStateField []) {
>> +        VMSTATE_SPAPR_VIO(vdev, VSCSIState),
>> +        /* VSCSI state */
>> +        /* ???? */
>> +
>> +        VMSTATE_END_OF_LIST()
>> +    },
>> +};
>> +
>>  static void spapr_vscsi_class_init(ObjectClass *klass, void *data)
>>  {
>>      DeviceClass *dc = DEVICE_CLASS(klass);
>> @@ -968,6 +995,7 @@ static void spapr_vscsi_class_init(ObjectClass *klass, 
>> void *data)
>>      k->signal_mask = 0x00000001;
>>      dc->props = spapr_vscsi_properties;
>>      k->rtce_window_size = 0x10000000;
>> +    dc->vmsd = &vmstate_spapr_vscsi;
>>  }
>>  
>>  static const TypeInfo spapr_vscsi_info = {
>>
> 


-- 
Alexey



reply via email to

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