[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v2 0/3] Add packed virtqueue to shadow virtqueue
From: |
Sahil Siddiq |
Subject: |
[RFC v2 0/3] Add packed virtqueue to shadow virtqueue |
Date: |
Fri, 26 Jul 2024 15:28:19 +0530 |
Hi,
I have made some progress in this project and thought I would
send these changes first before continuing. I split patch v1 [1]
into two commits (#1 and #2) to make it easy to review. There are
very few changes in the first commit. The second commit has not
changes.
There are a few things that I am not entirely sure of in commit #3.
Q1.
In virtio_ring.h [2], new aliases with memory alignment enforcement
such as "vring_desc_t" have been created. I am not sure if this
is required for the packed vq descriptor ring (vring_packed_desc)
as well. I don't see a type alias that enforces memory alignment
for "vring_packed_desc" in the linux kernel. I haven't used any
alias either.
Q2.
I see that parts of the "vhost-vdpa" implementation is based on
the assumption that SVQ uses the split vq format. For example,
"vhost_vdpa_svq_map_rings" [3], calls "vhost_svq_device_area_size"
which is specific to split vqs. The "vhost_vring_addr" [4] struct
is also specific to split vqs.
My idea is to have a generic "vhost_vring_addr" structure that
wraps around split and packed vq specific structures, rather
than using them directly in if-else conditions wherever the
vhost-vdpa functions require their usage. However, this will
involve checking their impact in several other places where this
struct is currently being used (eg.: "vhost-user", "vhost-backend",
"libvhost-user").
Is this approach alright or is there a better alternative? I would
like to get your thoughts on this before working on this portion of
the project.
Thanks,
Sahil
[1] https://lists.nongnu.org/archive/html/qemu-devel/2024-06/msg03417.html
[2]
https://gitlab.com/qemu-project/qemu/-/blob/master/include/standard-headers/linux/virtio_ring.h#L149
[3]
https://gitlab.com/qemu-project/qemu/-/blob/master/hw/virtio/vhost-vdpa.c#L1178
[4]
https://gitlab.com/qemu-project/qemu/-/blob/master/include/standard-headers/linux/vhost_types.h#L30
Changes v1 -> v2:
* Split commit from RFC v1 into two commits.
* vhost-shadow-virtqueue.c
(vhost_svq_add_packed):
- Merge with "vhost_svq_vring_write_descs_packed()"
- Remove "num == 0" check
(vhost_svq_add): Use "is_packed" to check vq format.
(vhost_svq_get_vring_addr): Rename function.
(vhost_svq_get_vring_addr_packed): New function but is yet to be implemented.
(vhost_svq_memory_packed): New function.
(vhost_svq_start): Support packed vq format.
* vhost-shadow-virtqueue.h
(struct VhostShadowVirtqueue): New member "is_packed"
(vhost_svq_get_vring_addr): Renamed function.
(vhost_svq_get_vring_addr_packed): New function.
(vhost_svq_memory_packed): Likewise.
* vhost-vdpa.c
(vhost_svq_get_vring_addr): Rename function.
Sahil Siddiq (3):
vhost: Introduce packed vq and add buffer elements
vhost: Data structure changes to support packed vqs
vhost: Allocate memory for packed vring.
hw/virtio/vhost-shadow-virtqueue.c | 161 ++++++++++++++++++++++++++---
hw/virtio/vhost-shadow-virtqueue.h | 76 +++++++++-----
hw/virtio/vhost-vdpa.c | 4 +-
3 files changed, 198 insertions(+), 43 deletions(-)
--
2.45.2