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 12C34A0C46; Tue, 28 Sep 2021 05:38:08 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 94B8940E3C; Tue, 28 Sep 2021 05:38:07 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id C02E740DF6; Tue, 28 Sep 2021 05:38:05 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10120"; a="204100210" X-IronPort-AV: E=Sophos;i="5.85,328,1624345200"; d="scan'208";a="204100210" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Sep 2021 20:37:59 -0700 X-IronPort-AV: E=Sophos;i="5.85,328,1624345200"; d="scan'208";a="553745389" Received: from unknown (HELO localhost.localdomain) ([10.240.183.93]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Sep 2021 20:37:57 -0700 From: dapengx.yu@intel.com To: Bruce Richardson , Konstantin Ananyev , Jingjing Wu , Beilei Xing Cc: dev@dpdk.org, Dapeng Yu , stable@dpdk.org Date: Tue, 28 Sep 2021 11:37:53 +0800 Message-Id: <20210928033753.1955674-1-dapengx.yu@intel.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH] net/iavf: fix multi-process shared data 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 Sender: "dev" From: Dapeng Yu When the iavf_adapter instance is not initialized completedly in the primary process, the secondary process accesses its "rte_eth_dev" member, it causes secondary process crash. This patch replaces adapter->eth_dev with rte_eth_devices[port_id] in the data paths where rte_eth_dev instance is accessed. Fixes: f978c1c9b3b5 ("net/iavf: add RSS hash parsing in AVX path") Fixes: 9c9aa0040344 ("net/iavf: add offload path for Rx AVX512 flex descriptor") Fixes: 63660ea3ee0b ("net/iavf: add RSS hash parsing in SSE path") Cc: stable@dpdk.org Signed-off-by: Dapeng Yu --- drivers/net/iavf/iavf_rxtx_vec_avx2.c | 5 +++-- drivers/net/iavf/iavf_rxtx_vec_avx512.c | 5 +++-- drivers/net/iavf/iavf_rxtx_vec_sse.c | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/net/iavf/iavf_rxtx_vec_avx2.c b/drivers/net/iavf/iavf_rxtx_vec_avx2.c index 475070e036..59b086ade5 100644 --- a/drivers/net/iavf/iavf_rxtx_vec_avx2.c +++ b/drivers/net/iavf/iavf_rxtx_vec_avx2.c @@ -525,6 +525,7 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq, #define IAVF_DESCS_PER_LOOP_AVX 8 const uint32_t *type_table = rxq->vsi->adapter->ptype_tbl; + struct rte_eth_dev *dev = &rte_eth_devices[rxq->port_id]; const __m256i mbuf_init = _mm256_set_epi64x(0, 0, 0, rxq->mbuf_initializer); @@ -903,7 +904,7 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq, * needs to load 2nd 16B of each desc for RSS hash parsing, * will cause performance drop to get into this context. */ - if (rxq->vsi->adapter->eth_dev->data->dev_conf.rxmode.offloads & + if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH || rxq->rx_flags & IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2) { /* load bottom half of every 32B desc */ @@ -956,7 +957,7 @@ _iavf_recv_raw_pkts_vec_avx2_flex_rxd(struct iavf_rx_queue *rxq, (_mm256_castsi128_si256(raw_desc_bh0), raw_desc_bh1, 1); - if (rxq->vsi->adapter->eth_dev->data->dev_conf.rxmode.offloads & + if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH) { /** * to shift the 32b RSS hash value to the diff --git a/drivers/net/iavf/iavf_rxtx_vec_avx512.c b/drivers/net/iavf/iavf_rxtx_vec_avx512.c index 571161c0cd..ed64a232e7 100644 --- a/drivers/net/iavf/iavf_rxtx_vec_avx512.c +++ b/drivers/net/iavf/iavf_rxtx_vec_avx512.c @@ -713,6 +713,7 @@ _iavf_recv_raw_pkts_vec_avx512_flex_rxd(struct iavf_rx_queue *rxq, #ifdef IAVF_RX_PTYPE_OFFLOAD const uint32_t *type_table = rxq->vsi->adapter->ptype_tbl; #endif + struct rte_eth_dev *dev = &rte_eth_devices[rxq->port_id]; const __m256i mbuf_init = _mm256_set_epi64x(0, 0, 0, rxq->mbuf_initializer); @@ -1137,7 +1138,7 @@ _iavf_recv_raw_pkts_vec_avx512_flex_rxd(struct iavf_rx_queue *rxq, * needs to load 2nd 16B of each desc for RSS hash parsing, * will cause performance drop to get into this context. */ - if (rxq->vsi->adapter->eth_dev->data->dev_conf.rxmode.offloads & + if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH || rxq->rx_flags & IAVF_RX_FLAGS_VLAN_TAG_LOC_L2TAG2_2) { /* load bottom half of every 32B desc */ @@ -1190,7 +1191,7 @@ _iavf_recv_raw_pkts_vec_avx512_flex_rxd(struct iavf_rx_queue *rxq, (_mm256_castsi128_si256(raw_desc_bh0), raw_desc_bh1, 1); - if (rxq->vsi->adapter->eth_dev->data->dev_conf.rxmode.offloads & + if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH) { /** * to shift the 32b RSS hash value to the diff --git a/drivers/net/iavf/iavf_rxtx_vec_sse.c b/drivers/net/iavf/iavf_rxtx_vec_sse.c index ee1e905525..1231d0f63d 100644 --- a/drivers/net/iavf/iavf_rxtx_vec_sse.c +++ b/drivers/net/iavf/iavf_rxtx_vec_sse.c @@ -645,6 +645,7 @@ _recv_raw_pkts_vec_flex_rxd(struct iavf_rx_queue *rxq, int pos; uint64_t var; const uint32_t *ptype_tbl = rxq->vsi->adapter->ptype_tbl; + struct rte_eth_dev *dev = &rte_eth_devices[rxq->port_id]; __m128i crc_adjust = _mm_set_epi16 (0, 0, 0, /* ignore non-length fields */ -rxq->crc_len, /* sub crc on data_len */ @@ -817,7 +818,7 @@ _recv_raw_pkts_vec_flex_rxd(struct iavf_rx_queue *rxq, * needs to load 2nd 16B of each desc for RSS hash parsing, * will cause performance drop to get into this context. */ - if (rxq->vsi->adapter->eth_dev->data->dev_conf.rxmode.offloads & + if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_RSS_HASH) { /* load bottom half of every 32B desc */ const __m128i raw_desc_bh3 = -- 2.27.0