From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 66EEBA09DF for ; Thu, 3 Dec 2020 11:00:05 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D6CC2C99C; Thu, 3 Dec 2020 11:00:03 +0100 (CET) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id F1E7DC940 for ; Thu, 3 Dec 2020 11:00:01 +0100 (CET) IronPort-SDR: 47RMrvYFFqnvdMsCJOajHwplxz0ZGw5fwhTTcjdvcLm55D3bgohIt19XCAxzAzdaNNg3V7fbLR d+u+gyzu4v+g== X-IronPort-AV: E=McAfee;i="6000,8403,9823"; a="173325781" X-IronPort-AV: E=Sophos;i="5.78,389,1599548400"; d="scan'208";a="173325781" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Dec 2020 02:00:00 -0800 IronPort-SDR: JdEoinH/x+M7FvNbUH7spl0RrFLyt7Rd3ZU61OVcVdwN6TaFBLIm3Ry0U4mzVNm6ppr90oiTF8 u9WIP/N7a9cQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,389,1599548400"; d="scan'208";a="365689359" Received: from npg-dpdk-cvl-jeffguo-01.sh.intel.com ([10.67.111.128]) by fmsmga004.fm.intel.com with ESMTP; 03 Dec 2020 01:59:59 -0800 From: Jeff Guo To: ktraynor@redhat.com Cc: stable@dpdk.org, jia.guo@intel.com, Qi Zhang Date: Thu, 3 Dec 2020 17:47:01 +0800 Message-Id: <20201203094702.25734-2-jia.guo@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201203094702.25734-1-jia.guo@intel.com> References: <20201203094702.25734-1-jia.guo@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] [PATCH 18.11 2/3] net/avf: fix flow flush after PF reset X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" [ upstream commit c02ea7410e5124ad44ad7419ab16a43e1b3af647 ] When VF begin reset after PF reset, VF will be uninitialized at first and then be initialized, during the time any invalid cmd such as flow flush should not be sent to PF until the uninitialization is finished. Fixes: 3926cfffff2c ("net/avf: fix command after PF reset") Signed-off-by: Jeff Guo Acked-by: Qi Zhang --- drivers/net/avf/avf_ethdev.c | 5 +++-- drivers/net/avf/avf_vchnl.c | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/net/avf/avf_ethdev.c b/drivers/net/avf/avf_ethdev.c index 35a7debf64..d49de4344a 100644 --- a/drivers/net/avf/avf_ethdev.c +++ b/drivers/net/avf/avf_ethdev.c @@ -1137,8 +1137,6 @@ avf_init_vf(struct rte_eth_dev *dev) } } - vf->vf_reset = false; - return 0; err_rss: rte_free(vf->rss_key); @@ -1269,6 +1267,7 @@ avf_dev_init(struct rte_eth_dev *eth_dev) static void avf_dev_close(struct rte_eth_dev *dev) { + struct avf_info *vf = AVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); struct avf_hw *hw = AVF_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; @@ -1282,6 +1281,8 @@ avf_dev_close(struct rte_eth_dev *dev) rte_intr_callback_unregister(intr_handle, avf_dev_interrupt_handler, dev); avf_disable_irq0(hw); + + vf->vf_reset = false; } static int diff --git a/drivers/net/avf/avf_vchnl.c b/drivers/net/avf/avf_vchnl.c index 29ef485184..39ae0c011c 100644 --- a/drivers/net/avf/avf_vchnl.c +++ b/drivers/net/avf/avf_vchnl.c @@ -73,12 +73,12 @@ avf_execute_vf_cmd(struct avf_adapter *adapter, struct avf_cmd_info *args) int err = 0; int i = 0; - if (_atomic_set_cmd(vf, args->ops)) - return -1; - if (vf->vf_reset) return -EIO; + if (_atomic_set_cmd(vf, args->ops)) + return -1; + ret = avf_aq_send_msg_to_pf(hw, args->ops, AVF_SUCCESS, args->in_args, args->in_args_size, NULL); if (ret) { @@ -150,6 +150,7 @@ avf_handle_pf_event_msg(struct rte_eth_dev *dev, uint8_t *msg, switch (pf_msg->event) { case VIRTCHNL_EVENT_RESET_IMPENDING: PMD_DRV_LOG(DEBUG, "VIRTCHNL_EVENT_RESET_IMPENDING event"); + vf->vf_reset = true; _rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_RESET, NULL); break; -- 2.20.1