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 4C89643206; Thu, 26 Oct 2023 12:01:10 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 28E31402CE; Thu, 26 Oct 2023 12:01:10 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 11009402C5; Thu, 26 Oct 2023 12:01:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698314469; x=1729850469; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=fly77+WGD1sREzzfs7s/tTEPaOzwyIUqvsEy4v5j5MA=; b=gqUVBXB5uvsCKl0dj5intLoPF4fdFktz4qy/v14CRcxO3NZYCXCO20UQ Vk/I0bXiQE+ltn5eDP+g9JIG16oQRxUg3E3chq7u3NxLJ8w5JA1MYv9+q pLabPA9iVHuvji6psJnvOFegmZsyq5zeYjf9gjxSm5LnERYsvM4BIaAOu FApK6ubmagMLQ1Yj+4QOtf9Cnc/6+Fn+tIQJWKc7H+HVFspfqwhVY6h6M HaSQifthbYOWVxe8CSJVs1fJ8PYWXuHcKBmuhBiUoj9G8z9xDN6eseO0o jE4dZDCnyYRzgPJkvWUd3EeDvk6slknByPIFknVflGKeV5J0EoRxdvigs w==; X-IronPort-AV: E=McAfee;i="6600,9927,10874"; a="451741997" X-IronPort-AV: E=Sophos;i="6.03,253,1694761200"; d="scan'208";a="451741997" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Oct 2023 03:01:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10874"; a="829562419" X-IronPort-AV: E=Sophos;i="6.03,253,1694761200"; d="scan'208";a="829562419" Received: from unknown (HELO localhost.localdomain) ([10.239.252.253]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Oct 2023 03:01:05 -0700 From: Mingjin Ye To: dev@dpdk.org Cc: qiming.yang@intel.com, yidingx.zhou@intel.com, Mingjin Ye , stable@dpdk.org, Qi Zhang Subject: [PATCH] net/iavf: fix crash on closing representor ports Date: Thu, 26 Oct 2023 09:51:12 +0000 Message-Id: <20231026095112.3053582-1-mingjinx.ye@intel.com> X-Mailer: git-send-email 2.25.1 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 Since the representor port needs to access the resources of the associated DCF when it is closed. Therefore, the correct close port operation is to close all the representor ports first, and then close the associated DCF port. If the DCF port is closed before the representor port on pmd exit. This will result in accessing freed resources and eventually a core dump will occur. This patch fixes this issue by notifying all presentor ports that DCF is not accessible when the DCF port is closed. And when the presentor port is closed, it determines if the DCF resources are accessible. If it can't be accessed, it will report an error and return. Fixes: 5674465a32c8 ("net/ice: add DCF VLAN handling") Fixes: 295968d17407 ("ethdev: add namespace") Fixes: da9cdcd1f372 ("net/ice: fix crash on representor port closing") Cc: stable@dpdk.org Signed-off-by: Mingjin Ye --- drivers/net/ice/ice_dcf_ethdev.h | 1 + drivers/net/ice/ice_dcf_vf_representor.c | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/net/ice/ice_dcf_ethdev.h b/drivers/net/ice/ice_dcf_ethdev.h index 4baaec4b8b..d94ef10244 100644 --- a/drivers/net/ice/ice_dcf_ethdev.h +++ b/drivers/net/ice/ice_dcf_ethdev.h @@ -60,6 +60,7 @@ struct ice_dcf_vf_repr { struct rte_ether_addr mac_addr; uint16_t switch_domain_id; uint16_t vf_id; + bool dcf_valid; struct ice_dcf_vlan outer_vlan_info; /* DCF always handle outer VLAN */ }; diff --git a/drivers/net/ice/ice_dcf_vf_representor.c b/drivers/net/ice/ice_dcf_vf_representor.c index b9fcfc80ad..b4a94427df 100644 --- a/drivers/net/ice/ice_dcf_vf_representor.c +++ b/drivers/net/ice/ice_dcf_vf_representor.c @@ -45,6 +45,8 @@ ice_dcf_vf_repr_dev_start(struct rte_eth_dev *dev) static int ice_dcf_vf_repr_dev_stop(struct rte_eth_dev *dev) { + struct ice_dcf_vf_repr *repr = dev->data->dev_private; + repr->dcf_valid = false; dev->data->dev_link.link_status = RTE_ETH_LINK_DOWN; return 0; @@ -111,14 +113,13 @@ ice_dcf_vf_repr_link_update(__rte_unused struct rte_eth_dev *ethdev, static __rte_always_inline struct ice_dcf_hw * ice_dcf_vf_repr_hw(struct ice_dcf_vf_repr *repr) { - struct ice_dcf_adapter *dcf_adapter = - repr->dcf_eth_dev->data->dev_private; - - if (!dcf_adapter) { + struct ice_dcf_adapter *dcf_adapter; + if (!repr->dcf_valid) { PMD_DRV_LOG(ERR, "DCF for VF representor has been released\n"); return NULL; } - +dcf_adapter = + repr->dcf_eth_dev->data->dev_private; return &dcf_adapter->real_hw; } @@ -414,6 +415,7 @@ ice_dcf_vf_repr_init(struct rte_eth_dev *vf_rep_eth_dev, void *init_param) repr->dcf_eth_dev = param->dcf_eth_dev; repr->switch_domain_id = param->switch_domain_id; repr->vf_id = param->vf_id; + repr->dcf_valid = true; repr->outer_vlan_info.port_vlan_ena = false; repr->outer_vlan_info.stripping_ena = false; repr->outer_vlan_info.tpid = RTE_ETHER_TYPE_VLAN; -- 2.25.1