[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 01/10] virtio: move VirtQueueElement at the beginnin
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 01/10] virtio: move VirtQueueElement at the beginning of the structs |
Date: |
Fri, 15 Jan 2016 13:41:49 +0100 |
The next patch will make virtqueue_pop/vring_pop allocate memory for a
"subclass" of VirtQueueElement. For this to work, VirtQueueElement
must be the first field in the containing struct.
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/scsi/virtio-scsi.c | 3 +--
include/hw/virtio/virtio-blk.h | 2 +-
include/hw/virtio/virtio-scsi.h | 13 ++++++-------
3 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
index 3a4f520..1567da8 100644
--- a/hw/scsi/virtio-scsi.c
+++ b/hw/scsi/virtio-scsi.c
@@ -44,8 +44,7 @@ VirtIOSCSIReq *virtio_scsi_init_req(VirtIOSCSI *s, VirtQueue
*vq)
{
VirtIOSCSIReq *req;
VirtIOSCSICommon *vs = (VirtIOSCSICommon *)s;
- const size_t zero_skip = offsetof(VirtIOSCSIReq, elem)
- + sizeof(VirtQueueElement);
+ const size_t zero_skip = offsetof(VirtIOSCSIReq, vring);
req = g_malloc(sizeof(*req) + vs->cdb_size);
req->vq = vq;
diff --git a/include/hw/virtio/virtio-blk.h b/include/hw/virtio/virtio-blk.h
index ae11a63..403ab86 100644
--- a/include/hw/virtio/virtio-blk.h
+++ b/include/hw/virtio/virtio-blk.h
@@ -60,9 +60,9 @@ typedef struct VirtIOBlock {
} VirtIOBlock;
typedef struct VirtIOBlockReq {
+ VirtQueueElement elem;
int64_t sector_num;
VirtIOBlock *dev;
- VirtQueueElement elem;
struct virtio_blk_inhdr *in;
struct virtio_blk_outhdr out;
QEMUIOVector qiov;
diff --git a/include/hw/virtio/virtio-scsi.h b/include/hw/virtio/virtio-scsi.h
index 088fe9f..63f5b51 100644
--- a/include/hw/virtio/virtio-scsi.h
+++ b/include/hw/virtio/virtio-scsi.h
@@ -102,18 +102,17 @@ typedef struct VirtIOSCSI {
} VirtIOSCSI;
typedef struct VirtIOSCSIReq {
+ /* Note:
+ * - fields up to resp_iov are initialized by virtio_scsi_init_req;
+ * - fields starting at vring are zeroed by virtio_scsi_init_req.
+ * */
+ VirtQueueElement elem;
+
VirtIOSCSI *dev;
VirtQueue *vq;
QEMUSGList qsgl;
QEMUIOVector resp_iov;
- /* Note:
- * - fields before elem are initialized by virtio_scsi_init_req;
- * - elem is uninitialized at the time of allocation.
- * - fields after elem are zeroed by virtio_scsi_init_req.
- * */
-
- VirtQueueElement elem;
/* Set by dataplane code. */
VirtIOSCSIVring *vring;
--
2.5.0
- [Qemu-devel] [PATCH 00/10] virtio/vring: optimization patches, Paolo Bonzini, 2016/01/15
- [Qemu-devel] [PATCH 01/10] virtio: move VirtQueueElement at the beginning of the structs,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 03/10] virtio: introduce qemu_get/put_virtqueue_element, Paolo Bonzini, 2016/01/15
- [Qemu-devel] [PATCH 05/10] virtio: slim down allocation of VirtQueueElements, Paolo Bonzini, 2016/01/15
- [Qemu-devel] [PATCH 06/10] vring: slim down allocation of VirtQueueElements, Paolo Bonzini, 2016/01/15
- [Qemu-devel] [PATCH 04/10] virtio: introduce virtqueue_alloc_element, Paolo Bonzini, 2016/01/15