All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jianjun Duan <duanj@linux.vnet.ibm.com>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, dmitry@daynix.com,
	peter.maydell@linaro.org, kraxel@redhat.com, mst@redhat.com,
	david@gibson.dropbear.id.au, pbonzini@redhat.com,
	veroniabahaa@gmail.com, quintela@redhat.com,
	amit.shah@redhat.com, mreitz@redhat.com, kwolf@redhat.com,
	rth@twiddle.net, aurelien@aurel32.net, leon.alrae@imgtec.com,
	blauwirbel@gmail.com, mark.cave-ayland@ilande.co.uk,
	mdroth@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [Qemu-ppc] [QEMU PATCH v5 3/6] migration: extend VMStateInfo
Date: Fri, 7 Oct 2016 09:35:31 -0700	[thread overview]
Message-ID: <097b567a-dfc9-58f2-0f8e-c63eb6fb13e4@linux.vnet.ibm.com> (raw)
In-Reply-To: <20161007120854.GE2040@work-vm>



On 10/07/2016 05:08 AM, Dr. David Alan Gilbert wrote:
> * Jianjun Duan (duanj@linux.vnet.ibm.com) wrote:
>> Current migration code cannot handle some data structures such as
>> QTAILQ in qemu/queue.h. Here we extend the signatures of put/get
>> in VMStateInfo so that customized handling is supported.
>>
>> Signed-off-by: Jianjun Duan <duanj@linux.vnet.ibm.com>
>> ---
>>  hw/net/vmxnet3.c            | 18 ++++++---
>>  hw/nvram/eeprom93xx.c       |  6 ++-
>>  hw/nvram/fw_cfg.c           |  6 ++-
>>  hw/pci/msix.c               |  6 ++-
>>  hw/pci/pci.c                | 12 ++++--
>>  hw/pci/shpc.c               |  5 ++-
>>  hw/scsi/scsi-bus.c          |  6 ++-
>>  hw/timer/twl92230.c         |  6 ++-
>>  hw/usb/redirect.c           | 18 ++++++---
>>  hw/virtio/virtio-pci.c      |  6 ++-
>>  hw/virtio/virtio.c          |  6 ++-
>>  include/migration/vmstate.h | 10 +++--
>>  migration/savevm.c          |  5 ++-
>>  migration/vmstate.c         | 95 ++++++++++++++++++++++++++++-----------------
>>  target-alpha/machine.c      |  5 ++-
>>  target-arm/machine.c        | 12 ++++--
>>  target-i386/machine.c       | 21 ++++++----
>>  target-mips/machine.c       | 10 +++--
>>  target-ppc/machine.c        | 10 +++--
>>  target-sparc/machine.c      |  5 ++-
>>  20 files changed, 171 insertions(+), 97 deletions(-)
>>
> 
> <snip>
> 
>> diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c
>> index 444672a..2ca4b46 100644
>> --- a/hw/usb/redirect.c
>> +++ b/hw/usb/redirect.c
>> @@ -2154,7 +2154,8 @@ static int usbredir_post_load(void *priv, int version_id)
>>  }
>>  
>>  /* For usbredirparser migration */
>> -static void usbredir_put_parser(QEMUFile *f, void *priv, size_t unused)
>> +static void usbredir_put_parser(QEMUFile *f, void *priv, size_t unused,
>> +                                void *opaque, QJSON *vmdesc)
>>  {
>>      USBRedirDevice *dev = priv;
>>      uint8_t *data;
>> @@ -2174,7 +2175,8 @@ static void usbredir_put_parser(QEMUFile *f, void *priv, size_t unused)
>>      free(data);
>>  }
>>  
>> -static int usbredir_get_parser(QEMUFile *f, void *priv, size_t unused)
>> +static int usbredir_get_parser(QEMUFile *f, void *priv, size_t unused,
>> +                               void *opaque)
> 
> Neither of these built for me; I had to change those to VMStateField rather than void *;
> 
> also is this series tested ontop of Halil's patches - because without them
> I'm finding I also had to fix up most of the other virtio devices.
> 
> Dave

I built it on top of ppc-for-2.8 without problems. Is Hail's patch in
ppc-for-2.8 yet?

Thanks,
Jianjun

