patches for DPDK stable branches
 help / color / mirror / Atom feed
From: luca.boccassi@gmail.com
To: Anatoly Burakov <anatoly.burakov@intel.com>
Cc: dpdk stable <stable@dpdk.org>
Subject: patch 'vfio: fix custom containers in multiprocess' has been queued to stable release 22.11.11
Date: Wed, 12 Nov 2025 16:52:28 +0000	[thread overview]
Message-ID: <20251112165308.1618107-14-luca.boccassi@gmail.com> (raw)
In-Reply-To: <20251112165308.1618107-1-luca.boccassi@gmail.com>

Hi,

FYI, your patch has been queued to stable release 22.11.11

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/14/25. 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/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/dc9e9a80570cef84bf1d1283b8491fb31fee0125

Thanks.

Luca Boccassi

---
From dc9e9a80570cef84bf1d1283b8491fb31fee0125 Mon Sep 17 00:00:00 2001
From: Anatoly Burakov <anatoly.burakov@intel.com>
Date: Tue, 21 Oct 2025 14:19:42 +0100
Subject: [PATCH] vfio: fix custom containers in multiprocess

[ upstream commit 8a8c02d2bb224ebbe60e8e1ce6edcfb481b46151 ]

Currently, the API regarding handling custom (non-default) containers has
a problem with how it behaves in secondary process. The expected flow for
using custom containers is to:

1) create a new container using rte_vfio_container_create()
2) look up IOMMU group with rte_vfio_get_group_num()
3) bind group to that container using rte_vfio_group_bind()
4) setup device with rte_vfio_setup_device()

When called from secondary process, rte_vfio_container_create() will check
if there's space in local VFIO config, and if there is, it will call
rte_vfio_get_container_fd() which, in secondary process, will call into a
multiprocess code to request primary process to open container fd, and then
pass it back to the requester. Primary process does not store this fd
anywhere, in fact it closes it immediately after responding to the request.

Following that, when we call rte_vfio_group_bind(), we check if the group
is open locally, and if not, we will call into multiprocess code again, to
request primary process to open the group fd for us, but since primary did
not store any information about the new container in step 1, it will store
the group in local config for default container, and return it to the
secondary, who will add it to its own config for a different container.

To address these issues, the following changes are made:

1) Clarify meaning of rte_vfio_get_container_fd() to only return the
   default container, and always pick it up from process-local config

2) Avoid calling into multiprocess on rte_vfio_container_create()

3) Avoid calling into multiprocess in group-related code, except when
   dealing with groups associated with default container

As a consequence, SOCKET_REQ_DEFAULT_CONTAINER can be removed and
consolidated with SOCKET_REQ_CONTAINER, which now only handles the
default container.

Fixes: ea2dc1066870 ("vfio: add multi container support")

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 lib/eal/include/rte_vfio.h       |   6 +-
 lib/eal/linux/eal_vfio.c         | 110 ++++++++++++++-----------------
 lib/eal/linux/eal_vfio.h         |   5 +-
 lib/eal/linux/eal_vfio_mp_sync.c |  17 +----
 4 files changed, 56 insertions(+), 82 deletions(-)

diff --git a/lib/eal/include/rte_vfio.h b/lib/eal/include/rte_vfio.h
index 7bdb8932b2..4c204fba07 100644
--- a/lib/eal/include/rte_vfio.h
+++ b/lib/eal/include/rte_vfio.h
@@ -214,14 +214,14 @@ rte_vfio_get_group_num(const char *sysfs_base,
 		      const char *dev_addr, int *iommu_group_num);
 
 /**
- * Open a new VFIO container fd
+ * Get the default VFIO container fd
  *
  * This function is only relevant to linux and will return
  * an error on BSD.
  *
  * @return
- *  > 0 container fd
- *  < 0 for errors
+ *  > 0 default container fd
+ *  < 0 if VFIO is not enabled or not supported
  */
 int
 rte_vfio_get_container_fd(void);
