From patchwork Mon Nov 7 08:59:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taekyung Kim X-Patchwork-Id: 119515 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 6ED8FA0093; Mon, 7 Nov 2022 10:11:59 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 58BE642D1D; Mon, 7 Nov 2022 10:11:55 +0100 (CET) Received: from cvbackendsmtp002.nmdf.navercorp.com (cvbackendsmtp002.nmdf.navercorp.com [125.209.242.244]) by mails.dpdk.org (Postfix) with ESMTP id A2F4740151; Mon, 7 Nov 2022 09:59:54 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=navercorp.com; s=s20171120; t=1667811592; bh=IMBBrpuEGjTIJ+Jp0Wwlw4gDfl/YTiSo8H3Z5LczBro=; h=From:To:Subject:Date:Message-Id:From:Subject:Feedback-ID: X-Works-Security; b=vUHhN9i85s7hLejSAH7fNFqJ8TlnT/qE/vJtqrLArdiYrldhq8/LwTpMQJKm9A7qn e4ja7GNUhx4oPOupIezZaHN5PeioeUcsWhYEN2mjmSdAhHQh0QwJWZ7Fu2p7rq/N6q 1OVESOgRInA1r4lGuPW9macCpMK8mGaRE4NrjRA8YvMDbL/kx8iZX/FMOA6K0d2aXb o2JOgRKIxKel/iAn8/jxlYfivlanvIH5ADq5K1WrW/x8NrXG6TIrJENBP6shspEu1t CDHKNtcPEEaHpyv+YFLcyqu3daNKZjomVPLlwzwUyTUn3B4uI9U3jXxjBYtGBOv/zT a2N/qNwImTVfQ== X-Session-ID: p7Ru89VrQyOdB5oagQjbgg X-Works-Smtp-Source: VXKXFqbrFoJCpNmZaxulWHF0 Received: from dev-tkkim-git-send-email-ncl.nfra.io ([10.113.149.62]) by cvbackendsmtp002.nmdf.navercorp.com with ESMTP id p7Ru89VrQyOdB5oagQjbgg for ; Mon, 07 Nov 2022 08:59:52 -0000 From: Taekyung Kim To: dev@dpdk.org Cc: stable@dpdk.org, maxime.coquelin@redhat.com, chenbo.xia@intel.com, xiao.w.wang@intel.com, kim.tae.kyung@navercorp.com Subject: [PATCH v3] vdpa/ifc: fix update_datapath error handling Date: Mon, 7 Nov 2022 17:59:43 +0900 Message-Id: <20221107085943.116357-1-kim.tae.kyung@navercorp.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20221107053411.98653-1-kim.tae.kyung@navercorp.com> References: <20221107053411.98653-1-kim.tae.kyung@navercorp.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 07 Nov 2022 10:11:53 +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 Reviewed-by: Chenbo Xia Reviewed-by: Maxime Coquelin Acked-by: Andy Pei --- v3: * Fix coding style 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 | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index 8dfd49336e..0396d49122 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -1098,7 +1098,12 @@ 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 +1151,12 @@ 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 +1762,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 +1798,8 @@ 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);