From: "Michael S. Tsirkin" <mst@redhat.com>
To: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Cc: qemu-devel@nongnu.org, "Eduardo Habkost" <eduardo@habkost.net>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Yanan Wang" <wangyanan55@huawei.com>,
"Jason Wang" <jasowang@redhat.com>,
kangjie.xu@linux.alibaba.com
Subject: Re: [PATCH v5 00/15] Support VIRTIO_F_RING_RESET for virtio-net, vhost-net kernel in virtio pci-modern
Date: Mon, 10 Oct 2022 13:11:17 -0400 [thread overview]
Message-ID: <20221009163405-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20220914042055.61939-1-xuanzhuo@linux.alibaba.com>
On Wed, Sep 14, 2022 at 12:20:40PM +0800, Xuan Zhuo wrote:
> 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-11 support vq reset and vq restart for vhost-kernel.
> 3. Patches 12-14 support vq reset and vq restart for virtio-net.
> 5. Patch 15 enables the vq reset feature for vhost-kernel.
>
> 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_virtqueue_stop()
> -> __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_virtqueue_start() [vhost]
> -> vhost_net_set_backend()
> -> set enabled, reset status of vq.
>
>
> Test environment and method:
> 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)
> 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/
>
> Host Kernel Patch:
> https://lore.kernel.org/bpf/20220825085610.80315-1-kangjie.xu@linux.alibaba.com/
>
> Looking forward to your review and comments. Thanks.
Breaks mingw 32 build
Wl,--no-seh -Wl,--nxcompat -Wl,--warn-common libqemuutil.a libfdt.a libmigration.fa libhwcore.fa libqom.fa libio.fa libcrypto.fa libauthz.fa libblockdev.fa libblock.fa libchardev.fa libqmp.fa @block.syms @qemu.syms /usr/i686-w64-mingw32/sys-root/mingw/lib/libpixman-1.dll.a /usr/i686-w64-mingw32/sys-root/mingw/lib/libz.dll.a -lole32 -ldxguid /usr/i686-w64-mingw32/sys-root/mingw/lib/libmingw32.a -mwindows /usr/i686-w64-mingw32/sys-root/mingw/lib/libSDL2main.a /usr/i686-w64-mingw32/sys-root/mingw/lib/libSDL2.dll.a /usr/i686-w64-mingw32/sys-root/mingw/lib/libgio-2.0.dll.a /usr/i686-w64-mingw32/sys-root/mingw/lib/libgobject-2.0.dll.a /usr/i686-w64-mingw32/sys-root/mingw/lib/libglib-2.0.dll.a /usr/i686-w64-mingw32/sys-root/mingw/lib/libintl.dll.a -lgthread-2.0 -lglib-2.0 -lintl @block.syms -lwinmm -lpathcch -lm -pthread -lgthread-2.0 -lglib-2.0 -lintl -lws2_32 -Wl,--subsystem,console -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -lstdc++ -Wl,--end-group
/usr/lib/gcc/i686-w64-mingw32/11.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-alpha-softmmu.fa.p/hw_net_virtio-net.c.obj: in function `virtio_net_queue_reset':
/scm/qemu-mingw32-build/../qemu/hw/net/virtio-net.c:560: undefined reference to `vhost_net_virtqueue_reset'
/usr/lib/gcc/i686-w64-mingw32/11.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-alpha-softmmu.fa.p/hw_net_virtio-net.c.obj: in function `virtio_net_queue_enable':
/scm/qemu-mingw32-build/../qemu/hw/net/virtio-net.c:578: undefined reference to `vhost_net_virtqueue_restart'
collect2: error: ld returned 1 exit status
> changelog:
>
> v5:
> 1. vhost_net_virtqueue_restart() use -EBUSY replace -ENOTSUP. @Jason
> 2. reuse VHOST_FILE_UNBIND. @Jason
>
> v4:
> 1. Add explanation for preventing userspace datapath in virtio-net.
> 2. Return error when vhost is not started in vhost_net_virtqueue_restart().
> 3. Reset the virtqueue in the device reusing vhost_virtqueue_stop().
> 4. Disable queue reset feature for pre-7.2 machine.
>
> v3:
> 1. Remove support for vhost-user in this series and refactor the code.
> 2. Rename 'vhost_net_virtqueue_stop' to 'vhost_net_virtqueue_reset'.
> 3. Make PCI transport ready before device ready when queue_enabled is set to true.
> 4. Add some comments.
>
> v2:
> 1. Add support for vhost-net kernel scenario.
> 2. Add a new vhost-user message VHOST_USER_RESET_VRING.
> 3. Add migration compatibility for virtqueue reset.
>
> Kangjie Xu (10):
> virtio: introduce virtio_queue_enable()
> virtio: core: vq reset feature negotation support
> virtio-pci: support queue enable
> vhost: expose vhost_virtqueue_start()
> vhost: expose vhost_virtqueue_stop()
> vhost-net: vhost-kernel: introduce vhost_net_virtqueue_reset()
> vhost-net: vhost-kernel: introduce vhost_net_virtqueue_restart()
> virtio-net: introduce flush_or_purge_queued_packets()
> virtio-net: support queue_enable
> vhost: vhost-kernel: 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
>
> hw/core/machine.c | 4 +-
> hw/net/vhost_net.c | 79 +++++++++++++++++++
> hw/net/virtio-net.c | 56 +++++++++++--
> hw/virtio/vhost.c | 16 ++--
> hw/virtio/virtio-pci.c | 16 ++++
> hw/virtio/virtio.c | 62 +++++++++++----
> include/hw/virtio/vhost.h | 5 ++
> include/hw/virtio/virtio-pci.h | 5 ++
> 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 +
> 12 files changed, 230 insertions(+), 32 deletions(-)
>
> --
> 2.32.0.3.g01195cf9f
prev parent reply other threads:[~2022-10-10 17:16 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-14 4:20 [PATCH v5 00/15] Support VIRTIO_F_RING_RESET for virtio-net, vhost-net kernel in virtio pci-modern Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 01/15] virtio: sync relevant definitions with linux Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 02/15] virtio: introduce __virtio_queue_reset() Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 03/15] virtio: introduce virtio_queue_reset() Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 04/15] virtio: introduce virtio_queue_enable() Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 05/15] virtio: core: vq reset feature negotation support Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 06/15] virtio-pci: support queue reset Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 07/15] virtio-pci: support queue enable Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 08/15] vhost: expose vhost_virtqueue_start() Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 09/15] vhost: expose vhost_virtqueue_stop() Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 10/15] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_reset() Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 11/15] vhost-net: vhost-kernel: introduce vhost_net_virtqueue_restart() Xuan Zhuo
2022-09-14 4:36 ` Jason Wang
2022-09-14 4:20 ` [PATCH v5 12/15] virtio-net: introduce flush_or_purge_queued_packets() Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 13/15] virtio-net: support queue reset Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 14/15] virtio-net: support queue_enable Xuan Zhuo
2022-09-14 4:20 ` [PATCH v5 15/15] vhost: vhost-kernel: enable vq reset feature Xuan Zhuo
2022-09-14 4:36 ` Jason Wang
2022-10-10 17:11 ` Michael S. Tsirkin [this message]
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=20221009163405-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=eduardo@habkost.net \
--cc=f4bug@amsat.org \
--cc=jasowang@redhat.com \
--cc=kangjie.xu@linux.alibaba.com \
--cc=marcel.apfelbaum@gmail.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.