From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0EC7CA0556; Mon, 5 Sep 2022 05:48:13 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E39EA40698; Mon, 5 Sep 2022 05:48:11 +0200 (CEST) Received: from out30-43.freemail.mail.aliyun.com (out30-43.freemail.mail.aliyun.com [115.124.30.43]) by mails.dpdk.org (Postfix) with ESMTP id A5300400D4 for ; Mon, 5 Sep 2022 05:48:09 +0200 (CEST) X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R891e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=ay29a033018046056; MF=kangjie.xu@linux.alibaba.com; NM=1; PH=DS; RN=7; SR=0; TI=SMTPD_---0VOK9Zbv_1662349685; Received: from localhost(mailfrom:kangjie.xu@linux.alibaba.com fp:SMTPD_---0VOK9Zbv_1662349685) by smtp.aliyun-inc.com; Mon, 05 Sep 2022 11:48:06 +0800 From: Kangjie Xu To: maxime.coquelin@redhat.com, chenbo.xia@intel.com Cc: dev@dpdk.org, xuanzhuo@linux.alibaba.com, hengqi@linux.alibaba.com, jasonwang@redhat.com, mst@redhat.com Subject: [PATCH v2 0/2] vhost: support VIRTIO_F_RING_RESET for vhost-user Date: Mon, 5 Sep 2022 11:48:03 +0800 Message-Id: X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add VIRTIO_F_RING_RESET, which indicates that the driver can reset a virtqueue individually. VIRTIO_F_RING_RESET feature is added to virtio-spec 1.2. The relevant information is in https://github.com/oasis-tcs/virtio-spec/issues/124 https://github.com/oasis-tcs/virtio-spec/issues/139 The implementation only adds the feature bit in supported features. It also adds a new vhost-user message VHOST_USER_RESET_VRING. The related definition is defined in the related QEMU patch set: https://lore.kernel.org/qemu-devel/cover.1661510725.git.kangjie.xu@linux.alibaba.com/T/#t The virtqueue reset process can be concluded as two parts: 1. The driver can reset a virtqueue. It will send VHOST_USER_RESET_VRING to DPDK. After received the message, DPDK will reset the virtqueue. The new message VHOST_USER_RESET_VRING has been acked by the QEMU virtio maintainer: https://lore.kernel.org/qemu-devel/57362274-b2fb-a47d-fea7-d3ebcfad967b@redhat.com/ 2. After the virtqueue is disabled, the driver may optionally re-enable it. To avoid confusion with VHOST_USER_SET_VRING_ENABLE, we call this part as "restart". The virtqueue's information may be changed when restarting it. Thus, the information of the reset virtqueue should be updated. This part is basically similar to when the virtqueue is started for the first time, except that the restart process does not need to set features and set mem table since they do not change. QEMU will send messages containing size, base, addr, kickfd and callfd of the virtqueue in order. Specifically, the DPDK will receive these messages in order: a. VHOST_USER_SET_VRING_NUM b. VHOST_USER_SET_VRING_BASE c. VHOST_USER_SET_VRING_ADDR d. VHOST_USER_SET_VRING_KICK e. VHOST_USER_SET_VRING_CALL f. VHOST_USER_SET_VRING_ENABLE The last VHOST_USER_SET_VRING_ENABLE message with "payload.state.num" set to 1, will be sent to enable the virtqueue and the restart process is finished. Test environment: Host: 5.4.189 Qemu: QEMU emulator version 7.0.50 (With vq reset support) Guest: 5.19.0-rc3 (With vq reset support) DPDK: 22.07-rc1 Test Cmd: ethtool -g eth1; ethtool -G eth1 rx $1 tx $2; ethtool -g eth1; The driver can resize the virtio queue, then virtio queue reset function should be triggered. Guest Kernel Patch: https://lore.kernel.org/bpf/20220801063902.129329-1-xuanzhuo@linux.alibaba.com/ QEMU Patch: https://lore.kernel.org/qemu-devel/cover.1661510725.git.kangjie.xu@linux.alibaba.com/T/ https://lore.kernel.org/qemu-devel/cover.1661414345.git.kangjie.xu@linux.alibaba.com/T/ Looking forward to your review and comments. Kangjie Xu (2): vhost: support VIRTIO_F_RING_RESET for vhost-user vhost: introduce VHOST_USER_RESET_VRING lib/vhost/vhost.c | 2 +- lib/vhost/vhost.h | 9 ++++++++- lib/vhost/vhost_user.c | 27 ++++++++++++++++++++++++++- lib/vhost/vhost_user.h | 1 + 4 files changed, 36 insertions(+), 3 deletions(-) -- 2.32.0