From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 869E3A0508; Wed, 13 Apr 2022 10:14:37 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9D6DD42874; Wed, 13 Apr 2022 10:12:10 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id 1800D42871 for ; Wed, 13 Apr 2022 10:12:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1649837528; x=1681373528; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dAIbwqYxVmw5fWOkgq11u1+5kzjeVixuJse3T9of4uI=; b=YjyVa6yDkLnJWK+9AuQiiUWc1AmLLHBBAmjgiReFKcDVAsHN2VNqzZse VRdLKTe8C2mrlUSzmzHCAtFd1Atf/1ROj8DB6dLzUXfaMqpfbCM3J4Dct kBah1TNGOpvNCX6Si+PzKd7b1BXy4S8kOZ1uw/PybuvVWLBDqO6lZInd4 cz+28eoQX5Jj8618zxDWJSnKX1jSf3oHRqgtbqwbEbollV9eM4atg08b6 vqTjjmviH/aaSgWz6qOCvzsxy/V0SXMhQXAvcuh3CkhQExYvjdpuEwqLq WZPuiP5T8UM19uu2+zHANChuQfSPzWX3K8LjsV02+udAWD/qzIq9RljTK Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10315"; a="287630163" X-IronPort-AV: E=Sophos;i="5.90,256,1643702400"; d="scan'208";a="287630163" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2022 01:12:07 -0700 X-IronPort-AV: E=Sophos;i="5.90,256,1643702400"; d="scan'208";a="526847963" Received: from intel-cd-odc-kevin.cd.intel.com ([10.240.178.195]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2022 01:12:05 -0700 From: Kevin Liu To: dev@dpdk.org Cc: qiming.yang@intel.com, qi.z.zhang@intel.com, stevex.yang@intel.com, Kevin Liu , Alvin Zhang Subject: [PATCH v2 33/33] net/ice: fix DCF reset Date: Wed, 13 Apr 2022 16:09:32 +0000 Message-Id: <20220413160932.2074781-34-kevinx.liu@intel.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20220413160932.2074781-1-kevinx.liu@intel.com> References: <20220407105706.18889-1-kevinx.liu@intel.com> <20220413160932.2074781-1-kevinx.liu@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 After the PF triggers the VF reset, before the VF PMD can perform any operations on the hardware, it must reinitialize the all resources. This patch adds a flag to indicate whether the VF has been reset by PF, and update the DCF resetting operations according to this flag. Fixes: 1a86f4dbdf42 ("net/ice: support DCF device reset") Signed-off-by: Alvin Zhang Signed-off-by: Kevin Liu --- drivers/net/ice/base/ice_common.c | 4 +++- drivers/net/ice/ice_dcf.c | 2 +- drivers/net/ice/ice_dcf_ethdev.c | 17 ++++++++++++++++- drivers/net/ice/ice_dcf_parent.c | 3 +++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/drivers/net/ice/base/ice_common.c b/drivers/net/ice/base/ice_common.c index db87bacd97..13feb55469 100644 --- a/drivers/net/ice/base/ice_common.c +++ b/drivers/net/ice/base/ice_common.c @@ -755,6 +755,7 @@ enum ice_status ice_init_fltr_mgmt_struct(struct ice_hw *hw) status = ice_init_def_sw_recp(hw, &hw->switch_info->recp_list); if (status) { ice_free(hw, hw->switch_info); + hw->switch_info = NULL; return status; } return ICE_SUCCESS; @@ -823,7 +824,6 @@ ice_cleanup_fltr_mgmt_single(struct ice_hw *hw, struct ice_switch_info *sw) } ice_rm_sw_replay_rule_info(hw, sw); ice_free(hw, sw->recp_list); - ice_free(hw, sw); } /** @@ -833,6 +833,8 @@ ice_cleanup_fltr_mgmt_single(struct ice_hw *hw, struct ice_switch_info *sw) void ice_cleanup_fltr_mgmt_struct(struct ice_hw *hw) { ice_cleanup_fltr_mgmt_single(hw, hw->switch_info); + ice_free(hw, hw->switch_info); + hw->switch_info = NULL; } /** diff --git a/drivers/net/ice/ice_dcf.c b/drivers/net/ice/ice_dcf.c index 23edfd09b1..35773e2acd 100644 --- a/drivers/net/ice/ice_dcf.c +++ b/drivers/net/ice/ice_dcf.c @@ -1429,7 +1429,7 @@ ice_dcf_cap_reset(struct rte_eth_dev *eth_dev, struct ice_dcf_hw *hw) int ret; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); - struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; + struct rte_intr_handle *intr_handle = pci_dev->intr_handle; ice_dcf_disable_irq0(hw); rte_intr_disable(intr_handle); diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c index e46c8405aa..0315e694d7 100644 --- a/drivers/net/ice/ice_dcf_ethdev.c +++ b/drivers/net/ice/ice_dcf_ethdev.c @@ -1004,6 +1004,15 @@ dcf_add_del_mc_addr_list(struct ice_dcf_hw *hw, uint32_t i; int len, err = 0; + if (hw->resetting) { + if (!add) + return 0; + + PMD_DRV_LOG(ERR, + "fail to add multicast MACs for VF resetting"); + return -EIO; + } + len = sizeof(struct virtchnl_ether_addr_list); len += sizeof(struct virtchnl_ether_addr) * mc_addrs_num; @@ -1642,7 +1651,13 @@ ice_dcf_dev_close(struct rte_eth_dev *dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; - (void)ice_dcf_dev_stop(dev); + if (adapter->parent.pf.adapter_stopped) + (void)ice_dcf_dev_stop(dev); + + if (adapter->real_hw.resetting) { + ice_dcf_uninit_hw(dev, &adapter->real_hw); + ice_dcf_init_hw(dev, &adapter->real_hw); + } ice_free_queues(dev); diff --git a/drivers/net/ice/ice_dcf_parent.c b/drivers/net/ice/ice_dcf_parent.c index 2f96dedcce..7f7ed796e2 100644 --- a/drivers/net/ice/ice_dcf_parent.c +++ b/drivers/net/ice/ice_dcf_parent.c @@ -240,6 +240,9 @@ ice_dcf_handle_pf_event_msg(struct ice_dcf_hw *dcf_hw, case VIRTCHNL_EVENT_RESET_IMPENDING: PMD_DRV_LOG(DEBUG, "VIRTCHNL_EVENT_RESET_IMPENDING event"); dcf_hw->resetting = true; + rte_eth_dev_callback_process(dcf_hw->eth_dev, + RTE_ETH_EVENT_INTR_RESET, + NULL); break; case VIRTCHNL_EVENT_LINK_CHANGE: PMD_DRV_LOG(DEBUG, "VIRTCHNL_EVENT_LINK_CHANGE event"); -- 2.33.1