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 446C4A0556; Mon, 17 Oct 2022 10:47:18 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1C7EA4021D; Mon, 17 Oct 2022 10:47:18 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mails.dpdk.org (Postfix) with ESMTP id E6AB540143 for ; Mon, 17 Oct 2022 10:47:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1665996435; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wVnma/tVjzZgULUgTC3Cw4et1nJ8jXIEd+Y+sEW/jrM=; b=OJRK4Sn5cCwak3Y7C12/MAKWecUAYMXcckK+sWmty1bNngoZ8Lp2na2gDDWTq8c1Xfl9zs 7siHPK9MJu8hrN7omS2wk59j/I90zTWBH87baoWJrPyJTIGADFhQO8je/XHSpkJhZOPCCz hGr5lOFeO5GaVyi7N1W620zc8sHOOfs= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-259-4qJYd6bqP4Wk4B_Z1IAnNw-1; Mon, 17 Oct 2022 04:47:11 -0400 X-MC-Unique: 4qJYd6bqP4Wk4B_Z1IAnNw-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A2A5F299E768; Mon, 17 Oct 2022 08:46:54 +0000 (UTC) Received: from [10.39.208.29] (unknown [10.39.208.29]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8A2C71155887; Mon, 17 Oct 2022 08:46:42 +0000 (UTC) Message-ID: <9a3b35f1-bbf3-313a-d7e3-f964c825f137@redhat.com> Date: Mon, 17 Oct 2022 10:46:40 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.1 Subject: Re: [PATCH v5 7/8] vhost: vDPA blk device gets ready when the first queue is ready To: "Xia, Chenbo" , "Pei, Andy" , "dev@dpdk.org" Cc: "Xu, Rosen" , "Huang, Wei" , "Cao, Gang" References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1665990833-44710-1-git-send-email-andy.pei@intel.com> <1665990833-44710-8-git-send-email-andy.pei@intel.com> From: Maxime Coquelin In-Reply-To: X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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 On 10/17/22 10:42, Xia, Chenbo wrote: >> -----Original Message----- >> From: Maxime Coquelin >> Sent: Monday, October 17, 2022 4:37 PM >> To: Xia, Chenbo ; Pei, Andy ; >> dev@dpdk.org >> Cc: Xu, Rosen ; Huang, Wei ; Cao, >> Gang >> Subject: Re: [PATCH v5 7/8] vhost: vDPA blk device gets ready when the >> first queue is ready >> >> >> >> On 10/17/22 09:54, Xia, Chenbo wrote: >>>> -----Original Message----- >>>> From: Pei, Andy >>>> Sent: Monday, October 17, 2022 3:14 PM >>>> To: dev@dpdk.org >>>> Cc: Xia, Chenbo ; Xu, Rosen ; >>>> Huang, Wei ; Cao, Gang ; >>>> maxime.coquelin@redhat.com >>>> Subject: [PATCH v5 7/8] vhost: vDPA blk device gets ready when the >> first >>>> queue is ready >>>> >>>> When boot from virtio blk device, seabios in QEMU only enables one >> queue. >>>> To work in this scenario, vDPA BLK device back-end configure device >>>> when any queue is ready. >>>> >>>> Signed-off-by: Andy Pei >>>> Signed-off-by: Huang Wei >>>> --- >>>> lib/vhost/vhost_user.c | 31 +++++++++++++++++++++++++++---- >>>> 1 file changed, 27 insertions(+), 4 deletions(-) >>>> >>>> diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c >>>> index cd65257..f5206dd 100644 >>>> --- a/lib/vhost/vhost_user.c >>>> +++ b/lib/vhost/vhost_user.c >>>> @@ -1441,11 +1441,15 @@ >>>> } >>>> >>>> #define VIRTIO_BUILTIN_NUM_VQS_TO_BE_READY 2u >>>> +#define VIRTIO_BLK_NUM_VQS_TO_BE_READY 1u >>>> >>>> static int >>>> virtio_is_ready(struct virtio_net *dev) >>>> { >>>> + struct rte_vdpa_device *vdpa_dev; >>>> struct vhost_virtqueue *vq; >>>> + uint32_t vdpa_type; >>>> + int ret = 0; >>>> uint32_t i, nr_vring = dev->nr_vring; >>>> >>>> if (dev->flags & VIRTIO_DEV_READY) >>>> @@ -1454,13 +1458,32 @@ >>>> if (!dev->nr_vring) >>>> return 0; >>>> >>>> - if (dev->flags & VIRTIO_DEV_BUILTIN_VIRTIO_NET) { >>>> - nr_vring = VIRTIO_BUILTIN_NUM_VQS_TO_BE_READY; >>>> + vdpa_dev = dev->vdpa_dev; >>>> + if (vdpa_dev) { >>>> + if (vdpa_dev->ops->get_dev_type) { >>>> + ret = vdpa_dev->ops->get_dev_type(vdpa_dev, &vdpa_type); >>>> + if (ret) { >>>> + VHOST_LOG_CONFIG(dev->ifname, ERR, >>>> + "failed to get vdpa dev type.\n"); >>>> + return -1; >>>> + } >>>> + } else { >>>> + vdpa_type = RTE_VHOST_VDPA_DEVICE_TYPE_NET; >>>> + } >>>> + } else { >>>> + vdpa_type = -1; >>>> + } >>> >>> Looking at it again, instead of getting the device type again and again, >>> Should we just get and set the type into vdpa_dev when registering a >> vdpa device? >>> >>> What do you think? >> >> I think this would be preferable. >> >> If it is to be in struct virtio_net, please take care to place it >> properly not to create new holes. Also, it does not have to be placed in >> hot cachelines. > > I am thinking struct rte_vdpa_device. Because if no vdpa device, there will > be no vdpa device type. What do you think? Just looked at the code and indeed, struct rte_vdpa_device is the right place. Thanks, Maxime > Thanks, > Chenbo > >> >> Thanks, >> Maxime >>> Thanks, >>> Chenbo >>> >>>> >>>> - if (dev->nr_vring < nr_vring) >>>> - return 0; >>>> + if (vdpa_type == RTE_VHOST_VDPA_DEVICE_TYPE_BLK) { >>>> + nr_vring = VIRTIO_BLK_NUM_VQS_TO_BE_READY; >>>> + } else { >>>> + if (dev->flags & VIRTIO_DEV_BUILTIN_VIRTIO_NET) >>>> + nr_vring = VIRTIO_BUILTIN_NUM_VQS_TO_BE_READY; >>>> } >>>> >>>> + if (dev->nr_vring < nr_vring) >>>> + return 0; >>>> + >>>> for (i = 0; i < nr_vring; i++) { >>>> vq = dev->virtqueue[i]; >>>> >>>> -- >>>> 1.8.3.1 >>> >