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 4FB2AA0093; Mon, 7 Nov 2022 08:39:33 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2EB1640156; Mon, 7 Nov 2022 08:39:33 +0100 (CET) Received: from cvbackendsmtp003.nmdf.navercorp.com (cvbackendsmtp003.nmdf.navercorp.com [125.209.242.247]) by mails.dpdk.org (Postfix) with ESMTP id 6BF9E4003F; Mon, 7 Nov 2022 06:34:40 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=navercorp.com; s=s20171120; t=1667799278; bh=aeu16pPm+RGuGUxJJ8FEY9/zECnH3p5RFPBJycePjcE=; h=From:To:Subject:Date:Message-Id:From:Subject:Feedback-ID: X-Works-Security; b=ybvtRa/zvTBF3pmajDpy0GxJrR38S4epgp2s1Ur09C2mbDCFUGWn98CMIoIGfzhJw mrfEpRKfMmzHrCMaOD+CJzkrg+elcwAO/Ifv1wULm8FvxHQUiwYNOu9pWhMUsUe7v8 ldZc/fraCJ+PvM6rV21LaGc2h2+ue8M9aWM/PP4dwICgaG45nYyuwZHOxVd2QXVE1o rKt7cdHmYc26VQk/AdMqAtYuifeJEiWwiiKUzMs/FA492m31qCz2z4cgiVW1eH3FRU +f++BAguEfrmljSplc/3upXiA6OBAxUEpY8qatNyxQvcctj/zEwuO1h4drVJ6HfFoE 0bRn2m8QpofzA== X-Session-ID: UgRfCaOaRRyHyMZZQg9K5Q X-Works-Smtp-Source: IlKrFqbrFoJCpNm/Fq2rWHF0 Received: from dev-tkkim-git-send-email-ncl.nfra.io ([10.113.149.62]) by cvbackendsmtp003.nmdf.navercorp.com with ESMTP id UgRfCaOaRRyHyMZZQg9K5Q for ; Mon, 07 Nov 2022 05:34:38 -0000 From: Taekyung Kim To: dev@dpdk.org Cc: maxime.coquelin@redhat.com, chenbo.xia@intel.com, kim.tae.kyung@navercorp.com, xiao.w.wang@intel.com, stable@dpdk.org Subject: [PATCH v2] vdpa/ifc: fix update_datapath error handling Date: Mon, 7 Nov 2022 14:34:11 +0900 Message-Id: <20221107053411.98653-1-kim.tae.kyung@navercorp.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <68eacb2c-4004-1f43-f14c-702bcec9fe6f@redhat.com> References: <68eacb2c-4004-1f43-f14c-702bcec9fe6f@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailman-Approved-At: Mon, 07 Nov 2022 08:39:32 +0100 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 Stop and return the error code when update_datapath fails. update_datapath prepares resources for the vdpa device. The driver should not perform any further actions if update_datapath returns an error. Fixes: a3f8150eac6d ("net/ifcvf: add ifcvf vDPA driver") Cc: stable@dpdk.org Signed-off-by: Taekyung Kim --- v2: * Revert the prepared resources before returning an error * Rebase to 22.11 rc2 * Add fixes and cc for backport --- drivers/vdpa/ifc/ifcvf_vdpa.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index 8dfd49336e..e25fb16106 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -1098,7 +1098,11 @@ ifcvf_dev_config(int vid) internal = list->internal; internal->vid = vid; rte_atomic32_set(&internal->dev_attached, 1); - update_datapath(internal); + if (update_datapath(internal) < 0) { + DRV_LOG(ERR, "failed to update datapath for vDPA device %s", vdev->device->name); + rte_atomic32_set(&internal->dev_attached, 0); + return -1; + } hw = &internal->hw; for (i = 0; i < hw->nr_vring; i++) { @@ -1146,7 +1150,11 @@ ifcvf_dev_close(int vid) internal->sw_fallback_running = false; } else { rte_atomic32_set(&internal->dev_attached, 0); - update_datapath(internal); + if (update_datapath(internal) < 0) { + DRV_LOG(ERR, "failed to update datapath for vDPA device %s", vdev->device->name); + internal->configured = 0; + return -1; + } } internal->configured = 0; @@ -1752,7 +1760,14 @@ ifcvf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, } rte_atomic32_set(&internal->started, 1); - update_datapath(internal); + if (update_datapath(internal) < 0) { + DRV_LOG(ERR, "failed to update datapath %s", pci_dev->name); + rte_atomic32_set(&internal->started, 0); + pthread_mutex_lock(&internal_list_lock); + TAILQ_REMOVE(&internal_list, list, next); + pthread_mutex_unlock(&internal_list_lock); + goto error; + } rte_kvargs_free(kvlist); return 0; @@ -1781,7 +1796,9 @@ ifcvf_pci_remove(struct rte_pci_device *pci_dev) internal = list->internal; rte_atomic32_set(&internal->started, 0); - update_datapath(internal); + if (update_datapath(internal) < 0) { + DRV_LOG(ERR, "failed to update datapath %s", pci_dev->name); + } rte_pci_unmap_device(internal->pdev); rte_vfio_container_destroy(internal->vfio_container_fd); -- 2.34.1