From patchwork Fri Apr 20 15:15:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Wang X-Patchwork-Id: 38653 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8B90C7E24; Fri, 20 Apr 2018 17:16:23 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id AF0CB2B9D for ; Fri, 20 Apr 2018 17:16:22 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Apr 2018 08:16:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,302,1520924400"; d="scan'208";a="48565058" Received: from dpdk-xiao-1.sh.intel.com ([10.67.110.178]) by fmsmga001.fm.intel.com with ESMTP; 20 Apr 2018 08:16:20 -0700 From: Xiao Wang To: ferruh.yigit@intel.com Cc: dev@dpdk.org, Xiao Wang Date: Fri, 20 Apr 2018 23:15:24 +0800 Message-Id: <20180420151524.36696-1-xiao.w.wang@intel.com> X-Mailer: git-send-email 2.15.1 Subject: [dpdk-dev] [PATCH] net/ifcvf: do not panic in address translation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Driver should return error and report error message rather than call rte_panic(). Signed-off-by: Xiao Wang --- drivers/net/ifc/ifcvf_vdpa.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/drivers/net/ifc/ifcvf_vdpa.c b/drivers/net/ifc/ifcvf_vdpa.c index 27316a99f..26d70be18 100644 --- a/drivers/net/ifc/ifcvf_vdpa.c +++ b/drivers/net/ifc/ifcvf_vdpa.c @@ -226,8 +226,6 @@ qva_to_gpa(int vid, uint64_t qva) } exit: - if (gpa == 0) - rte_panic("failed to get gpa\n"); if (mem) free(mem); return gpa; @@ -240,6 +238,7 @@ vdpa_ifcvf_start(struct ifcvf_internal *internal) int i, nr_vring; int vid; struct rte_vhost_vring vq; + uint64_t gpa; vid = internal->vid; nr_vring = rte_vhost_get_vring_num(vid); @@ -247,12 +246,27 @@ vdpa_ifcvf_start(struct ifcvf_internal *internal) for (i = 0; i < nr_vring; i++) { rte_vhost_get_vhost_vring(vid, i, &vq); - hw->vring[i].desc = qva_to_gpa(vid, - (uint64_t)(uintptr_t)vq.desc); - hw->vring[i].avail = qva_to_gpa(vid, - (uint64_t)(uintptr_t)vq.avail); - hw->vring[i].used = qva_to_gpa(vid, - (uint64_t)(uintptr_t)vq.used); + gpa = qva_to_gpa(vid, (uint64_t)(uintptr_t)vq.desc); + if (gpa == 0) { + DRV_LOG(ERR, "Fail to get GPA for descriptor ring."); + return -1; + } + hw->vring[i].desc = gpa; + + gpa = qva_to_gpa(vid, (uint64_t)(uintptr_t)vq.avail); + if (gpa == 0) { + DRV_LOG(ERR, "Fail to get GPA for available ring."); + return -1; + } + hw->vring[i].avail = gpa; + + gpa = qva_to_gpa(vid, (uint64_t)(uintptr_t)vq.used); + if (gpa == 0) { + DRV_LOG(ERR, "Fail to get GPA for used ring."); + return -1; + } + hw->vring[i].used = gpa; + hw->vring[i].size = vq.size; rte_vhost_get_vring_base(vid, i, &hw->vring[i].last_avail_idx, &hw->vring[i].last_used_idx);