From patchwork Fri Sep 16 06:16:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Pei, Andy" X-Patchwork-Id: 116390 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C3E52A0032; Fri, 16 Sep 2022 08:17:40 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 087C542B79; Fri, 16 Sep 2022 08:17:13 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 3742C427EE for ; Fri, 16 Sep 2022 08:17:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663309028; x=1694845028; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=KQRu9mTPOSuE8GLcxxp5/4t3hXE2GlFWx77/85djTyY=; b=Gx8mWjxCrA/Cyi/xv8OcZxldd0WH/vfpwUCiPYF6UsegjgxdKsHeXZd+ sW2Ptemq1weTMs7hyRJY/fpCCxVfOFjpNwuxwyODX6jFWgmWWHef4MvjR 7EMiWpncONami3sE6xaI3i31FFA1ux+CPklmuoXt+7zSIwRBUiao0o7ru Bi6R3SdAQ7VUWXqlNmKKKHrqr0wTI8Ft7aD99ztW7/EFnSeDRWWuj/ZZ0 BV3+FIxZ0NrEDSCulWQfnWeVQFap9kYrQ2qPdlU/vt+12OtJWh7ELoypY 3sVj39DzHTIK+fGB+ll/wvn4m351QJaFtJmt5906aRIVtXKt3F58LQZlj g==; X-IronPort-AV: E=McAfee;i="6500,9779,10471"; a="278650986" X-IronPort-AV: E=Sophos;i="5.93,320,1654585200"; d="scan'208";a="278650986" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Sep 2022 23:16:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,320,1654585200"; d="scan'208";a="568724693" Received: from dpdk-dipei.sh.intel.com ([10.67.110.251]) by orsmga003.jf.intel.com with ESMTP; 15 Sep 2022 23:16:47 -0700 From: Andy Pei To: dev@dpdk.org Cc: chenbo.xia@intel.com, rosen.xu@intel.com, wei.huang@intel.com, gang.cao@intel.com, maxime.coquelin@redhat.com Subject: [PATCH v3 8/8] vhost: improve vDPA blk device readiness condition Date: Fri, 16 Sep 2022 14:16:30 +0800 Message-Id: <1663308990-621-9-git-send-email-andy.pei@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1663308990-621-1-git-send-email-andy.pei@intel.com> References: <1661229305-240952-2-git-send-email-andy.pei@intel.com> <1663308990-621-1-git-send-email-andy.pei@intel.com> 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 In the virtio blk vDPA live migration use case, for the target VM, before the live migration process, QEMU will set call fd to all queues of vDPA back-end. QEMU and vDPA back-end stand by until live migration starts. During live migration process, QEMU sets kick fd and new call fd. However, after the kick fd is set to the vDPA back-end, the vDPA back-end configures device and data path starts. The new call fd will cause some kind of "re-configuration", this kind of "re-configuration" cause IO drop. After this patch, vDPA back-end configures device after kick fd and call fd are well set and make sure no IO drops. This patch only impact virtio blk vDPA device and does not impact net device. Signed-off-by: Andy Pei Signed-off-by: Huang Wei --- lib/vhost/vhost_user.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c index 9169cf5..14ff266 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -2983,6 +2983,7 @@ static int is_vring_iotlb(struct virtio_net *dev, uint32_t vdpa_type = 0; uint32_t request; uint32_t i; + uint16_t blk_call_fd; dev = get_device(vid); if (dev == NULL) @@ -3210,9 +3211,15 @@ static int is_vring_iotlb(struct virtio_net *dev, if (!vdpa_dev) goto out; - if (vdpa_type == RTE_VHOST_VDPA_DEVICE_TYPE_BLK - && request != VHOST_USER_SET_VRING_CALL) - goto out; + if (vdpa_type == RTE_VHOST_VDPA_DEVICE_TYPE_BLK) { + if (request == VHOST_USER_SET_VRING_CALL) { + blk_call_fd = ctx.msg.payload.u64 & VHOST_USER_VRING_IDX_MASK; + if (blk_call_fd != dev->nr_vring - 1) + goto out; + } else { + goto out; + } + } if (!(dev->flags & VIRTIO_DEV_VDPA_CONFIGURED)) { if (vdpa_dev->ops->dev_conf(dev->vid))