From: Kangjie Xu <kangjie.xu@linux.alibaba.com>
To: qemu-devel@nongnu.org
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
Jason Wang <jasowang@redhat.com>,
eduardo@habkost.net, marcel.apfelbaum@gmail.com, f4bug@amsat.org,
wangyanan55@huawei.com, hengqi@linux.alibaba.com,
Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Subject: Re: [PATCH 00/24] Support VIRTIO_F_RING_RESET for virtio-net, vhost-user, vhost-kernel in virtio pci-modern
Date: Tue, 23 Aug 2022 09:49:05 +0800 [thread overview]
Message-ID: <60b3303e-e556-7f86-3cd0-4ea0ea314fc7@linux.alibaba.com> (raw)
In-Reply-To: <cover.1660611460.git.kangjie.xu@linux.alibaba.com>
Forgot to append changelog for v2 in the cover letter, so I add it in
this email.
changelog:
1. Add support for vhost-net scenario
2. Add a new vhost-user message VHOST_USER_RESET_VRING
3. Add migration compatibility for virtqueue reset
Looking forward to your review and comments to this patch set, thanks. :)
Best regards,
Kangjie
在 2022/8/16 09:06, Kangjie Xu 写道:
> The virtio queue reset function has already been defined in the virtio spec 1.2.
> The relevant virtio spec information is here:
>
> https://github.com/oasis-tcs/virtio-spec/issues/124
> https://github.com/oasis-tcs/virtio-spec/issues/139
>
> This patch set is to support this function in QEMU. It consists of several parts:
> 1. Patches 1-7 are the basic interfaces for vq reset in virtio and virtio-pci.
> 2. Patches 8-12 support vq stop and vq restart for vhost-kernel.
> 3. Patches 13-19 support vq stop and vq restart for vhost-user.
> 4. Patches 20-22 support vq reset and re-enable for virtio-net.
> 5. Patches 23-24 enable the vq reset feature for vhost-kernel and vhost-user.
>
> The process of virtqueue reset can be concluded as:
> 1. The virtqueue is disabled when VIRTIO_PCI_COMMON_Q_RESET is written.
> 2. Then the virtqueue can be optionally restarted(re-enabled).
>
> Since this patch set involves multiple modules and seems a bit messy, we briefly describe the
> calling process for different modes below.
> virtio-net:
> 1. VIRTIO_PCI_COMMON_Q_RESET is written [virtio-pci]
> -> virtio_queue_reset() [virtio]
> -> virtio_net_queue_reset() [virtio-net]
> -> __virtio_queue_reset()
> 2. VIRTIO_PCI_COMMON_Q_ENABLE is written [virtio-pci]
> -> set enabled, reset status of vq.
>
> vhost-kernel:
> 1. VIRTIO_PCI_COMMON_Q_RESET is written [virtio-pci]
> -> virtio_queue_reset() [virtio]
> -> virtio_net_queue_reset() [virtio-net]
> -> vhost_net_virtqueue_stop() [vhost-net]
> -> vhost_net_set_backend() [vhost]
> -> vhost_dev_virtqueue_stop()
> -> vhost_virtqueue_unmap()
> -> __virtio_queue_reset()
> 2. VIRTIO_PCI_COMMON_Q_ENABLE is written [virtio-pci]
> -> virtio_queue_enable() [virtio]
> -> virtio_net_queue_enable() [virtio-net]
> -> vhost_net_virtqueue_restart() [vhost-net]
> -> vhost_dev_virtqueue_restart() [vhost]
> -> vhost_virtqueue_start()
> -> vhost_net_set_backend()
> -> set enabled, reset status of vq.
>
> vhost-user:
> 1. VIRTIO_PCI_COMMON_Q_RESET is written [virtio-pci]
> -> virtio_queue_reset() [virtio]
> -> virtio_net_queue_reset() [virtio-net]
> -> vhost_net_virtqueue_stop() [vhost-net]
> -> vhost_dev_virtqueue_stop() [vhost]
> -> vhost_user_reset_vring() [vhost-user]
> -> send VHOST_USER_RESET_VRING to the device
> -> vhost_virtqueue_unmap()
> -> __virtio_queue_reset()
> 2. VIRTIO_PCI_COMMON_Q_ENABLE is written [virtio-pci]
> -> virtio_queue_enable() [virtio]
> -> virtio_net_queue_enable() [virtio-net]
> -> vhost_net_virtqueue_restart() [vhost-net]
> -> vhost_dev_virtqueue_restart() [vhost]
> -> vhost_virtqueue_start()
> -> vhost_user_set_single_vring_enable [vhost-user]
> -> send VHOST_USER_SET_VRING_ENABLE to the device
> -> set enabled, reset status of vq.
>
>
> Test environment:
> Host: 5.19.0-rc3 (With vq reset support)
> Qemu: QEMU emulator version 7.0.50
> Guest: 5.19.0-rc3 (With vq reset support)
> DPDK: 22.07-rc1 (With vq reset support)
> Test Cmd: ethtool -g eth1; ethtool -G eth1 rx $1 tx $2; ethtool -g eth1;
>
> The drvier can resize the virtio queue, then virtio queue reset function should
> be triggered.
>
> The default is split mode, modify Qemu virtio-net to add PACKED feature to
> test packed mode.
>
> Guest Kernel Patch:
> https://lore.kernel.org/bpf/20220801063902.129329-1-xuanzhuo@linux.alibaba.com/
>
> DPDK Patch:
> https://github.com/middaywords/dpdk/compare/72206323a5dd3182b13f61b25a64abdddfee595c...eabadfac7953da66bc10ffb8284b490d09bb7ec7
>
> Host Kernel Patch:
> https://github.com/middaywords/linux/commit/19a91e0d7167b2031e46078c6215c213b89cb2c3
>
> Looking forward to your review and comments. Thanks.
>
> Kangjie Xu (19):
> virtio: introduce virtio_queue_enable()
> virtio: core: vq reset feature negotation support
> virtio-pci: support queue enable
> vhost: extract the logic of unmapping the vrings and desc
> vhost: introduce vhost_dev_virtqueue_stop()
> vhost: introduce vhost_dev_virtqueue_restart()
> vhost-net: vhost-kernel: introduce vhost_net_virtqueue_stop()
> vhost-net: vhost-kernel: introduce vhost_net_virtqueue_restart()
> docs: vhost-user: add VHOST_USER_RESET_VRING message
> vhost-user: introduce vhost_reset_vring() interface
> vhost-user: add op to enable or disable a single vring
> vhost: vhost-user: update vhost_dev_virtqueue_stop()
> vhost: vhost-user: update vhost_dev_virtqueue_restart()
> vhost-net: vhost-user: update vhost_net_virtqueue_stop()
> vhost-net: vhost-user: update vhost_net_virtqueue_restart()
> virtio-net: introduce flush_or_purge_queued_packets()
> virtio-net: support queue_enable
> vhost: vhost-kernel: enable vq reset feature
> vhost: vhost-user: enable vq reset feature
>
> Xuan Zhuo (5):
> virtio: sync relevant definitions with linux
> virtio: introduce __virtio_queue_reset()
> virtio: introduce virtio_queue_reset()
> virtio-pci: support queue reset
> virtio-net: support queue reset
>
> docs/interop/vhost-user.rst | 10 +++
> hw/core/machine.c | 1 +
> hw/net/vhost_net.c | 79 +++++++++++++++++++
> hw/net/virtio-net.c | 58 ++++++++++++--
> hw/virtio/vhost-user.c | 67 ++++++++++++++--
> hw/virtio/vhost.c | 79 +++++++++++++++++--
> hw/virtio/virtio-pci.c | 20 +++++
> hw/virtio/virtio.c | 62 +++++++++++----
> include/hw/virtio/vhost-backend.h | 6 ++
> include/hw/virtio/vhost.h | 5 ++
> include/hw/virtio/virtio-pci.h | 1 +
> include/hw/virtio/virtio.h | 8 +-
> include/net/vhost_net.h | 4 +
> .../standard-headers/linux/virtio_config.h | 5 ++
> include/standard-headers/linux/virtio_pci.h | 2 +
> 15 files changed, 371 insertions(+), 36 deletions(-)
>
next prev parent reply other threads:[~2022-08-23 1:50 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-16 1:06 [PATCH 00/24] Support VIRTIO_F_RING_RESET for virtio-net, vhost-user, vhost-kernel in virtio pci-modern Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 01/24] virtio: sync relevant definitions with linux Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 02/24] virtio: introduce __virtio_queue_reset() Kangjie Xu
2022-08-23 7:31 ` Jason Wang
2022-08-16 1:06 ` [PATCH v2 03/24] virtio: introduce virtio_queue_reset() Kangjie Xu
2022-08-23 7:32 ` Jason Wang
2022-08-16 1:06 ` [PATCH v2 04/24] virtio: introduce virtio_queue_enable() Kangjie Xu
2022-08-23 7:37 ` Jason Wang
2022-08-16 1:06 ` [PATCH v2 05/24] virtio: core: vq reset feature negotation support Kangjie Xu
2022-08-23 7:34 ` Jason Wang
2022-08-23 7:42 ` Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 06/24] virtio-pci: support queue reset Kangjie Xu
2022-08-23 7:40 ` Jason Wang
2022-08-23 7:52 ` Kangjie Xu
2022-08-24 8:56 ` Jason Wang
2022-08-16 1:06 ` [PATCH v2 07/24] virtio-pci: support queue enable Kangjie Xu
2022-08-23 7:44 ` Jason Wang
2022-08-23 8:20 ` Kangjie Xu
2022-08-24 8:59 ` Jason Wang
2022-08-24 11:27 ` Kangjie Xu
2022-08-25 2:52 ` Jason Wang
2022-08-25 3:38 ` Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 08/24] vhost: extract the logic of unmapping the vrings and desc Kangjie Xu
2022-08-23 7:45 ` Jason Wang
2022-08-16 1:06 ` [PATCH v2 09/24] vhost: introduce vhost_dev_virtqueue_stop() Kangjie Xu
2022-08-23 7:52 ` Jason Wang
2022-08-23 8:03 ` Kangjie Xu
2022-08-24 2:40 ` Jason Wang
2022-08-16 1:06 ` [PATCH v2 10/24] vhost: introduce vhost_dev_virtqueue_restart() Kangjie Xu
2022-08-24 2:37 ` Jason Wang
2022-08-24 2:44 ` Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 11/24] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_stop() Kangjie Xu
2022-08-24 2:40 ` Jason Wang
2022-08-24 2:46 ` Kangjie Xu
2022-08-24 3:33 ` Kangjie Xu
2022-08-24 9:00 ` Jason Wang
2022-08-16 1:06 ` [PATCH v2 12/24] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_restart() Kangjie Xu
2022-08-24 2:44 ` Jason Wang
2022-08-24 2:53 ` Kangjie Xu
2022-08-24 9:01 ` Jason Wang
2022-08-24 9:03 ` Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 13/24] docs: vhost-user: add VHOST_USER_RESET_VRING message Kangjie Xu
2022-08-24 2:46 ` Jason Wang
2022-08-16 1:06 ` [PATCH v2 14/24] vhost-user: introduce vhost_reset_vring() interface Kangjie Xu
2022-08-24 2:50 ` Jason Wang
2022-08-24 3:03 ` Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 15/24] vhost-user: add op to enable or disable a single vring Kangjie Xu
2022-08-24 2:53 ` Jason Wang
2022-08-24 3:09 ` Kangjie Xu
2022-08-24 9:02 ` Jason Wang
2022-08-24 9:09 ` Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 16/24] vhost: vhost-user: update vhost_dev_virtqueue_stop() Kangjie Xu
2022-08-24 3:56 ` Jason Wang
2022-08-24 4:59 ` Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 17/24] vhost: vhost-user: update vhost_dev_virtqueue_restart() Kangjie Xu
2022-08-24 4:03 ` Jason Wang
2022-08-24 5:04 ` Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 18/24] vhost-net: vhost-user: update vhost_net_virtqueue_stop() Kangjie Xu
2022-08-24 4:05 ` Jason Wang
2022-08-24 4:57 ` Kangjie Xu
2022-08-24 9:04 ` Jason Wang
2022-08-24 9:18 ` Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 19/24] vhost-net: vhost-user: update vhost_net_virtqueue_restart() Kangjie Xu
2022-08-24 4:06 ` Jason Wang
2022-08-16 1:06 ` [PATCH v2 20/24] virtio-net: introduce flush_or_purge_queued_packets() Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 21/24] virtio-net: support queue reset Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 22/24] virtio-net: support queue_enable Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 23/24] vhost: vhost-kernel: enable vq reset feature Kangjie Xu
2022-08-16 1:06 ` [PATCH v2 24/24] vhost: vhost-user: " Kangjie Xu
2022-08-16 6:14 ` [PATCH 00/24] Support VIRTIO_F_RING_RESET for virtio-net, vhost-user, vhost-kernel in virtio pci-modern Michael S. Tsirkin
2022-08-16 6:15 ` Xuan Zhuo
2022-08-16 6:22 ` Michael S. Tsirkin
2022-08-16 6:40 ` Xuan Zhuo
2022-08-17 6:46 ` Kangjie Xu
2022-08-23 1:49 ` Kangjie Xu [this message]
2022-08-24 4:10 ` Jason Wang
2022-08-24 4:11 ` Jason Wang
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=60b3303e-e556-7f86-3cd0-4ea0ea314fc7@linux.alibaba.com \
--to=kangjie.xu@linux.alibaba.com \
--cc=eduardo@habkost.net \
--cc=f4bug@amsat.org \
--cc=hengqi@linux.alibaba.com \
--cc=jasowang@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=wangyanan55@huawei.com \
--cc=xuanzhuo@linux.alibaba.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.