diff --git a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c
index 549b86ae1d..0bab0dd354 100644
--- a/lib/eal/linux/eal_vfio.c
+++ b/lib/eal/linux/eal_vfio.c
@@ -347,7 +347,7 @@ compact_user_maps(struct user_mem_maps *user_mem_maps)
 }
 
 static int
-vfio_open_group_fd(int iommu_group_num)
+vfio_open_group_fd(int iommu_group_num, bool mp_request)
 {
 	int vfio_group_fd;
 	char filename[PATH_MAX];
@@ -355,11 +355,9 @@ vfio_open_group_fd(int iommu_group_num)
 	struct rte_mp_reply mp_reply = {0};
 	struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
 	struct vfio_mp_param *p = (struct vfio_mp_param *)mp_req.param;
-	const struct internal_config *internal_conf =
-		eal_get_internal_configuration();
 
-	/* if primary, try to open the group */
-	if (internal_conf->process_type == RTE_PROC_PRIMARY) {
+	/* if not requesting via mp, open the group locally */
+	if (!mp_request) {
 		/* try regular group format */
 		snprintf(filename, sizeof(filename),
 				 VFIO_GROUP_FMT, iommu_group_num);
@@ -469,7 +467,24 @@ vfio_get_group_fd(struct vfio_config *vfio_cfg,
 		return -1;
 	}
 
-	vfio_group_fd = vfio_open_group_fd(iommu_group_num);
+	/*
+	 * When opening a group fd, we need to decide whether to open it locally
+	 * or request it from the primary process via mp_sync.
+	 *
+	 * For the default container, secondary processes use mp_sync so that
+	 * the primary process tracks the group fd and maintains VFIO state
+	 * across all processes.
+	 *
+	 * For custom containers, we open the group fd locally in each process
+	 * since custom containers are process-local and the primary has no
+	 * knowledge of them. Requesting a group fd from the primary for a
+	 * container it doesn't know about would be incorrect.
+	 */
+	const struct internal_config *internal_conf = eal_get_internal_configuration();
+	bool mp_request = (internal_conf->process_type == RTE_PROC_SECONDARY) &&
+			(vfio_cfg == default_vfio_cfg);
+
+	vfio_group_fd = vfio_open_group_fd(iommu_group_num, mp_request);
 	if (vfio_group_fd < 0) {
 		RTE_LOG(ERR, EAL, "Failed to open VFIO group %d\n",
 			iommu_group_num);
@@ -1120,13 +1135,12 @@ rte_vfio_enable(const char *modname)
 	}
 
 	if (internal_conf->process_type == RTE_PROC_PRIMARY) {
-		/* open a new container */
-		default_vfio_cfg->vfio_container_fd =
-				rte_vfio_get_container_fd();
+		/* open a default container */
+		default_vfio_cfg->vfio_container_fd = vfio_open_container_fd(false);
 	} else {
 		/* get the default container from the primary process */
 		default_vfio_cfg->vfio_container_fd =
-				vfio_get_default_container_fd();
+			vfio_open_container_fd(true);
 	}
 
 	/* check if we have VFIO driver enabled */
@@ -1147,49 +1161,6 @@ rte_vfio_is_enabled(const char *modname)
 	return default_vfio_cfg->vfio_enabled && mod_available;
 }
 
-int
-vfio_get_default_container_fd(void)
-{
-	struct rte_mp_msg mp_req, *mp_rep;
-	struct rte_mp_reply mp_reply = {0};
-	struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
-	struct vfio_mp_param *p = (struct vfio_mp_param *)mp_req.param;
-	int container_fd;
-	const struct internal_config *internal_conf =
-		eal_get_internal_configuration();
-
-	if (default_vfio_cfg->vfio_enabled)
-		return default_vfio_cfg->vfio_container_fd;
-
-	if (internal_conf->process_type == RTE_PROC_PRIMARY) {
-		/* if we were secondary process we would try requesting
-		 * container fd from the primary, but we're the primary
-		 * process so just exit here
-		 */
-		return -1;
-	}
-
-	p->req = SOCKET_REQ_DEFAULT_CONTAINER;
-	strcpy(mp_req.name, EAL_VFIO_MP);
-	mp_req.len_param = sizeof(*p);
-	mp_req.num_fds = 0;
-
-	if (rte_mp_request_sync(&mp_req, &mp_reply, &ts) == 0 &&
-	    mp_reply.nb_received == 1) {
-		mp_rep = &mp_reply.msgs[0];
-		p = (struct vfio_mp_param *)mp_rep->param;
-		if (p->result == SOCKET_OK && mp_rep->num_fds == 1) {
-			container_fd = mp_rep->fds[0];
-			free(mp_reply.msgs);
-			return container_fd;
-		}
-	}
-
-	free(mp_reply.msgs);
-	RTE_LOG(ERR, EAL, "Cannot request default VFIO container fd\n");
-	return -1;
-}
-
 int
 vfio_get_iommu_type(void)
 {
@@ -1255,20 +1226,25 @@ vfio_has_supported_extensions(int vfio_container_fd)
 	return 0;
 }
 
+/*
+ * Open a new VFIO container fd.
+ *
+ * If mp_request is true, requests a new container fd from the primary process
+ * via mp channel (for secondary processes that need to open the default container).
+ *
+ * Otherwise, opens a new container fd locally by opening /dev/vfio/vfio.
+ */
 int
-rte_vfio_get_container_fd(void)
+vfio_open_container_fd(bool mp_request)
 {
 	int ret, vfio_container_fd;
 	struct rte_mp_msg mp_req, *mp_rep;
 	struct rte_mp_reply mp_reply = {0};
 	struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
 	struct vfio_mp_param *p = (struct vfio_mp_param *)mp_req.param;
-	const struct internal_config *internal_conf =
-		eal_get_internal_configuration();
 
-
-	/* if we're in a primary process, try to open the container */
-	if (internal_conf->process_type == RTE_PROC_PRIMARY) {
+	/* if not requesting via mp, open a new container locally */
+	if (!mp_request) {
 		vfio_container_fd = open(VFIO_CONTAINER_PATH, O_RDWR);
 		if (vfio_container_fd < 0) {
 			RTE_LOG(ERR, EAL,
@@ -1326,6 +1302,19 @@ rte_vfio_get_container_fd(void)
 	return -1;
 }
 
+int
+rte_vfio_get_container_fd(void)
+{
+	/* Return the default container fd if VFIO is enabled.
+	 * The default container is set up during rte_vfio_enable().
+	 * This function does not create a new container.
+	 */
+	if (!default_vfio_cfg->vfio_enabled)
+		return -1;
+
+	return default_vfio_cfg->vfio_container_fd;
+}
+
 int
 rte_vfio_get_group_num(const char *sysfs_base,
 		const char *dev_addr, int *iommu_group_num)
@@ -2072,7 +2061,8 @@ rte_vfio_container_create(void)
 		return -1;
 	}
 
-	vfio_cfgs[i].vfio_container_fd = rte_vfio_get_container_fd();
+	/* Create a new container fd */
+	vfio_cfgs[i].vfio_container_fd = vfio_open_container_fd(false);
 	if (vfio_cfgs[i].vfio_container_fd < 0) {
 		RTE_LOG(NOTICE, EAL, "Fail to create a new VFIO container\n");
 		return -1;
diff --git a/lib/eal/linux/eal_vfio.h b/lib/eal/linux/eal_vfio.h
index bba5c7afa5..3ee4a3fb58 100644
--- a/lib/eal/linux/eal_vfio.h
+++ b/lib/eal/linux/eal_vfio.h
@@ -119,7 +119,7 @@ struct vfio_iommu_type {
 };
 
 /* get the vfio container that devices are bound to by default */
-int vfio_get_default_container_fd(void);
+int vfio_open_container_fd(bool mp_request);
 
 /* pick IOMMU type. returns a pointer to vfio_iommu_type or NULL for error */
 const struct vfio_iommu_type *
@@ -139,8 +139,7 @@ void vfio_mp_sync_cleanup(void);
 
 #define SOCKET_REQ_CONTAINER 0x100
 #define SOCKET_REQ_GROUP 0x200
-#define SOCKET_REQ_DEFAULT_CONTAINER 0x400
-#define SOCKET_REQ_IOMMU_TYPE 0x800
+#define SOCKET_REQ_IOMMU_TYPE 0x400
 #define SOCKET_OK 0x0
 #define SOCKET_NO_FD 0x1
 #define SOCKET_ERR 0xFF
diff --git a/lib/eal/linux/eal_vfio_mp_sync.c b/lib/eal/linux/eal_vfio_mp_sync.c
index 157f20e583..abfd22c12a 100644
--- a/lib/eal/linux/eal_vfio_mp_sync.c
+++ b/lib/eal/linux/eal_vfio_mp_sync.c
@@ -26,7 +26,6 @@ static int
 vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
 {
 	int fd = -1;
-	int ret;
 	struct rte_mp_msg reply;
 	struct vfio_mp_param *r = (struct vfio_mp_param *)reply.param;
 	const struct vfio_mp_param *m =
@@ -67,17 +66,6 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
 			reply.fds[0] = fd;
 		}
 		break;
-	case SOCKET_REQ_DEFAULT_CONTAINER:
-		r->req = SOCKET_REQ_DEFAULT_CONTAINER;
-		fd = vfio_get_default_container_fd();
-		if (fd < 0)
-			r->result = SOCKET_ERR;
-		else {
-			r->result = SOCKET_OK;
-			reply.num_fds = 1;
-			reply.fds[0] = fd;
-		}
-		break;
 	case SOCKET_REQ_IOMMU_TYPE:
 	{
 		int iommu_type_id;
@@ -102,10 +90,7 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
 	strcpy(reply.name, EAL_VFIO_MP);
 	reply.len_param = sizeof(*r);
 
-	ret = rte_mp_reply(&reply, peer);
-	if (m->req == SOCKET_REQ_CONTAINER && fd >= 0)
-		close(fd);
-	return ret;
+	return rte_mp_reply(&reply, peer);
 }
 
 int
-- 
2.47.3

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-11-12 16:20:41.508558598 +0000
+++ 0014-vfio-fix-custom-containers-in-multiprocess.patch	2025-11-12 16:20:40.895716156 +0000
@@ -1 +1 @@
-From 8a8c02d2bb224ebbe60e8e1ce6edcfb481b46151 Mon Sep 17 00:00:00 2001
+From dc9e9a80570cef84bf1d1283b8491fb31fee0125 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 8a8c02d2bb224ebbe60e8e1ce6edcfb481b46151 ]
+
@@ -44 +45,0 @@
-Cc: stable@dpdk.org
@@ -52 +53 @@
- 4 files changed, 57 insertions(+), 81 deletions(-)
+ 4 files changed, 56 insertions(+), 82 deletions(-)
@@ -55 +56 @@
-index 80951517fa..d1e8bce56b 100644
+index 7bdb8932b2..4c204fba07 100644
@@ -58,2 +59,2 @@
-@@ -192,14 +192,14 @@ rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr,
- 		int *vfio_dev_fd, struct vfio_device_info *device_info);
+@@ -214,14 +214,14 @@ rte_vfio_get_group_num(const char *sysfs_base,
+ 		      const char *dev_addr, int *iommu_group_num);
@@ -77 +78 @@
-index 45c1354390..f1050ffa60 100644
+index 549b86ae1d..0bab0dd354 100644
@@ -80 +81 @@
-@@ -351,7 +351,7 @@ compact_user_maps(struct user_mem_maps *user_mem_maps)
+@@ -347,7 +347,7 @@ compact_user_maps(struct user_mem_maps *user_mem_maps)
@@ -89 +90 @@
-@@ -359,11 +359,9 @@ vfio_open_group_fd(int iommu_group_num)
+@@ -355,11 +355,9 @@ vfio_open_group_fd(int iommu_group_num)
@@ -101,3 +102,3 @@
- 		snprintf(filename, sizeof(filename), RTE_VFIO_GROUP_FMT, iommu_group_num);
- 		vfio_group_fd = open(filename, O_RDWR);
-@@ -471,7 +469,24 @@ vfio_get_group_fd(struct vfio_config *vfio_cfg,
+ 		snprintf(filename, sizeof(filename),
+ 				 VFIO_GROUP_FMT, iommu_group_num);
+@@ -469,7 +467,24 @@ vfio_get_group_fd(struct vfio_config *vfio_cfg,
@@ -127 +128 @@
- 		EAL_LOG(ERR, "Failed to open VFIO group %d",
+ 		RTE_LOG(ERR, EAL, "Failed to open VFIO group %d\n",
@@ -129,9 +130,9 @@
-@@ -1140,13 +1155,13 @@ rte_vfio_enable(const char *modname)
- 		if (vfio_mp_sync_setup() == -1) {
- 			default_vfio_cfg->vfio_container_fd = -1;
- 		} else {
--			/* open a new container */
--			default_vfio_cfg->vfio_container_fd = rte_vfio_get_container_fd();
-+			/* open a default container */
-+			default_vfio_cfg->vfio_container_fd = vfio_open_container_fd(false);
- 		}
+@@ -1120,13 +1135,12 @@ rte_vfio_enable(const char *modname)
+ 	}
+ 
+ 	if (internal_conf->process_type == RTE_PROC_PRIMARY) {
+-		/* open a new container */
+-		default_vfio_cfg->vfio_container_fd =
+-				rte_vfio_get_container_fd();
++		/* open a default container */
++		default_vfio_cfg->vfio_container_fd = vfio_open_container_fd(false);
@@ -146 +147 @@
-@@ -1168,49 +1183,6 @@ rte_vfio_is_enabled(const char *modname)
+@@ -1147,49 +1161,6 @@ rte_vfio_is_enabled(const char *modname)
@@ -189 +190 @@
--	EAL_LOG(ERR, "Cannot request default VFIO container fd");
+-	RTE_LOG(ERR, EAL, "Cannot request default VFIO container fd\n");
@@ -196 +197 @@
-@@ -1303,20 +1275,25 @@ vfio_has_supported_extensions(int vfio_container_fd)
+@@ -1255,20 +1226,25 @@ vfio_has_supported_extensions(int vfio_container_fd)
@@ -200 +200,0 @@
--RTE_EXPORT_SYMBOL(rte_vfio_get_container_fd)
@@ -220,0 +221 @@
+-
@@ -225 +226 @@
- 		vfio_container_fd = open(RTE_VFIO_CONTAINER_PATH, O_RDWR);
+ 		vfio_container_fd = open(VFIO_CONTAINER_PATH, O_RDWR);
@@ -227,2 +228,2 @@
- 			EAL_LOG(ERR, "Cannot open VFIO container %s, error %i (%s)",
-@@ -1372,6 +1349,20 @@ rte_vfio_get_container_fd(void)
+ 			RTE_LOG(ERR, EAL,
+@@ -1326,6 +1302,19 @@ rte_vfio_get_container_fd(void)
@@ -232 +232,0 @@
-+RTE_EXPORT_SYMBOL(rte_vfio_get_container_fd)
@@ -246 +245,0 @@
- RTE_EXPORT_SYMBOL(rte_vfio_get_group_num)
@@ -249 +248,2 @@
-@@ -2093,7 +2084,8 @@ rte_vfio_container_create(void)
+ 		const char *dev_addr, int *iommu_group_num)
+@@ -2072,7 +2061,8 @@ rte_vfio_container_create(void)
@@ -257 +257 @@
- 		EAL_LOG(NOTICE, "Fail to create a new VFIO container");
+ 		RTE_LOG(NOTICE, EAL, "Fail to create a new VFIO container\n");
@@ -260 +260 @@
-index 5c5742b429..89c4b5ba45 100644
+index bba5c7afa5..3ee4a3fb58 100644
@@ -263 +263 @@
-@@ -42,7 +42,7 @@ struct vfio_iommu_type {
+@@ -119,7 +119,7 @@ struct vfio_iommu_type {
@@ -272 +272 @@
-@@ -62,8 +62,7 @@ void vfio_mp_sync_cleanup(void);
+@@ -139,8 +139,7 @@ void vfio_mp_sync_cleanup(void);
@@ -283 +283 @@
-index 8230f3d24d..22136f2e8b 100644
+index 157f20e583..abfd22c12a 100644
@@ -286 +286 @@
-@@ -18,7 +18,6 @@ static int
+@@ -26,7 +26,6 @@ static int
@@ -294 +294 @@
-@@ -59,17 +58,6 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
+@@ -67,17 +66,6 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
@@ -312 +312 @@
-@@ -94,10 +82,7 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
+@@ -102,10 +90,7 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)

  parent reply	other threads:[~2025-11-12 16:53 UTC|newest]

Thread overview: 130+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-27 16:18 patch 'net/gve: allocate Rx QPL pages using malloc' " luca.boccassi
2025-10-27 16:18 ` patch 'eal: fix plugin dir walk' " luca.boccassi
2025-10-27 16:18 ` patch 'cmdline: fix port list parsing' " luca.boccassi
2025-10-27 16:18 ` patch 'cmdline: fix highest bit " luca.boccassi
2025-10-27 16:18 ` patch 'tailq: fix lookup macro' " luca.boccassi
2025-10-27 16:18 ` patch 'hash: fix unaligned access in predictable RSS' " luca.boccassi
2025-10-27 16:18 ` patch 'graph: fix unaligned access in stats' " luca.boccassi
2025-10-27 16:18 ` patch 'eventdev: fix listing timer adapters with telemetry' " luca.boccassi
2025-10-27 16:18 ` patch 'cfgfile: fix section count with no name' " luca.boccassi
2025-10-27 16:18 ` patch 'net/vmxnet3: fix mapping of mempools to queues' " luca.boccassi
2025-10-27 16:18 ` patch 'app/testpmd: increase size of set cores list command' " luca.boccassi
2025-10-27 16:18 ` patch 'net/dpaa2: fix shaper rate' " luca.boccassi
2025-10-27 16:18 ` patch 'app/testpmd: monitor state of primary process' " luca.boccassi
2025-10-27 16:18 ` patch 'app/testpmd: fix conntrack action query' " luca.boccassi
2025-10-27 16:18 ` patch 'doc: add conntrack state inspect command to testpmd guide' " luca.boccassi
2025-10-27 16:18 ` patch 'app/testpmd: validate DSCP and VLAN for meter creation' " luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix min and max MTU reporting' " luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix unsupported flow rule port action' " luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix non-template age rules flush' " luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix connection tracking state item validation' " luca.boccassi
2025-10-27 16:18 ` patch 'net/mlx5: fix indirect flow age action handling' " luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix Direct Verbs counter offset detection' " luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix interface name parameter definition' " luca.boccassi
2025-10-27 16:19 ` patch 'net/intel: fix assumption about tag placement order' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ice/base: fix adding special words' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ice/base: fix memory leak in HW profile handling' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ice/base: fix memory leak in recipe " luca.boccassi
2025-10-27 16:19 ` patch 'eal: fix DMA mask validation with IOVA mode option' " luca.boccassi
2025-10-27 16:19 ` patch 'eal: fix MP socket cleanup' " luca.boccassi
2025-10-27 16:19 ` patch 'crypto/ipsec_mb: fix QP release in secondary' " luca.boccassi
2025-10-27 16:19 ` patch 'efd: fix AVX2 support' " luca.boccassi
2025-10-27 16:19 ` patch 'common/cnxk: fix async event handling' " luca.boccassi
2025-10-27 16:19 ` patch 'doc: fix feature list of ice driver' " luca.boccassi
2025-10-27 16:19 ` patch 'doc: fix feature list of iavf " luca.boccassi
2025-10-27 16:19 ` patch 'baseband/acc: fix exported header' " luca.boccassi
2025-10-27 16:19 ` patch 'gpudev: fix driver header for Windows' " luca.boccassi
2025-10-27 16:19 ` patch 'drivers: fix some exported headers' " luca.boccassi
2025-10-27 16:19 ` patch 'test/debug: fix crash with mlx5 devices' " luca.boccassi
2025-10-27 16:19 ` patch 'bus/pci: fix build with MinGW 13' " luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: " luca.boccassi
2025-10-27 16:19 ` patch 'dma/hisilicon: fix stop with pending transfers' " luca.boccassi
2025-10-27 16:19 ` patch 'test/dma: fix failure condition' " luca.boccassi
2025-10-27 16:19 ` patch 'fib6: fix tbl8 allocation check logic' " luca.boccassi
2025-10-27 16:19 ` patch 'vhost: fix double fetch when dequeue offloading' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ice/base: fix integer overflow on NVM init' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ice: fix initialization with 8 ports' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ice: remove indirection for FDIR filters' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ice: fix memory leak in raw pattern parse' " luca.boccassi
2025-10-27 16:19 ` patch 'net/i40e: fix symmetric Toeplitz hashing for SCTP' " luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix multicast' " luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix MTU initialization' " luca.boccassi
2025-10-27 16:19 ` patch 'net/mlx5: fix leak of flow indexed pools' " luca.boccassi
2025-10-27 16:19 ` patch 'net/hns3: fix inconsistent lock' " luca.boccassi
2025-10-27 16:19 ` patch 'net/hns3: fix VLAN resources freeing' " luca.boccassi
2025-10-27 16:19 ` patch 'net/af_packet: fix crash in secondary process' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ark: remove double mbuf free' " luca.boccassi
2025-10-27 16:19 ` patch 'net/hns3: fix VLAN tag loss for short tunnel frame' " luca.boccassi
2025-10-27 16:19 ` patch 'ethdev: fix VLAN filter parameter description' " luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix file descriptor leak on read error' " luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix out-of-bounds access in UIO mapping' " luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix buffer descriptor size configuration' " luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix Tx queue free' " luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix checksum flag handling and error return' " luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: reject multi-queue configuration' " luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: fix memory leak in Rx buffer cleanup' " luca.boccassi
2025-10-27 16:19 ` patch 'net/enetfec: reject Tx deferred queue' " luca.boccassi
2025-10-27 16:19 ` patch 'net/tap: fix interrupt callback crash after failed start' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ena: fix PCI BAR mapping on 64K page size' " luca.boccassi
2025-10-27 16:19 ` patch 'net/ena/base: fix unsafe memcpy on invalid memory' " luca.boccassi
2025-10-27 16:19 ` patch 'net/dpaa2: fix uninitialized variable' " luca.boccassi
2025-10-27 16:19 ` patch 'net/dpaa2: fix L3/L4 checksum results' " luca.boccassi
2025-10-27 16:19 ` patch 'net/dpaa2: receive packets with additional parse errors' " luca.boccassi
2025-10-27 16:19 ` patch 'crypto/qat: fix source buffer alignment' " luca.boccassi
2025-10-27 16:19 ` patch 'crypto/cnxk: refactor RSA verification' " luca.boccassi
2025-10-27 16:19 ` patch 'test/crypto: fix mbuf handling' " luca.boccassi
2025-10-27 16:19 ` patch 'app/crypto-perf: fix plaintext size exceeds buffer size' " luca.boccassi
2025-10-27 16:19 ` patch 'test/crypto: fix vector initialization' " luca.boccassi
2025-10-27 16:19 ` patch 'crypto/virtio: fix cookies leak' " luca.boccassi
2025-10-27 16:19 ` patch 'sched: fix WRR parameter data type' " luca.boccassi
2025-11-12 16:52   ` patch 'test/hash: check memory allocation' " luca.boccassi
2025-11-12 16:52     ` patch 'dmadev: fix debug build with tracepoints' " luca.boccassi
2025-11-12 16:52     ` patch 'buildtools/pmdinfogen: fix warning with python 3.14' " luca.boccassi
2025-11-12 16:52     ` patch 'net/iavf: fix build with clang 21' " luca.boccassi
2025-11-12 16:52     ` patch 'eventdev/crypto: " luca.boccassi
2025-11-12 16:52     ` patch 'rawdev: " luca.boccassi
2025-11-12 16:52     ` patch 'vdpa/mlx5: remove unused constant' " luca.boccassi
2025-11-12 16:52     ` patch 'crypto/mlx5: remove unused constants' " luca.boccassi
2025-11-12 16:52     ` patch 'regex/mlx5: remove useless " luca.boccassi
2025-11-12 16:52     ` patch 'common/mlx5: " luca.boccassi
2025-11-12 16:52     ` patch 'net/mlx5: " luca.boccassi
2025-11-12 16:52     ` patch 'net/mlx5: remove unused macros' " luca.boccassi
2025-11-12 16:52     ` patch 'doc: fix NVIDIA bifurcated driver presentation link' " luca.boccassi
2025-11-12 16:52     ` luca.boccassi [this message]
2025-11-12 16:52     ` patch 'net/vmxnet3: disable RSS for single queue for ESX8.0+' " luca.boccassi
2025-11-12 16:52     ` patch 'net/dpaa: fix resource leak' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: reduce memory size of ring descriptors' " luca.boccassi
2025-11-12 16:52     ` patch 'net/ngbe: " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: fix VF Rx buffer size in config register' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: add device arguments for FDIR' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: fix maximum number of FDIR filters' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: fix FDIR mode clearing' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: fix FDIR drop action for L4 match packets' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: fix FDIR filter for SCTP tunnel' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: filter FDIR match flex bytes for " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: fix FDIR rule raw relative for L3 packets' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: fix FDIR input mask' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: switch to FDIR when ntuple filter is full' " luca.boccassi
2025-11-12 16:52     ` patch 'net/txgbe: remove unsupported flow action mark' " luca.boccassi
2025-11-12 16:52     ` patch 'net/bonding: fix MAC address propagation in 802.3ad mode' " luca.boccassi
2025-11-12 16:52     ` patch 'app/testpmd: fix DCB Tx port' " luca.boccassi
2025-11-12 16:52     ` patch 'app/testpmd: fix DCB Rx queues' " luca.boccassi
2025-11-12 16:52     ` patch 'net/e1000/base: fix crash on init with GCC 13' " luca.boccassi
2025-11-12 16:52     ` patch 'net/fm10k: fix build with GCC 16' " luca.boccassi
2025-11-12 16:52     ` patch 'net/mlx4: fix unnecessary comma' " luca.boccassi
2025-11-12 16:52     ` patch 'net/mlx5: fix unnecessary commas' " luca.boccassi
2025-11-12 16:52     ` patch 'net/mlx5: fix multi-process Tx default rules' " luca.boccassi
2025-11-12 16:52     ` patch 'net/mlx5: store MTU at Rx queue allocation time' " luca.boccassi
2025-11-12 16:52     ` patch 'net/mlx5: fix indirect RSS action hash' " luca.boccassi
2025-11-12 16:52     ` patch 'net/mlx5: fix indirect meter index leak' " luca.boccassi
2025-11-12 16:52     ` patch 'net/mlx5: fix error reporting on masked indirect actions' " luca.boccassi
2025-11-12 16:52     ` patch 'net: fix L2 length for GRE packets' " luca.boccassi
2025-11-12 16:52     ` patch 'graph: fix updating edge with active graph' " luca.boccassi
2025-11-12 16:52     ` patch 'app/pdump: remove hard-coded memory channels' " luca.boccassi
2025-11-12 16:52     ` patch 'pdump: handle primary process exit' " luca.boccassi
2025-11-12 16:53     ` patch 'examples/l3fwd-power: fix telemetry command registration' " luca.boccassi
2025-11-12 16:53     ` patch 'lib: fix backticks matching in Doxygen comments' " luca.boccassi
2025-11-12 16:53     ` patch 'ring: establish safe partial order in default mode' " luca.boccassi
2025-11-12 19:12       ` Wathsala Vithanage
2025-11-12 21:12         ` Luca Boccassi
2025-11-12 16:53     ` patch 'doc: add device arguments in txgbe guide' " luca.boccassi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251112165308.1618107-14-luca.boccassi@gmail.com \
    --to=luca.boccassi@gmail.com \
    --cc=anatoly.burakov@intel.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).