From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <xiaowan1@shecgisg004.sh.intel.com>
Received: from mga11.intel.com (mga11.intel.com [192.55.52.93])
 by dpdk.org (Postfix) with ESMTP id 5EC3891F8
 for <dev@dpdk.org>; Thu, 10 Sep 2015 06:39:36 +0200 (CEST)
Received: from orsmga002.jf.intel.com ([10.7.209.21])
 by fmsmga102.fm.intel.com with ESMTP; 09 Sep 2015 21:39:35 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.17,501,1437462000"; d="scan'208";a="801367818"
Received: from shvmail01.sh.intel.com ([10.239.29.42])
 by orsmga002.jf.intel.com with ESMTP; 09 Sep 2015 21:39:34 -0700
Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com
 [10.239.29.89])
 by shvmail01.sh.intel.com with ESMTP id t8A4dWAg007890;
 Thu, 10 Sep 2015 12:39:32 +0800
Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1])
 by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id
 t8A4dTKU026668; Thu, 10 Sep 2015 12:39:31 +0800
Received: (from xiaowan1@localhost)
 by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t8A4dT2b026661;
 Thu, 10 Sep 2015 12:39:29 +0800
From: Wang Xiao W <xiao.w.wang@intel.com>
To: dev@dpdk.org
Date: Thu, 10 Sep 2015 12:38:31 +0800
Message-Id: <1441859917-26475-23-git-send-email-xiao.w.wang@intel.com>
X-Mailer: git-send-email 1.7.4.1
In-Reply-To: <1441859917-26475-1-git-send-email-xiao.w.wang@intel.com>
References: <1441859917-26475-1-git-send-email-xiao.w.wang@intel.com>
Cc: Wang Xiao W <xiao.w.wang@intel.com>
Subject: [dpdk-dev] [PATCH 22/28] fm10k: do not assume VF always has 1 queue
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: patches and discussions about DPDK <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://dpdk.org/ml/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <http://dpdk.org/ml/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Thu, 10 Sep 2015 04:39:36 -0000

It is possible that the PF has not yet assigned resources to the VF.
Although rare, this could result in the VF attempting to read queues it
does not own and result in FUM or THI faults in the PF. To prevent this,
check queue 0 before we continue in init_hw_vf.

Signed-off-by: Wang Xiao W <xiao.w.wang@intel.com>
---
 drivers/net/fm10k/base/fm10k_vf.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/fm10k/base/fm10k_vf.c b/drivers/net/fm10k/base/fm10k_vf.c
index ba7c7c1..3fba007 100644
--- a/drivers/net/fm10k/base/fm10k_vf.c
+++ b/drivers/net/fm10k/base/fm10k_vf.c
@@ -126,7 +126,12 @@ STATIC s32 fm10k_init_hw_vf(struct fm10k_hw *hw)
 
 	DEBUGFUNC("fm10k_init_hw_vf");
 
-	/* assume we always have at least 1 queue */
+	/* verify we have at least 1 queue */
+	if (!~FM10K_READ_REG(hw, FM10K_TXQCTL(0)) ||
+	    !~FM10K_READ_REG(hw, FM10K_RXQCTL(0)))
+		return FM10K_ERR_NO_RESOURCES;
+
+	/* determine how many queues we have */
 	for (i = 1; tqdloc0 && (i < FM10K_MAX_QUEUES_POOL); i++) {
 		/* verify the Descriptor cache offsets are increasing */
 		tqdloc = ~FM10K_READ_REG(hw, FM10K_TQDLOC(i));
-- 
1.9.3