[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH for 8.0 09/13] virtio: add vmstate_virtqueue_element_old
From: |
Eugenio Pérez |
Subject: |
[RFC PATCH for 8.0 09/13] virtio: add vmstate_virtqueue_element_old |
Date: |
Mon, 5 Dec 2022 18:04:32 +0100 |
VMStateDescription of an inflight descriptor represented in
VirtQueueElementOld.
TODO: Convert to VirtQueueElement.
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
include/hw/virtio/virtio.h | 1 +
include/migration/vmstate.h | 11 +++++++++++
hw/virtio/virtio.c | 32 ++++++++++++++++++++++++++++++++
3 files changed, 44 insertions(+)
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index b4c5163fb0..f3485e5748 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -105,6 +105,7 @@ void *qemu_get_virtqueue_element_from_old(VirtIODevice
*vdev,
size_t sz);
void qemu_put_virtqueue_element_old(const VirtQueueElement *elem,
VirtQueueElementOld *data);
+extern const VMStateDescription vmstate_virtqueue_element_old;
#define VIRTIO_QUEUE_MAX 1024
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index ad24aa1934..9726d2d09e 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -448,6 +448,17 @@ extern const VMStateInfo vmstate_info_qlist;
.offset = vmstate_offset_varray(_state, _field, _type), \
}
+#define VMSTATE_VARRAY_UINT32_UNSAFE(_field, _state, _field_num, _version, \
+ _info, _type) {\
+ .name = (stringify(_field)), \
+ .version_id = (_version), \
+ .num_offset = vmstate_offset_value(_state, _field_num, uint32_t),\
+ .info = &(_info), \
+ .size = sizeof(_type), \
+ .flags = VMS_VARRAY_UINT32, \
+ .offset = vmstate_offset_varray(_state, _field, _type), \
+}
+
#define VMSTATE_VSTRUCT_TEST(_field, _state, _test, _version, _vmsd, _type,
_struct_version) { \
.name = (stringify(_field)), \
.version_id = (_version), \
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 5ddc49610c..7936fcfec2 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -3165,6 +3165,38 @@ static bool virtio_disabled_needed(void *opaque)
return vdev->disabled;
}
+const VMStateDescription vmstate_virtqueue_element_old = {
+ .name = "virtqueue_element",
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT32(index, VirtQueueElementOld),
+ VMSTATE_UINT32(in_num, VirtQueueElementOld),
+ VMSTATE_UINT32(out_num, VirtQueueElementOld),
+ /*
+ * TODO: Needed for packed
+ * VMSTATE_UINT16(ndescs, VirtQueueElement),
+ */
+
+ VMSTATE_VALIDATE("fit", vq_element_in_range),
+ VMSTATE_VARRAY_UINT32_UNSAFE(in_addr, VirtQueueElementOld, in_num, 0,
+ vmstate_info_uint64, hwaddr),
+ VMSTATE_VARRAY_UINT32_UNSAFE(out_addr, VirtQueueElementOld, out_num, 0,
+ vmstate_info_uint64, hwaddr),
+
+ /*
+ * Assume iovec[n] == uint64_t[n*2]
+ * TODO: Probably need to send each field individually because of
+ * endianess.
+ */
+ VMSTATE_VARRAY_MULTIPLY(in_sg_64, VirtQueueElementOld, in_num,
+ sizeof(struct iovec) / sizeof(uint64_t),
+ vmstate_info_uint64, uint64_t),
+ VMSTATE_VARRAY_MULTIPLY(out_sg_64, VirtQueueElementOld, out_num,
+ sizeof(struct iovec) / sizeof(uint64_t),
+ vmstate_info_uint64, uint64_t),
+ VMSTATE_END_OF_LIST()
+ },
+};
+
static const VMStateDescription vmstate_virtqueue = {
.name = "virtqueue_state",
.version_id = 1,
--
2.31.1
- [RFC PATCH for 8.0 07/13] virtio: refactor qemu_put_virtqueue_element, (continued)
- [RFC PATCH for 8.0 07/13] virtio: refactor qemu_put_virtqueue_element, Eugenio Pérez, 2022/12/05
- [RFC PATCH for 8.0 05/13] virtio: Specify uint32_t as VirtQueueElementOld members type, Eugenio Pérez, 2022/12/05
- [RFC PATCH for 8.0 06/13] virtio: refactor qemu_get_virtqueue_element, Eugenio Pérez, 2022/12/05
- [RFC PATCH for 8.0 10/13] virtio-net: Migrate vhost inflight descriptors, Eugenio Pérez, 2022/12/05
- [RFC PATCH for 8.0 12/13] vhost: expose vhost_svq_add_element, Eugenio Pérez, 2022/12/05
- [RFC PATCH for 8.0 11/13] virtio-net: save inflight descriptors at vhost shutdown, Eugenio Pérez, 2022/12/05
- [RFC PATCH for 8.0 09/13] virtio: add vmstate_virtqueue_element_old,
Eugenio Pérez <=
- [RFC PATCH for 8.0 08/13] virtio: expose VirtQueueElementOld, Eugenio Pérez, 2022/12/05
- [RFC PATCH for 8.0 13/13] vdpa: Recover inflight descriptors, Eugenio Pérez, 2022/12/05
- Re: [RFC PATCH for 8.0 00/13] vDPA-net inflight descriptors migration with SVQ, Jason Wang, 2022/12/06