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 E256FA00C4; Wed, 27 Jul 2022 10:57:03 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7CB6240141; Wed, 27 Jul 2022 10:57:03 +0200 (CEST) Received: from out30-130.freemail.mail.aliyun.com (out30-130.freemail.mail.aliyun.com [115.124.30.130]) by mails.dpdk.org (Postfix) with ESMTP id 8E260400D7 for ; Wed, 27 Jul 2022 10:57:01 +0200 (CEST) X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R561e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=ay29a033018045170; MF=kangjie.xu@linux.alibaba.com; NM=1; PH=DS; RN=5; SR=0; TI=SMTPD_---0VKaDMn2_1658912217; Received: from 30.227.68.147(mailfrom:kangjie.xu@linux.alibaba.com fp:SMTPD_---0VKaDMn2_1658912217) by smtp.aliyun-inc.com; Wed, 27 Jul 2022 16:56:58 +0800 Message-ID: <7faa7081-6fec-68ea-992c-71a089840802@linux.alibaba.com> Date: Wed, 27 Jul 2022 16:56:57 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH 1/1] vhost: support VIRTIO_F_RING_RESET for vhost-user From: Kangjie Xu To: maxime.coquelin@redhat.com, chenbo.xia@intel.com References: <20220719072650.118176-1-kangjie.xu@linux.alibaba.com> Cc: dev@dpdk.org, hengqi@linux.alibaba.com, xuanzhuo@linux.alibaba.com In-Reply-To: <20220719072650.118176-1-kangjie.xu@linux.alibaba.com> Content-Type: text/plain; charset=UTF-8; format=flowed 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 This patch will be updated in the future. We'll fix some issues based on some review comments from QEMU community. We intend to add a new vhost protocol message for virtqueue reset. Please let me know any questions or suggestions you might have. Thanks 在 2022/7/19 15:26, Kangjie Xu 写道: > Add VIRTIO_F_RING_RESET, which indicates that the driver can reset a > queue 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 > does not require any other changes because we reuse the existing vhost > protocol. > > The virtqueue reset process can be concluded as two parts: > 1. The driver can reset a virtqueue. When it is triggered, > VHOST_USER_SET_VRING_ENABLE message with "payload.state.num" set to 0 > is sent to DPDK. Then the virtqueue will be disabled in DPDK. > 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 does 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. > > Signed-off-by: Kangjie Xu > Signed-off-by: Xuan Zhuo > --- > 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/20220629065656.54420-1-xuanzhuo@linux.alibaba.com > > QEMU Patch: > https://lore.kernel.org/qemu-devel/cover.1658141552.git.kangjie.xu@linux.alibaba.com > > lib/vhost/vhost.h | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/lib/vhost/vhost.h b/lib/vhost/vhost.h > index 14235aaf81..9711ded7dd 100644 > --- a/lib/vhost/vhost.h > +++ b/lib/vhost/vhost.h > @@ -378,6 +378,11 @@ struct vhost_msg { > #define VIRTIO_F_VERSION_1 32 > #endif > > +/* This feature indicates that the driver can reset a queue individually. */ > +#ifndef VIRTIO_F_RING_RESET > +#define VIRTIO_F_RING_RESET 40 > +#endif > + > /* Declare packed ring related bits for older kernels */ > #ifndef VIRTIO_F_RING_PACKED > > @@ -440,7 +445,8 @@ struct vring_packed_desc_event { > (1ULL << VIRTIO_NET_F_MTU) | \ > (1ULL << VIRTIO_F_IN_ORDER) | \ > (1ULL << VIRTIO_F_IOMMU_PLATFORM) | \ > - (1ULL << VIRTIO_F_RING_PACKED)) > + (1ULL << VIRTIO_F_RING_PACKED) | \ > + (1ULL << VIRTIO_F_RING_RESET)) > > > struct guest_page {