On Fri, Nov 20, 2020 at 07:50:48PM +0100, Eugenio P?rez
wrote:> Signed-off-by: Eugenio P?rez <eperezma at redhat.com>
> ---
> hw/virtio/vhost-sw-lm-ring.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/hw/virtio/vhost-sw-lm-ring.c b/hw/virtio/vhost-sw-lm-ring.c
> index cbf53965cd..cd7b5ba772 100644
> --- a/hw/virtio/vhost-sw-lm-ring.c
> +++ b/hw/virtio/vhost-sw-lm-ring.c
> @@ -16,8 +16,11 @@
> #include "qemu/event_notifier.h"
>
> typedef struct VhostShadowVirtqueue {
> + struct vring vring;
> EventNotifier hdev_notifier;
> VirtQueue *vq;
> +
> + vring_desc_t descs[];
> } VhostShadowVirtqueue;
VhostShadowVirtqueue is starting to look like VirtQueue. Can the shadow
vq code simply use the VirtIODevice's VirtQueues instead of duplicating
this?
What I mean is:
1. Disable the vhost hdev vq and sync the avail index back to the
VirtQueue.
2. Move the irq fd to the VirtQueue as its guest notifier.
3. Install the shadow_vq_handler() as the VirtQueue's handle_output
function.
4. Move the call fd to the VirtQueue as its host notifier.
Now we can process requests from the VirtIODevice's VirtQueue using
virtqueue_pop() and friends. We're also in sync and ready for vmstate
save/load.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL:
<http://lists.linuxfoundation.org/pipermail/virtualization/attachments/20201208/c82effe8/attachment.sig>