[dpdk-stable] patch 'drivers/net: fix memzone allocations for DMA memory' has been queued to stable release 19.11.10

christian.ehrhardt at canonical.com christian.ehrhardt at canonical.com
Tue Aug 10 17:39:09 CEST 2021


Hi,

FYI, your patch has been queued to stable release 19.11.10

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 08/12/21. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/cpaelzer/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/cpaelzer/dpdk-stable-queue/commit/9e9fa80269c4149159457c04714a91d7ae1bcef2

Thanks.

Christian Ehrhardt <christian.ehrhardt at canonical.com>

---
>From 9e9fa80269c4149159457c04714a91d7ae1bcef2 Mon Sep 17 00:00:00 2001
From: David Marchand <david.marchand at redhat.com>
Date: Tue, 6 Jul 2021 10:57:50 +0200
Subject: [PATCH] drivers/net: fix memzone allocations for DMA memory

[ upstream commit d07fc02fb4b38c0dded75d2d21b976d68b494f0e ]

Caught by code review.

Using a random name for memzone allocations can result in init failures
in the unlikely case that a name collision occurs.
Use a simple sequential generator on 64 bits.

Fixes: 3f50f072ff06 ("i40e: fix memzone freeing")
Fixes: 22b123a36d07 ("net/avf: initialize PMD")
Fixes: 5f0978e96220 ("net/ice/base: add OS specific implementation")
Fixes: 737f30e1c3ab ("net/hns3: support command interface with firmware")

Signed-off-by: David Marchand <david.marchand at redhat.com>
Acked-by: Min Hu (Connor) <humin29 at huawei.com>
Acked-by: Haiyue Wang <haiyue.wang at intel.com>
---
 drivers/net/hns3/hns3_cmd.c      | 4 +++-
 drivers/net/i40e/i40e_ethdev.c   | 4 +++-
 drivers/net/iavf/iavf_ethdev.c   | 4 +++-
 drivers/net/ice/base/ice_osdep.h | 5 +++--
 4 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/net/hns3/hns3_cmd.c b/drivers/net/hns3/hns3_cmd.c