> 
> 
>>      USBRedirDevice *dev = priv;
>>      uint8_t *data;
>> @@ -2217,7 +2219,8 @@ static const VMStateInfo usbredir_parser_vmstate_info = {
>>  
>>  
>>  /* For buffered packets (iso/irq) queue migration */
>> -static void usbredir_put_bufpq(QEMUFile *f, void *priv, size_t unused)
>> +static void usbredir_put_bufpq(QEMUFile *f, void *priv, size_t unused,
>> +                               VMStateField *field, QJSON *vmdesc)
>>  {
>>      struct endp_data *endp = priv;
>>      USBRedirDevice *dev = endp->dev;
>> @@ -2237,7 +2240,8 @@ static void usbredir_put_bufpq(QEMUFile *f, void *priv, size_t unused)
>>      assert(i == endp->bufpq_size);
>>  }
>>  
>> -static int usbredir_get_bufpq(QEMUFile *f, void *priv, size_t unused)
>> +static int usbredir_get_bufpq(QEMUFile *f, void *priv, size_t unused,
>> +                              VMStateField *field)
>>  {
>>      struct endp_data *endp = priv;
>>      USBRedirDevice *dev = endp->dev;
>> @@ -2340,7 +2344,8 @@ static const VMStateDescription usbredir_ep_vmstate = {
>>  
>>  
>>  /* For PacketIdQueue migration */
>> -static void usbredir_put_packet_id_q(QEMUFile *f, void *priv, size_t unused)
>> +static void usbredir_put_packet_id_q(QEMUFile *f, void *priv, size_t unused,
>> +                                     VMStateField *field, QJSON *vmdesc)
>>  {
>>      struct PacketIdQueue *q = priv;
>>      USBRedirDevice *dev = q->dev;
>> @@ -2356,7 +2361,8 @@ static void usbredir_put_packet_id_q(QEMUFile *f, void *priv, size_t unused)
>>      assert(remain == 0);
>>  }
>>  
>> -static int usbredir_get_packet_id_q(QEMUFile *f, void *priv, size_t unused)
>> +static int usbredir_get_packet_id_q(QEMUFile *f, void *priv, size_t unused,
>> +                                    VMStateField *field)
>>  {
>>      struct PacketIdQueue *q = priv;
>>      USBRedirDevice *dev = q->dev;
>> diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
>> index 2d60a00..38a7abd 100644
>> --- a/hw/virtio/virtio-pci.c
>> +++ b/hw/virtio/virtio-pci.c
>> @@ -108,7 +108,8 @@ static bool virtio_pci_has_extra_state(DeviceState *d)
>>      return proxy->flags & VIRTIO_PCI_FLAG_MIGRATE_EXTRA;
>>  }
>>  
>> -static int get_virtio_pci_modern_state(QEMUFile *f, void *pv, size_t size)
>> +static int get_virtio_pci_modern_state(QEMUFile *f, void *pv, size_t size,
>> +                                       VMStateField *field)
>>  {
>>      VirtIOPCIProxy *proxy = pv;
>>      int i;
>> @@ -137,7 +138,8 @@ static void virtio_pci_save_modern_queue_state(VirtIOPCIQueue *vq,
>>      qemu_put_be32(f, vq->used[1]);
>>  }
>>  
>> -static void put_virtio_pci_modern_state(QEMUFile *f, void *pv, size_t size)
>> +static void put_virtio_pci_modern_state(QEMUFile *f, void *pv, size_t size,
>> +                                        VMStateField *field, QJSON *vmdesc)
>>  {
>>      VirtIOPCIProxy *proxy = pv;
>>      int i;
>> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
>> index 18ce333..ade2683 100644
>> --- a/hw/virtio/virtio.c
>> +++ b/hw/virtio/virtio.c
>> @@ -1467,7 +1467,8 @@ static const VMStateDescription vmstate_virtio_ringsize = {
>>      }
>>  };
>>  
>> -static int get_extra_state(QEMUFile *f, void *pv, size_t size)
>> +static int get_extra_state(QEMUFile *f, void *pv, size_t size,
>> +                           VMStateField *field)
>>  {
>>      VirtIODevice *vdev = pv;
>>      BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));
>> @@ -1480,7 +1481,8 @@ static int get_extra_state(QEMUFile *f, void *pv, size_t size)
>>      }
>>  }
>>  
>> -static void put_extra_state(QEMUFile *f, void *pv, size_t size)
>> +static void put_extra_state(QEMUFile *f, void *pv, size_t size,
>> +                            VMStateField *field, QJSON *vmdesc)
>>  {
>>      VirtIODevice *vdev = pv;
>>      BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));
>> diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
>> index 1638ee5..459dd4a 100644
>> --- a/include/migration/vmstate.h
>> +++ b/include/migration/vmstate.h
>> @@ -81,11 +81,13 @@ void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque);
>>  
>>  typedef struct VMStateInfo VMStateInfo;
>>  typedef struct VMStateDescription VMStateDescription;
>> +typedef struct VMStateField VMStateField;
>>  
>>  struct VMStateInfo {
>>      const char *name;
>> -    int (*get)(QEMUFile *f, void *pv, size_t size);
>> -    void (*put)(QEMUFile *f, void *pv, size_t size);
>> +    int (*get)(QEMUFile *f, void *pv, size_t size, VMStateField *field);
>> +    void (*put)(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                QJSON *vmdesc);
>>  };
>>  
>>  enum VMStateFlags {
>> @@ -186,7 +188,7 @@ enum VMStateFlags {
>>      VMS_MULTIPLY_ELEMENTS = 0x4000,
>>  };
>>  
>> -typedef struct {
>> +struct VMStateField {
>>      const char *name;
>>      size_t offset;
>>      size_t size;
>> @@ -199,7 +201,7 @@ typedef struct {
>>      const VMStateDescription *vmsd;
>>      int version_id;
>>      bool (*field_exists)(void *opaque, int version_id);
>> -} VMStateField;
>> +};
>>  
>>  struct VMStateDescription {
>>      const char *name;
>> diff --git a/migration/savevm.c b/migration/savevm.c
>> index ef5c3d1..13b53ad 100644
>> --- a/migration/savevm.c
>> +++ b/migration/savevm.c
>> @@ -220,14 +220,15 @@ void timer_get(QEMUFile *f, QEMUTimer *ts)
>>   * Not in vmstate.c to not add qemu-timer.c as dependency to vmstate.c
>>   */
>>  
>> -static int get_timer(QEMUFile *f, void *pv, size_t size)
>> +static int get_timer(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      QEMUTimer *v = pv;
>>      timer_get(f, v);
>>      return 0;
>>  }
>>  
>> -static void put_timer(QEMUFile *f, void *pv, size_t size)
>> +static void put_timer(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                QJSON *vmdesc)
>>  {
>>      QEMUTimer *v = pv;
>>      timer_put(f, v);
>> diff --git a/migration/vmstate.c b/migration/vmstate.c
>> index fc29acf..66802cb 100644
>> --- a/migration/vmstate.c
>> +++ b/migration/vmstate.c
>> @@ -122,7 +122,7 @@ int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
>>                      ret = vmstate_load_state(f, field->vmsd, addr,
>>                                               field->vmsd->version_id);
>>                  } else {
>> -                    ret = field->info->get(f, addr, size);
>> +                    ret = field->info->get(f, addr, size, NULL);
>>  
>>                  }
>>                  if (ret >= 0) {
>> @@ -328,7 +328,7 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
>>                  if (field->flags & VMS_STRUCT) {
>>                      vmstate_save_state(f, field->vmsd, addr, vmdesc_loop);
>>                  } else {
>> -                    field->info->put(f, addr, size);
>> +                    field->info->put(f, addr, size, NULL, NULL);
>>                  }
>>  
>>                  written_bytes = qemu_ftell_fast(f) - old_offset;
>> @@ -461,14 +461,15 @@ static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
>>  
>>  /* bool */
>>  
>> -static int get_bool(QEMUFile *f, void *pv, size_t size)
>> +static int get_bool(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      bool *v = pv;
>>      *v = qemu_get_byte(f);
>>      return 0;
>>  }
>>  
>> -static void put_bool(QEMUFile *f, void *pv, size_t size)
>> +static void put_bool(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                     QJSON *vmdesc)
>>  {
>>      bool *v = pv;
>>      qemu_put_byte(f, *v);
>> @@ -482,14 +483,15 @@ const VMStateInfo vmstate_info_bool = {
>>  
>>  /* 8 bit int */
>>  
>> -static int get_int8(QEMUFile *f, void *pv, size_t size)
>> +static int get_int8(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      int8_t *v = pv;
>>      qemu_get_s8s(f, v);
>>      return 0;
>>  }
>>  
>> -static void put_int8(QEMUFile *f, void *pv, size_t size)
>> +static void put_int8(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                     QJSON *vmdesc)
>>  {
>>      int8_t *v = pv;
>>      qemu_put_s8s(f, v);
>> @@ -503,14 +505,15 @@ const VMStateInfo vmstate_info_int8 = {
>>  
>>  /* 16 bit int */
>>  
>> -static int get_int16(QEMUFile *f, void *pv, size_t size)
>> +static int get_int16(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      int16_t *v = pv;
>>      qemu_get_sbe16s(f, v);
>>      return 0;
>>  }
>>  
>> -static void put_int16(QEMUFile *f, void *pv, size_t size)
>> +static void put_int16(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                      QJSON *vmdesc)
>>  {
>>      int16_t *v = pv;
>>      qemu_put_sbe16s(f, v);
>> @@ -524,14 +527,15 @@ const VMStateInfo vmstate_info_int16 = {
>>  
>>  /* 32 bit int */
>>  
>> -static int get_int32(QEMUFile *f, void *pv, size_t size)
>> +static int get_int32(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      int32_t *v = pv;
>>      qemu_get_sbe32s(f, v);
>>      return 0;
>>  }
>>  
>> -static void put_int32(QEMUFile *f, void *pv, size_t size)
>> +static void put_int32(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                      QJSON *vmdesc)
>>  {
>>      int32_t *v = pv;
>>      qemu_put_sbe32s(f, v);
>> @@ -546,7 +550,8 @@ const VMStateInfo vmstate_info_int32 = {
>>  /* 32 bit int. See that the received value is the same than the one
>>     in the field */
>>  
>> -static int get_int32_equal(QEMUFile *f, void *pv, size_t size)
>> +static int get_int32_equal(QEMUFile *f, void *pv, size_t size,
>> +                           VMStateField *field)
>>  {
>>      int32_t *v = pv;
>>      int32_t v2;
>> @@ -568,7 +573,7 @@ const VMStateInfo vmstate_info_int32_equal = {
>>   * and less than or equal to the one in the field.
>>   */
>>  
>> -static int get_int32_le(QEMUFile *f, void *pv, size_t size)
>> +static int get_int32_le(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      int32_t *cur = pv;
>>      int32_t loaded;
>> @@ -589,14 +594,15 @@ const VMStateInfo vmstate_info_int32_le = {
>>  
>>  /* 64 bit int */
>>  
>> -static int get_int64(QEMUFile *f, void *pv, size_t size)
>> +static int get_int64(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      int64_t *v = pv;
>>      qemu_get_sbe64s(f, v);
>>      return 0;
>>  }
>>  
>> -static void put_int64(QEMUFile *f, void *pv, size_t size)
>> +static void put_int64(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                      QJSON *vmdesc)
>>  {
>>      int64_t *v = pv;
>>      qemu_put_sbe64s(f, v);
>> @@ -610,14 +616,15 @@ const VMStateInfo vmstate_info_int64 = {
>>  
>>  /* 8 bit unsigned int */
>>  
>> -static int get_uint8(QEMUFile *f, void *pv, size_t size)
>> +static int get_uint8(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      uint8_t *v = pv;
>>      qemu_get_8s(f, v);
>>      return 0;
>>  }
>>  
>> -static void put_uint8(QEMUFile *f, void *pv, size_t size)
>> +static void put_uint8(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                      QJSON *vmdesc)
>>  {
>>      uint8_t *v = pv;
>>      qemu_put_8s(f, v);
>> @@ -631,14 +638,15 @@ const VMStateInfo vmstate_info_uint8 = {
>>  
>>  /* 16 bit unsigned int */
>>  
>> -static int get_uint16(QEMUFile *f, void *pv, size_t size)
>> +static int get_uint16(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      uint16_t *v = pv;
>>      qemu_get_be16s(f, v);
>>      return 0;
>>  }
>>  
>> -static void put_uint16(QEMUFile *f, void *pv, size_t size)
>> +static void put_uint16(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                       QJSON *vmdesc)
>>  {
>>      uint16_t *v = pv;
>>      qemu_put_be16s(f, v);
>> @@ -652,14 +660,15 @@ const VMStateInfo vmstate_info_uint16 = {
>>  
>>  /* 32 bit unsigned int */
>>  
>> -static int get_uint32(QEMUFile *f, void *pv, size_t size)
>> +static int get_uint32(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      uint32_t *v = pv;
>>      qemu_get_be32s(f, v);
>>      return 0;
>>  }
>>  
>> -static void put_uint32(QEMUFile *f, void *pv, size_t size)
>> +static void put_uint32(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                       QJSON *vmdesc)
>>  {
>>      uint32_t *v = pv;
>>      qemu_put_be32s(f, v);
>> @@ -674,7 +683,8 @@ const VMStateInfo vmstate_info_uint32 = {
>>  /* 32 bit uint. See that the received value is the same than the one
>>     in the field */
>>  
>> -static int get_uint32_equal(QEMUFile *f, void *pv, size_t size)
>> +static int get_uint32_equal(QEMUFile *f, void *pv, size_t size,
>> +                            VMStateField *field)
>>  {
>>      uint32_t *v = pv;
>>      uint32_t v2;
>> @@ -694,14 +704,15 @@ const VMStateInfo vmstate_info_uint32_equal = {
>>  
>>  /* 64 bit unsigned int */
>>  
>> -static int get_uint64(QEMUFile *f, void *pv, size_t size)
>> +static int get_uint64(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      uint64_t *v = pv;
>>      qemu_get_be64s(f, v);
>>      return 0;
>>  }
>>  
>> -static void put_uint64(QEMUFile *f, void *pv, size_t size)
>> +static void put_uint64(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                       QJSON *vmdesc)
>>  {
>>      uint64_t *v = pv;
>>      qemu_put_be64s(f, v);
>> @@ -716,7 +727,8 @@ const VMStateInfo vmstate_info_uint64 = {
>>  /* 64 bit unsigned int. See that the received value is the same than the one
>>     in the field */
>>  
>> -static int get_uint64_equal(QEMUFile *f, void *pv, size_t size)
>> +static int get_uint64_equal(QEMUFile *f, void *pv, size_t size,
>> +                            VMStateField *field)
>>  {
>>      uint64_t *v = pv;
>>      uint64_t v2;
>> @@ -737,7 +749,8 @@ const VMStateInfo vmstate_info_uint64_equal = {
>>  /* 8 bit int. See that the received value is the same than the one
>>     in the field */
>>  
>> -static int get_uint8_equal(QEMUFile *f, void *pv, size_t size)
>> +static int get_uint8_equal(QEMUFile *f, void *pv, size_t size,
>> +                           VMStateField *field)
>>  {
>>      uint8_t *v = pv;
>>      uint8_t v2;
>> @@ -758,7 +771,8 @@ const VMStateInfo vmstate_info_uint8_equal = {
>>  /* 16 bit unsigned int int. See that the received value is the same than the one
>>     in the field */
>>  
>> -static int get_uint16_equal(QEMUFile *f, void *pv, size_t size)
>> +static int get_uint16_equal(QEMUFile *f, void *pv, size_t size,
>> +                            VMStateField *field)
>>  {
>>      uint16_t *v = pv;
>>      uint16_t v2;
>> @@ -778,7 +792,8 @@ const VMStateInfo vmstate_info_uint16_equal = {
>>  
>>  /* floating point */
>>  
>> -static int get_float64(QEMUFile *f, void *pv, size_t size)
>> +static int get_float64(QEMUFile *f, void *pv, size_t size,
>> +                       VMStateField *field)
>>  {
>>      float64 *v = pv;
>>  
>> @@ -786,7 +801,8 @@ static int get_float64(QEMUFile *f, void *pv, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_float64(QEMUFile *f, void *pv, size_t size)
>> +static void put_float64(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                        QJSON *vmdesc)
>>  {
>>      uint64_t *v = pv;
>>  
>> @@ -801,7 +817,8 @@ const VMStateInfo vmstate_info_float64 = {
>>  
>>  /* CPU_DoubleU type */
>>  
>> -static int get_cpudouble(QEMUFile *f, void *pv, size_t size)
>> +static int get_cpudouble(QEMUFile *f, void *pv, size_t size,
>> +                         VMStateField *field)
>>  {
>>      CPU_DoubleU *v = pv;
>>      qemu_get_be32s(f, &v->l.upper);
>> @@ -809,7 +826,8 @@ static int get_cpudouble(QEMUFile *f, void *pv, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_cpudouble(QEMUFile *f, void *pv, size_t size)
>> +static void put_cpudouble(QEMUFile *f, void *pv, size_t size,
>> +                          VMStateField *field, QJSON *vmdesc)
>>  {
>>      CPU_DoubleU *v = pv;
>>      qemu_put_be32s(f, &v->l.upper);
>> @@ -824,14 +842,16 @@ const VMStateInfo vmstate_info_cpudouble = {
>>  
>>  /* uint8_t buffers */
>>  
>> -static int get_buffer(QEMUFile *f, void *pv, size_t size)
>> +static int get_buffer(QEMUFile *f, void *pv, size_t size,
>> +                      VMStateField *field)
>>  {
>>      uint8_t *v = pv;
>>      qemu_get_buffer(f, v, size);
>>      return 0;
>>  }
>>  
>> -static void put_buffer(QEMUFile *f, void *pv, size_t size)
>> +static void put_buffer(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                       QJSON *vmdesc)
>>  {
>>      uint8_t *v = pv;
>>      qemu_put_buffer(f, v, size);
>> @@ -846,7 +866,8 @@ const VMStateInfo vmstate_info_buffer = {
>>  /* unused buffers: space that was used for some fields that are
>>     not useful anymore */
>>  
>> -static int get_unused_buffer(QEMUFile *f, void *pv, size_t size)
>> +static int get_unused_buffer(QEMUFile *f, void *pv, size_t size,
>> +                             VMStateField *field)
>>  {
>>      uint8_t buf[1024];
>>      int block_len;
>> @@ -859,7 +880,8 @@ static int get_unused_buffer(QEMUFile *f, void *pv, size_t size)
>>     return 0;
>>  }
>>  
>> -static void put_unused_buffer(QEMUFile *f, void *pv, size_t size)
>> +static void put_unused_buffer(QEMUFile *f, void *pv, size_t size,
>> +                              VMStateField *field, QJSON *vmdesc)
>>  {
>>      static const uint8_t buf[1024];
>>      int block_len;
>> @@ -884,7 +906,7 @@ const VMStateInfo vmstate_info_unused_buffer = {
>>   */
>>  /* This is the number of 64 bit words sent over the wire */
>>  #define BITS_TO_U64S(nr) DIV_ROUND_UP(nr, 64)
>> -static int get_bitmap(QEMUFile *f, void *pv, size_t size)
>> +static int get_bitmap(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      unsigned long *bmp = pv;
>>      int i, idx = 0;
>> @@ -898,7 +920,8 @@ static int get_bitmap(QEMUFile *f, void *pv, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_bitmap(QEMUFile *f, void *pv, size_t size)
>> +static void put_bitmap(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                QJSON *vmdesc)
>>  {
>>      unsigned long *bmp = pv;
>>      int i, idx = 0;
>> diff --git a/target-alpha/machine.c b/target-alpha/machine.c
>> index 710b783..48e3278 100644
>> --- a/target-alpha/machine.c
>> +++ b/target-alpha/machine.c
>> @@ -5,14 +5,15 @@
>>  #include "hw/boards.h"
>>  #include "migration/cpu.h"
>>  
>> -static int get_fpcr(QEMUFile *f, void *opaque, size_t size)
>> +static int get_fpcr(QEMUFile *f, void *opaque, size_t size, VMStateField *field)
>>  {
>>      CPUAlphaState *env = opaque;
>>      cpu_alpha_store_fpcr(env, qemu_get_be64(f));
>>      return 0;
>>  }
>>  
>> -static void put_fpcr(QEMUFile *f, void *opaque, size_t size)
>> +static void put_fpcr(QEMUFile *f, void *opaque, size_t size,
>> +                     VMStateField *field, QJSON *vmdesc)
>>  {
>>      CPUAlphaState *env = opaque;
>>      qemu_put_be64(f, cpu_alpha_load_fpcr(env));
>> diff --git a/target-arm/machine.c b/target-arm/machine.c
>> index 7a6ca31..41a0de9 100644
>> --- a/target-arm/machine.c
>> +++ b/target-arm/machine.c
>> @@ -17,7 +17,8 @@ static bool vfp_needed(void *opaque)
>>      return arm_feature(env, ARM_FEATURE_VFP);
>>  }
>>  
>> -static int get_fpscr(QEMUFile *f, void *opaque, size_t size)
>> +static int get_fpscr(QEMUFile *f, void *opaque, size_t size,
>> +                     VMStateField *field)
>>  {
>>      ARMCPU *cpu = opaque;
>>      CPUARMState *env = &cpu->env;
>> @@ -27,7 +28,8 @@ static int get_fpscr(QEMUFile *f, void *opaque, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_fpscr(QEMUFile *f, void *opaque, size_t size)
>> +static void put_fpscr(QEMUFile *f, void *opaque, size_t size,
>> +                      VMStateField *field, QJSON *vmdesc)
>>  {
>>      ARMCPU *cpu = opaque;
>>      CPUARMState *env = &cpu->env;
>> @@ -163,7 +165,8 @@ static const VMStateDescription vmstate_pmsav7 = {
>>      }
>>  };
>>  
>> -static int get_cpsr(QEMUFile *f, void *opaque, size_t size)
>> +static int get_cpsr(QEMUFile *f, void *opaque, size_t size,
>> +                    VMStateField *field)
>>  {
>>      ARMCPU *cpu = opaque;
>>      CPUARMState *env = &cpu->env;
>> @@ -180,7 +183,8 @@ static int get_cpsr(QEMUFile *f, void *opaque, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_cpsr(QEMUFile *f, void *opaque, size_t size)
>> +static void put_cpsr(QEMUFile *f, void *opaque, size_t size,
>> +                     VMStateField *field, QJSON *vmdesc)
>>  {
>>      ARMCPU *cpu = opaque;
>>      CPUARMState *env = &cpu->env;
>> diff --git a/target-i386/machine.c b/target-i386/machine.c
>> index 71c0e4d..1df19e2 100644
>> --- a/target-i386/machine.c
>> +++ b/target-i386/machine.c
>> @@ -139,7 +139,8 @@ static const VMStateDescription vmstate_mtrr_var = {
>>  #define VMSTATE_MTRR_VARS(_field, _state, _n, _v)                    \
>>      VMSTATE_STRUCT_ARRAY(_field, _state, _n, _v, vmstate_mtrr_var, MTRRVar)
>>  
>> -static void put_fpreg_error(QEMUFile *f, void *opaque, size_t size)
>> +static void put_fpreg_error(QEMUFile *f, void *opaque, size_t size,
>> +                            VMStateField *field, QJSON *vmdesc)
>>  {
>>      fprintf(stderr, "call put_fpreg() with invalid arguments\n");
>>      exit(0);
>> @@ -167,7 +168,8 @@ static void fp64_to_fp80(union x86_longdouble *p, uint64_t temp)
>>      p->exp = e;
>>  }
>>  
>> -static int get_fpreg(QEMUFile *f, void *opaque, size_t size)
>> +static int get_fpreg(QEMUFile *f, void *opaque, size_t size,
>> +                     VMStateField *field)
>>  {
>>      FPReg *fp_reg = opaque;
>>      uint64_t mant;
>> @@ -179,7 +181,8 @@ static int get_fpreg(QEMUFile *f, void *opaque, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_fpreg(QEMUFile *f, void *opaque, size_t size)
>> +static void put_fpreg(QEMUFile *f, void *opaque, size_t size,
>> +                      VMStateField *field, QJSON *vmdesc)
>>  {
>>      FPReg *fp_reg = opaque;
>>      uint64_t mant;
>> @@ -197,7 +200,8 @@ static const VMStateInfo vmstate_fpreg = {
>>      .put  = put_fpreg,
>>  };
>>  
>> -static int get_fpreg_1_mmx(QEMUFile *f, void *opaque, size_t size)
>> +static int get_fpreg_1_mmx(QEMUFile *f, void *opaque, size_t size,
>> +                           VMStateField *field)
>>  {
>>      union x86_longdouble *p = opaque;
>>      uint64_t mant;
>> @@ -214,7 +218,8 @@ static const VMStateInfo vmstate_fpreg_1_mmx = {
>>      .put  = put_fpreg_error,
>>  };
>>  
>> -static int get_fpreg_1_no_mmx(QEMUFile *f, void *opaque, size_t size)
>> +static int get_fpreg_1_no_mmx(QEMUFile *f, void *opaque, size_t size,
>> +                              VMStateField *field)
>>  {
>>      union x86_longdouble *p = opaque;
>>      uint64_t mant;
>> @@ -276,14 +281,16 @@ static bool less_than_7(void *opaque, int version_id)
>>      return version_id < 7;
>>  }
>>  
>> -static int get_uint64_as_uint32(QEMUFile *f, void *pv, size_t size)
>> +static int get_uint64_as_uint32(QEMUFile *f, void *pv, size_t size,
>> +                                VMStateField *field)
>>  {
>>      uint64_t *v = pv;
>>      *v = qemu_get_be32(f);
>>      return 0;
>>  }
>>  
>> -static void put_uint64_as_uint32(QEMUFile *f, void *pv, size_t size)
>> +static void put_uint64_as_uint32(QEMUFile *f, void *pv, size_t size,
>> +                                 VMStateField *field, QJSON *vmdesc)
>>  {
>>      uint64_t *v = pv;
>>      qemu_put_be32(f, *v);
>> diff --git a/target-mips/machine.c b/target-mips/machine.c
>> index a27f2f1..179084c 100644
>> --- a/target-mips/machine.c
>> +++ b/target-mips/machine.c
>> @@ -20,7 +20,7 @@ static int cpu_post_load(void *opaque, int version_id)
>>  
>>  /* FPU state */
>>  
>> -static int get_fpr(QEMUFile *f, void *pv, size_t size)
>> +static int get_fpr(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      int i;
>>      fpr_t *v = pv;
>> @@ -31,7 +31,8 @@ static int get_fpr(QEMUFile *f, void *pv, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_fpr(QEMUFile *f, void *pv, size_t size)
>> +static void put_fpr(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                    QJSON *vmdesc)
>>  {
>>      int i;
>>      fpr_t *v = pv;
>> @@ -125,7 +126,7 @@ const VMStateDescription vmstate_mvp = {
>>  
>>  /* TLB state */
>>  
>> -static int get_tlb(QEMUFile *f, void *pv, size_t size)
>> +static int get_tlb(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      r4k_tlb_t *v = pv;
>>      uint16_t flags;
>> @@ -152,7 +153,8 @@ static int get_tlb(QEMUFile *f, void *pv, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_tlb(QEMUFile *f, void *pv, size_t size)
>> +static void put_tlb(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                    QJSON *vmdesc)
>>  {
>>      r4k_tlb_t *v = pv;
>>  
>> diff --git a/target-ppc/machine.c b/target-ppc/machine.c
>> index 4820f22..0e1822c 100644
>> --- a/target-ppc/machine.c
>> +++ b/target-ppc/machine.c
>> @@ -106,7 +106,7 @@ static int cpu_load_old(QEMUFile *f, void *opaque, int version_id)
>>      return 0;
>>  }
>>  
>> -static int get_avr(QEMUFile *f, void *pv, size_t size)
>> +static int get_avr(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      ppc_avr_t *v = pv;
>>  
>> @@ -116,7 +116,8 @@ static int get_avr(QEMUFile *f, void *pv, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_avr(QEMUFile *f, void *pv, size_t size)
>> +static void put_avr(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                    QJSON *vmdesc)
>>  {
>>      ppc_avr_t *v = pv;
>>  
>> @@ -324,7 +325,7 @@ static const VMStateDescription vmstate_sr = {
>>  };
>>  
>>  #ifdef TARGET_PPC64
>> -static int get_slbe(QEMUFile *f, void *pv, size_t size)
>> +static int get_slbe(QEMUFile *f, void *pv, size_t size, VMStateField *field)
>>  {
>>      ppc_slb_t *v = pv;
>>  
>> @@ -334,7 +335,8 @@ static int get_slbe(QEMUFile *f, void *pv, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_slbe(QEMUFile *f, void *pv, size_t size)
>> +static void put_slbe(QEMUFile *f, void *pv, size_t size, VMStateField *field,
>> +                     QJSON *vmdesc)
>>  {
>>      ppc_slb_t *v = pv;
>>  
>> diff --git a/target-sparc/machine.c b/target-sparc/machine.c
>> index 59c92f7..3194e03 100644
>> --- a/target-sparc/machine.c
>> +++ b/target-sparc/machine.c
>> @@ -59,7 +59,7 @@ static const VMStateDescription vmstate_tlb_entry = {
>>  };
>>  #endif
>>  
>> -static int get_psr(QEMUFile *f, void *opaque, size_t size)
>> +static int get_psr(QEMUFile *f, void *opaque, size_t size, VMStateField *field)
>>  {
>>      SPARCCPU *cpu = opaque;
>>      CPUSPARCState *env = &cpu->env;
>> @@ -72,7 +72,8 @@ static int get_psr(QEMUFile *f, void *opaque, size_t size)
>>      return 0;
>>  }
>>  
>> -static void put_psr(QEMUFile *f, void *opaque, size_t size)
>> +static void put_psr(QEMUFile *f, void *opaque, size_t size, VMStateField *field,
>> +                QJSON *vmdesc)
>>  {
>>      SPARCCPU *cpu = opaque;
>>      CPUSPARCState *env = &cpu->env;
>> -- 
>> 1.9.1
>>
>>
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
> 

  reply	other threads:[~2016-10-07 16:35 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-03 18:24 [Qemu-devel] [QEMU PATCH v5 0/6] migration: ensure hotplug and migration work together Jianjun Duan
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 1/6] migration: alternative way to set instance_id in SaveStateEntry Jianjun Duan
2016-10-05 10:12   ` Dr. David Alan Gilbert
2016-10-05 16:44     ` Jianjun Duan
2016-10-07  2:54       ` David Gibson
2016-10-07  8:07         ` Dr. David Alan Gilbert
2016-10-10  5:31           ` David Gibson
2016-10-11 16:17             ` Michael Roth
2016-10-11 23:37               ` David Gibson
2016-11-15 23:45         ` Michael Roth
2016-10-05 16:46     ` [Qemu-devel] [Qemu-ppc] " Jianjun Duan
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 2/6] migration: spapr_drc: defined VMStateDescription struct Jianjun Duan
2016-10-05 11:38   ` Dr. David Alan Gilbert
2016-10-07  3:17     ` David Gibson
2016-10-07  3:12   ` David Gibson
2016-10-07 17:17     ` Jianjun Duan
2016-10-10  5:09       ` David Gibson
2016-10-10 16:48         ` [Qemu-devel] [Qemu-ppc] " Jianjun Duan
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 3/6] migration: extend VMStateInfo Jianjun Duan
2016-10-07 12:08   ` Dr. David Alan Gilbert
2016-10-07 16:35     ` Jianjun Duan [this message]
2016-10-07 18:42       ` [Qemu-devel] [Qemu-ppc] " Dr. David Alan Gilbert
2016-10-10  5:02         ` David Gibson
2016-10-12 11:59   ` [Qemu-devel] " Halil Pasic
2016-10-12 12:07     ` Paolo Bonzini
2016-10-12 12:30       ` Halil Pasic
2016-10-12 14:59         ` Dr. David Alan Gilbert
2016-10-13 10:33           ` Halil Pasic
2016-10-13 11:12             ` Dr. David Alan Gilbert
2016-10-12 17:27       ` [Qemu-devel] [Qemu-ppc] " Jianjun Duan
2016-10-13  8:22         ` Paolo Bonzini
2016-10-13 10:48           ` Halil Pasic
2016-10-13 11:20             ` Paolo Bonzini
2016-10-13 16:23             ` Jianjun Duan
2016-10-13 16:32               ` Halil Pasic
2016-10-13 16:35                 ` Jianjun Duan
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 4/6] migration: migrate QTAILQ Jianjun Duan
2016-10-05 16:56   ` Dr. David Alan Gilbert
2016-10-05 17:19     ` Jianjun Duan
2016-10-06 19:01       ` Dr. David Alan Gilbert
2016-10-06 19:49         ` Jianjun Duan
2016-10-07  3:25         ` David Gibson
2016-10-07 14:31         ` Paolo Bonzini
2016-10-07 14:34           ` Dr. David Alan Gilbert
2016-10-07 16:31             ` [Qemu-devel] [Qemu-ppc] " Jianjun Duan
2016-10-07 16:32               ` Paolo Bonzini
2016-10-07 17:25                 ` Jianjun Duan
2016-10-07 17:34                   ` Dr. David Alan Gilbert
2016-10-07 17:43                     ` Jianjun Duan
2016-10-08 11:37                       ` Paolo Bonzini
2016-10-08 19:28                         ` Halil Pasic
2016-10-10 21:29                           ` Jianjun Duan
2016-10-11  7:33                             ` Paolo Bonzini
2016-10-10 21:40                           ` Jianjun Duan
2016-10-06 11:05     ` [Qemu-devel] " Paolo Bonzini
2016-10-06 11:56       ` Dr. David Alan Gilbert
2016-10-06 12:23         ` Paolo Bonzini
2016-10-06 15:21           ` Dr. David Alan Gilbert
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 5/6] migration: spapr: migrate ccs_list in spapr state Jianjun Duan
2016-10-07  3:36   ` David Gibson
2016-10-07 14:52     ` Michael Roth
2016-10-10  5:05       ` David Gibson
2016-10-03 18:24 ` [Qemu-devel] [QEMU PATCH v5 6/6] migration: spapr: migrate pending_events of " Jianjun Duan
2016-10-03 18:35 ` [Qemu-devel] [QEMU PATCH v5 0/6] migration: ensure hotplug and migration work together no-reply
2016-10-03 19:00 ` no-reply
2016-10-03 19:11 ` Jianjun Duan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=097b567a-dfc9-58f2-0f8e-c63eb6fb13e4@linux.vnet.ibm.com \
    --to=duanj@linux.vnet.ibm.com \
    --cc=amit.shah@redhat.com \
    --cc=aurelien@aurel32.net \
    --cc=blauwirbel@gmail.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=dgilbert@redhat.com \
    --cc=dmitry@daynix.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=leon.alrae@imgtec.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=mreitz@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=rth@twiddle.net \
    --cc=veroniabahaa@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.