From patchwork Tue Aug 15 03:33:48 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Xiaoyun" X-Patchwork-Id: 27593 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id AC4EB7D22; Tue, 15 Aug 2017 05:33:52 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 2C4FA7D1B; Tue, 15 Aug 2017 05:33:50 +0200 (CEST) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Aug 2017 20:33:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.41,376,1498546800"; d="scan'208";a="139659807" Received: from dpdk-lixiaoyun.sh.intel.com ([10.67.111.119]) by fmsmga005.fm.intel.com with ESMTP; 14 Aug 2017 20:33:48 -0700 From: Xiaoyun Li To: beilei.xing@intel.com Cc: jingjing.wu@intel.com, dev@dpdk.org, Xiaoyun Li , stable@dpdk.org Date: Tue, 15 Aug 2017 11:33:48 +0800 Message-Id: <1502768028-187875-1-git-send-email-xiaoyun.li@intel.com> X-Mailer: git-send-email 2.7.4 Subject: [dpdk-dev] [PATCH] net/i40e: fix PF notify issue when VF is not up 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" This patch stops PF from sending message to VF when VF's ARQ and ATQ isn't enabled, namely VF isn't up and modifies VF state to active when VF reset is completed. Fixes: 4861cde46116 ("i40e: new poll mode driver") Cc: stable@dpdk.org Signed-off-by: Xiaoyun Li --- drivers/net/i40e/i40e_pf.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c index 100f8dc..c40f40a 100644 --- a/drivers/net/i40e/i40e_pf.c +++ b/drivers/net/i40e/i40e_pf.c @@ -167,6 +167,9 @@ i40e_pf_host_vf_reset(struct i40e_pf_vf *vf, bool do_hw_reset) PMD_DRV_LOG(ERR, "VF reset timeout"); return -ETIMEDOUT; } + + vf->state = I40E_VF_ACTIVE; + /* This is not first time to do reset, do cleanup job first */ if (vf->vsi) { /* Disable queues */ @@ -1224,8 +1227,22 @@ i40e_notify_vf_link_status(struct rte_eth_dev *dev, struct i40e_pf_vf *vf) break; } - i40e_pf_host_send_msg_to_vf(vf, VIRTCHNL_OP_EVENT, - I40E_SUCCESS, (uint8_t *)&event, sizeof(event)); + uint32_t tval, rval; + uint16_t vf_id; + struct i40e_hw *hw; + + hw = I40E_PF_TO_HW(vf->pf); + vf_id = vf->vf_idx; + + tval = I40E_READ_REG(hw, I40E_VF_ATQLEN(vf_id)); + rval = I40E_READ_REG(hw, I40E_VF_ARQLEN(vf_id)); + + if (tval & I40E_VF_ATQLEN_ATQLEN_MASK || + tval & I40E_VF_ATQLEN_ATQENABLE_MASK || + rval & I40E_VF_ARQLEN_ARQLEN_MASK || + rval & I40E_VF_ARQLEN_ARQENABLE_MASK) + i40e_pf_host_send_msg_to_vf(vf, VIRTCHNL_OP_EVENT, + I40E_SUCCESS, (uint8_t *)&event, sizeof(event)); } void