index ef03d31b22..07a3185f6b 100644
--- a/drivers/net/hns3/hns3_cmd.c
+++ b/drivers/net/hns3/hns3_cmd.c
@@ -59,10 +59,12 @@ static int
 hns3_allocate_dma_mem(struct hns3_hw *hw, struct hns3_cmq_ring *ring,
 		      uint64_t size, uint32_t alignment)
 {
+	static uint64_t hns3_dma_memzone_id;
 	const struct rte_memzone *mz = NULL;
 	char z_name[RTE_MEMZONE_NAMESIZE];
 
-	snprintf(z_name, sizeof(z_name), "hns3_dma_%" PRIu64, rte_rand());
+	snprintf(z_name, sizeof(z_name), "hns3_dma_%" PRIu64,
+		__atomic_fetch_add(&hns3_dma_memzone_id, 1, __ATOMIC_RELAXED));
 	mz = rte_memzone_reserve_bounded(z_name, size, SOCKET_ID_ANY,
 					 RTE_MEMZONE_IOVA_CONTIG, alignment,
 					 RTE_PGSIZE_2M);
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index d825ef7296..e057f16e46 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -4604,13 +4604,15 @@ i40e_allocate_dma_mem_d(__attribute__((unused)) struct i40e_hw *hw,
 			u64 size,
 			u32 alignment)
 {
+	static uint64_t i40e_dma_memzone_id;
 	const struct rte_memzone *mz = NULL;
 	char z_name[RTE_MEMZONE_NAMESIZE];
 
 	if (!mem)
 		return I40E_ERR_PARAM;
 
-	snprintf(z_name, sizeof(z_name), "i40e_dma_%"PRIu64, rte_rand());
+	snprintf(z_name, sizeof(z_name), "i40e_dma_%" PRIu64,
+		__atomic_fetch_add(&i40e_dma_memzone_id, 1, __ATOMIC_RELAXED));
 	mz = rte_memzone_reserve_bounded(z_name, size, SOCKET_ID_ANY,
 			RTE_MEMZONE_IOVA_CONTIG, alignment, RTE_PGSIZE_2M);
 	if (!mz)
diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index d7d14ee11a..7d4b6b915c 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -1544,13 +1544,15 @@ iavf_allocate_dma_mem_d(__rte_unused struct iavf_hw *hw,
 		       u64 size,
 		       u32 alignment)
 {
+	static uint64_t iavf_dma_memzone_id;
 	const struct rte_memzone *mz = NULL;
 	char z_name[RTE_MEMZONE_NAMESIZE];
 
 	if (!mem)
 		return IAVF_ERR_PARAM;
 
-	snprintf(z_name, sizeof(z_name), "iavf_dma_%"PRIu64, rte_rand());
+	snprintf(z_name, sizeof(z_name), "iavf_dma_%" PRIu64,
+		__atomic_fetch_add(&iavf_dma_memzone_id, 1, __ATOMIC_RELAXED));
 	mz = rte_memzone_reserve_bounded(z_name, size, SOCKET_ID_ANY,
 			RTE_MEMZONE_IOVA_CONTIG, alignment, RTE_PGSIZE_2M);
 	if (!mz)
diff --git a/drivers/net/ice/base/ice_osdep.h b/drivers/net/ice/base/ice_osdep.h
index ba0c57e1a9..5970c918d1 100644
--- a/drivers/net/ice/base/ice_osdep.h
+++ b/drivers/net/ice/base/ice_osdep.h
@@ -21,7 +21,6 @@
 #include <rte_cycles.h>
 #include <rte_spinlock.h>
 #include <rte_log.h>
-#include <rte_random.h>
 #include <rte_io.h>
 
 #include "ice_alloc.h"
@@ -241,13 +240,15 @@ static inline void *
 ice_alloc_dma_mem(__attribute__((unused)) struct ice_hw *hw,
 		  struct ice_dma_mem *mem, u64 size)
 {
+	static uint64_t ice_dma_memzone_id;
 	const struct rte_memzone *mz = NULL;
 	char z_name[RTE_MEMZONE_NAMESIZE];
 
 	if (!mem)
 		return NULL;
 
-	snprintf(z_name, sizeof(z_name), "ice_dma_%"PRIu64, rte_rand());
+	snprintf(z_name, sizeof(z_name), "ice_dma_%" PRIu64,
+		__atomic_fetch_add(&ice_dma_memzone_id, 1, __ATOMIC_RELAXED));
 	mz = rte_memzone_reserve_bounded(z_name, size, SOCKET_ID_ANY, 0,
 					 0, RTE_PGSIZE_2M);
 	if (!mz)
-- 
2.32.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2021-08-10 15:11:14.188230281 +0200
+++ 0029-drivers-net-fix-memzone-allocations-for-DMA-memory.patch	2021-08-10 15:11:12.954637638 +0200
@@ -1 +1 @@
-From d07fc02fb4b38c0dded75d2d21b976d68b494f0e Mon Sep 17 00:00:00 2001
+From 9e9fa80269c4149159457c04714a91d7ae1bcef2 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit d07fc02fb4b38c0dded75d2d21b976d68b494f0e ]
+
@@ -16 +17,0 @@
-Cc: stable at dpdk.org
@@ -22 +22,0 @@
- drivers/common/iavf/iavf_impl.c  | 5 +++--
@@ -24,0 +25 @@
+ drivers/net/iavf/iavf_ethdev.c   | 4 +++-
@@ -26 +27 @@
- 4 files changed, 12 insertions(+), 6 deletions(-)
+ 4 files changed, 12 insertions(+), 5 deletions(-)
@@ -28,29 +28,0 @@
-diff --git a/drivers/common/iavf/iavf_impl.c b/drivers/common/iavf/iavf_impl.c
-index 0c7d5c0dae..8919b0e7c3 100644
---- a/drivers/common/iavf/iavf_impl.c
-+++ b/drivers/common/iavf/iavf_impl.c
-@@ -6,7 +6,6 @@
- #include <inttypes.h>
- 
- #include <rte_common.h>
--#include <rte_random.h>
- #include <rte_malloc.h>
- #include <rte_memzone.h>
- 
-@@ -19,13 +18,15 @@ iavf_allocate_dma_mem_d(__rte_unused struct iavf_hw *hw,
- 			u64 size,
- 			u32 alignment)
- {
-+	static uint64_t iavf_dma_memzone_id;
- 	const struct rte_memzone *mz = NULL;
- 	char z_name[RTE_MEMZONE_NAMESIZE];
- 
- 	if (!mem)
- 		return IAVF_ERR_PARAM;
- 
--	snprintf(z_name, sizeof(z_name), "iavf_dma_%"PRIu64, rte_rand());
-+	snprintf(z_name, sizeof(z_name), "iavf_dma_%" PRIu64,
-+		__atomic_fetch_add(&iavf_dma_memzone_id, 1, __ATOMIC_RELAXED));
- 	mz = rte_memzone_reserve_bounded(z_name, size, SOCKET_ID_ANY,
- 					 RTE_MEMZONE_IOVA_CONTIG, alignment,
- 					 RTE_PGSIZE_2M);
@@ -58 +30 @@
-index 44a4e2860d..175d48d14b 100644
+index ef03d31b22..07a3185f6b 100644
@@ -61 +33 @@
-@@ -44,10 +44,12 @@ static int
+@@ -59,10 +59,12 @@ static int
@@ -76 +48 @@
-index 5b0a7f2537..7b230e2ed1 100644
+index d825ef7296..e057f16e46 100644
@@ -79 +51 @@
-@@ -4554,13 +4554,15 @@ i40e_allocate_dma_mem_d(__rte_unused struct i40e_hw *hw,
+@@ -4604,13 +4604,15 @@ i40e_allocate_dma_mem_d(__attribute__((unused)) struct i40e_hw *hw,
@@ -95,0 +68,21 @@
+diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
+index d7d14ee11a..7d4b6b915c 100644
+--- a/drivers/net/iavf/iavf_ethdev.c
++++ b/drivers/net/iavf/iavf_ethdev.c
+@@ -1544,13 +1544,15 @@ iavf_allocate_dma_mem_d(__rte_unused struct iavf_hw *hw,
+ 		       u64 size,
+ 		       u32 alignment)
+ {
++	static uint64_t iavf_dma_memzone_id;
+ 	const struct rte_memzone *mz = NULL;
+ 	char z_name[RTE_MEMZONE_NAMESIZE];
+ 
+ 	if (!mem)
+ 		return IAVF_ERR_PARAM;
+ 
+-	snprintf(z_name, sizeof(z_name), "iavf_dma_%"PRIu64, rte_rand());
++	snprintf(z_name, sizeof(z_name), "iavf_dma_%" PRIu64,
++		__atomic_fetch_add(&iavf_dma_memzone_id, 1, __ATOMIC_RELAXED));
+ 	mz = rte_memzone_reserve_bounded(z_name, size, SOCKET_ID_ANY,
+ 			RTE_MEMZONE_IOVA_CONTIG, alignment, RTE_PGSIZE_2M);
+ 	if (!mz)
@@ -97 +90 @@
-index 878c5597d4..154fe96e93 100644
+index ba0c57e1a9..5970c918d1 100644
@@ -108,2 +101,2 @@
-@@ -260,13 +259,15 @@ static inline void *
- ice_alloc_dma_mem(__rte_unused struct ice_hw *hw,
+@@ -241,13 +240,15 @@ static inline void *
+ ice_alloc_dma_mem(__attribute__((unused)) struct ice_hw *hw,


More information about the stable mailing list