All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: Anatoly Burakov <anatoly.burakov@intel.com>
Subject: [PATCH v19 18/26] vfio: rename some internal types and macros
Date: Wed,  7 Oct 2026 09:31:56 +0200	[thread overview]
Message-ID: <20261007073206.567001-19-david.marchand@redhat.com> (raw)
In-Reply-To: <20261007073206.567001-1-david.marchand@redhat.com>

From: Anatoly Burakov <anatoly.burakov@intel.com>

Some types and macros will be used in multiple code units in later
commits.
Prefix them with vfio_/VFIO_.

Rename vfio_config as vfio_container and pass it instead of the
container FD.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 lib/eal/linux/eal_vfio.c         | 548 ++++++++++++++-----------------
 lib/eal/linux/eal_vfio.h         |  50 ++-
 lib/eal/linux/eal_vfio_mp_sync.c |  26 +-
 3 files changed, 298 insertions(+), 326 deletions(-)

diff --git a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c
index 144920d1d0..c050e022da 100644
--- a/lib/eal/linux/eal_vfio.c
+++ b/lib/eal/linux/eal_vfio.c
@@ -29,36 +29,9 @@
 
 #define VFIO_MEM_EVENT_CLB_NAME "vfio_mem_event_clb"
 
-/* hot plug/unplug of VFIO groups may cause all DMA maps to be dropped. we can
- * recreate the mappings for DPDK segments, but we cannot do so for memory that
- * was registered by the user themselves, so we need to store the user mappings
- * somewhere, to recreate them later.
- */
-#define EAL_VFIO_MAX_USER_MEM_MAPS 256
-struct user_mem_map {
-	uint64_t addr;  /**< start VA */
-	uint64_t iova;  /**< start IOVA */
-	uint64_t len;   /**< total length of the mapping */
-	uint64_t chunk; /**< this mapping can be split in chunks of this size */
-};
-
-struct user_mem_maps {
-	rte_spinlock_recursive_t lock;
-	int n_maps;
-	struct user_mem_map maps[EAL_VFIO_MAX_USER_MEM_MAPS];
-};
-
-struct vfio_config {
-	int vfio_container_fd;
-	int vfio_active_groups;
-	const struct vfio_iommu_type *vfio_iommu_type;
-	struct vfio_group vfio_groups[RTE_MAX_VFIO_GROUPS];
-	struct user_mem_maps mem_maps;
-};
-
 /* per-process VFIO config */
-static struct vfio_config vfio_cfgs[RTE_MAX_VFIO_CONTAINERS];
-static struct vfio_config *default_vfio_cfg = &vfio_cfgs[0];
+static struct vfio_container vfio_containers[RTE_MAX_VFIO_CONTAINERS];
+static struct vfio_container *default_vfio_cfg = &vfio_containers[0];
 
 /* whether VFIO is enabled (usable) in this process */
 static bool vfio_enabled;
@@ -105,14 +78,14 @@ vfio_check_module(enum dev_vfio_module module)
 	return 1;
 }
 
-static int vfio_type1_dma_map(int);
-static int vfio_type1_dma_mem_map(int, uint64_t, uint64_t, uint64_t, int);
-static int vfio_spapr_dma_map(int);
-static int vfio_spapr_dma_mem_map(int, uint64_t, uint64_t, uint64_t, int);
-static int vfio_noiommu_dma_map(int);
-static int vfio_noiommu_dma_mem_map(int, uint64_t, uint64_t, uint64_t, int);
-static int vfio_dma_mem_map(struct vfio_config *vfio_cfg, uint64_t vaddr,
-		uint64_t iova, uint64_t len, int do_map);
+static int vfio_type1_dma_map(struct vfio_container *);
+static int vfio_type1_dma_mem_map(struct vfio_container *, uint64_t, uint64_t, uint64_t, int);
+static int vfio_spapr_dma_map(struct vfio_container *);
+static int vfio_spapr_dma_mem_map(struct vfio_container *, uint64_t, uint64_t, uint64_t, int);
+static int vfio_noiommu_dma_map(struct vfio_container *);
+static int vfio_noiommu_dma_mem_map(struct vfio_container *, uint64_t, uint64_t, uint64_t, int);
+static int vfio_dma_mem_map(struct vfio_container *cfg, uint64_t vaddr, uint64_t iova,
+		uint64_t len, int do_map);
 
 static int vfio_container_group_bind(int container_fd, int iommu_group_num);
 static int vfio_container_group_unbind(int container_fd, int iommu_group_num);
@@ -146,10 +119,9 @@ static const struct vfio_iommu_type iommu_types[] = {
 };
 
 static int
-is_null_map(const struct user_mem_map *map)
+is_null_map(const struct vfio_user_mem_map *map)
 {
-	return map->addr == 0 && map->iova == 0 &&
-			map->len == 0 && map->chunk == 0;
+	return map->addr == 0 && map->iova == 0 && map->len == 0 && map->chunk == 0;
 }
 
 /* we may need to merge user mem maps together in case of user mapping/unmapping
@@ -158,8 +130,8 @@ is_null_map(const struct user_mem_map *map)
 static int
 user_mem_map_cmp(const void *a, const void *b)
 {
-	const struct user_mem_map *umm_a = a;
-	const struct user_mem_map *umm_b = b;
+	const struct vfio_user_mem_map *umm_a = a;
+	const struct vfio_user_mem_map *umm_b = b;
 
 	/* move null entries to end */
 	if (is_null_map(umm_a))
@@ -196,14 +168,14 @@ user_mem_map_cmp(const void *a, const void *b)
  * mappings that will be kept.
  */
 static int
-process_maps(struct user_mem_map *src, size_t src_len,
-		struct user_mem_map newmap[2], uint64_t vaddr, uint64_t len)
+process_maps(struct vfio_user_mem_map *src, size_t src_len, struct vfio_user_mem_map newmap[2],
+		uint64_t vaddr, uint64_t len)
 {
-	struct user_mem_map *src_first = &src[0];
-	struct user_mem_map *src_last = &src[src_len - 1];
-	struct user_mem_map *dst_first = &newmap[0];
+	struct vfio_user_mem_map *src_first = &src[0];
+	struct vfio_user_mem_map *src_last = &src[src_len - 1];
+	struct vfio_user_mem_map *dst_first = &newmap[0];
 	/* we can get at most two new segments */
-	struct user_mem_map *dst_last = &newmap[1];
+	struct vfio_user_mem_map *dst_last = &newmap[1];
 	uint64_t first_off = vaddr - src_first->addr;
 	uint64_t last_off = (src_last->addr + src_last->len) - (vaddr + len);
 	int newmap_len = 0;
@@ -218,8 +190,8 @@ process_maps(struct user_mem_map *src, size_t src_len,
 	}
 	if (last_off != 0) {
 		/* if we had start offset, we have two segments */
-		struct user_mem_map *last =
-				first_off == 0 ? dst_first : dst_last;
+		struct vfio_user_mem_map *last = first_off == 0 ? dst_first : dst_last;
+
 		last->addr = (src_last->addr + src_last->len) - last_off;
 		last->iova = (src_last->iova + src_last->len) - last_off;
 		last->len = last_off;
@@ -232,15 +204,15 @@ process_maps(struct user_mem_map *src, size_t src_len,
 
 /* erase certain maps from the list */
 static void
-delete_maps(struct user_mem_maps *user_mem_maps, struct user_mem_map *del_maps,
+delete_maps(struct vfio_user_mem_maps *user_mem_maps, struct vfio_user_mem_map *del_maps,
 		size_t n_del)
 {
 	unsigned int i;
 	size_t j;
 
 	for (i = 0, j = 0; i < RTE_DIM(user_mem_maps->maps) && j < n_del; i++) {
-		struct user_mem_map *left = &user_mem_maps->maps[i];
-		struct user_mem_map *right = &del_maps[j];
+		struct vfio_user_mem_map *left = &user_mem_maps->maps[i];
+		struct vfio_user_mem_map *right = &del_maps[j];
 
 		if (user_mem_map_cmp(left, right) == 0) {
 			memset(left, 0, sizeof(*left));
@@ -251,15 +223,15 @@ delete_maps(struct user_mem_maps *user_mem_maps, struct user_mem_map *del_maps,
 }
 
 static void
-copy_maps(struct user_mem_maps *user_mem_maps, struct user_mem_map *add_maps,
+copy_maps(struct vfio_user_mem_maps *user_mem_maps, struct vfio_user_mem_map *add_maps,
 		size_t n_add)
 {
 	unsigned int i;
 	size_t j;
 
 	for (i = 0, j = 0; i < RTE_DIM(user_mem_maps->maps) && j < n_add; i++) {
-		struct user_mem_map *left = &user_mem_maps->maps[i];
-		struct user_mem_map *right = &add_maps[j];
+		struct vfio_user_mem_map *left = &user_mem_maps->maps[i];
+		struct vfio_user_mem_map *right = &add_maps[j];
 
 		/* insert into empty space */
 		if (is_null_map(left)) {
@@ -272,10 +244,10 @@ copy_maps(struct user_mem_maps *user_mem_maps, struct user_mem_map *add_maps,
 
 /* try merging two maps into one, return 1 if succeeded */
 static int
-merge_map(struct user_mem_map *left, struct user_mem_map *right)
+merge_map(struct vfio_user_mem_map *left, struct vfio_user_mem_map *right)
 {
 	/* merge the same maps into one */
-	if (memcmp(left, right, sizeof(struct user_mem_map)) == 0)
+	if (memcmp(left, right, sizeof(struct vfio_user_mem_map)) == 0)
 		goto out;
 
 	if (left->addr + left->len != right->addr)
@@ -293,13 +265,12 @@ merge_map(struct user_mem_map *left, struct user_mem_map *right)
 }
 
 static bool
-addr_is_chunk_aligned(struct user_mem_map *maps, size_t n_maps,
-		uint64_t vaddr, uint64_t iova)
+addr_is_chunk_aligned(struct vfio_user_mem_map *maps, size_t n_maps, uint64_t vaddr, uint64_t iova)
 {
 	unsigned int i;
 
 	for (i = 0; i < n_maps; i++) {
-		struct user_mem_map *map = &maps[i];
+		struct vfio_user_mem_map *map = &maps[i];
 		uint64_t map_va_end = map->addr + map->len;
 		uint64_t map_iova_end = map->iova + map->len;
 		uint64_t map_va_off = vaddr - map->addr;
@@ -312,17 +283,15 @@ addr_is_chunk_aligned(struct user_mem_map *maps, size_t n_maps,
 		bool addr_is_aligned = (map_va_off % map->chunk) == 0;
 		bool iova_is_aligned = (map_iova_off % map->chunk) == 0;
 
-		if (addr_in_map && iova_in_map &&
-				addr_is_aligned && iova_is_aligned)
+		if (addr_in_map && iova_in_map && addr_is_aligned && iova_is_aligned)
 			return true;
 	}
 	return false;
 }
 
 static int
-find_user_mem_maps(struct user_mem_maps *user_mem_maps, uint64_t addr,
-		uint64_t iova, uint64_t len, struct user_mem_map *dst,
-		size_t dst_len)
+find_user_mem_maps(struct vfio_user_mem_maps *user_mem_maps, uint64_t addr, uint64_t iova,
+		uint64_t len, struct vfio_user_mem_map *dst, size_t dst_len)
 {
 	uint64_t va_end = addr + len;
 	uint64_t iova_end = iova + len;
@@ -331,18 +300,14 @@ find_user_mem_maps(struct user_mem_maps *user_mem_maps, uint64_t addr,
 	int i, ret;
 
 	for (i = 0, j = 0; i < user_mem_maps->n_maps; i++) {
-		struct user_mem_map *map = &user_mem_maps->maps[i];
+		struct vfio_user_mem_map *map = &user_mem_maps->maps[i];
 		uint64_t map_va_end = map->addr + map->len;
 		uint64_t map_iova_end = map->iova + map->len;
 
-		bool start_addr_in_map = (addr >= map->addr) &&
-				(addr < map_va_end);
-		bool end_addr_in_map = (va_end > map->addr) &&
-				(va_end <= map_va_end);
-		bool start_iova_in_map = (iova >= map->iova) &&
-				(iova < map_iova_end);
-		bool end_iova_in_map = (iova_end > map->iova) &&
-				(iova_end <= map_iova_end);
+		bool start_addr_in_map = (addr >= map->addr) && (addr < map_va_end);
+		bool end_addr_in_map = (va_end > map->addr) && (va_end <= map_va_end);
+		bool start_iova_in_map = (iova >= map->iova) && (iova < map_iova_end);
+		bool end_iova_in_map = (iova_end > map->iova) && (iova_end <= map_iova_end);
 
 		/* do we have space in temporary map? */
 		if (j == dst_len) {
@@ -371,16 +336,16 @@ find_user_mem_maps(struct user_mem_maps *user_mem_maps, uint64_t addr,
 
 /* this will sort all user maps, and merge/compact any adjacent maps */
 static void
-compact_user_maps(struct user_mem_maps *user_mem_maps)
+compact_user_maps(struct vfio_user_mem_maps *user_mem_maps)
 {
 	unsigned int i;
 
-	qsort(user_mem_maps->maps, RTE_DIM(user_mem_maps->maps),
-			sizeof(user_mem_maps->maps[0]), user_mem_map_cmp);
+	qsort(user_mem_maps->maps, RTE_DIM(user_mem_maps->maps), sizeof(user_mem_maps->maps[0]),
+		user_mem_map_cmp);
 
 	/* we'll go over the list backwards when merging */
 	for (i = RTE_DIM(user_mem_maps->maps) - 2; i != 0; i--) {
-		struct user_mem_map *l, *r;
+		struct vfio_user_mem_map *l, *r;
 
 		l = &user_mem_maps->maps[i];
 		r = &user_mem_maps->maps[i + 1];
@@ -396,8 +361,8 @@ compact_user_maps(struct user_mem_maps *user_mem_maps)
 	/* the entries are still sorted, but now they have holes in them, so
 	 * sort the list again.
 	 */
-	qsort(user_mem_maps->maps, RTE_DIM(user_mem_maps->maps),
-			sizeof(user_mem_maps->maps[0]), user_mem_map_cmp);
+	qsort(user_mem_maps->maps, RTE_DIM(user_mem_maps->maps), sizeof(user_mem_maps->maps[0]),
+		user_mem_map_cmp);
 }
 
 static int
@@ -444,7 +409,7 @@ vfio_open_group_fd(int iommu_group_num, bool mp_request)
 	/* if we're in a secondary process, request group fd from the primary
 	 * process via mp channel.
 	 */
-	p->req = SOCKET_REQ_GROUP;
+	p->req = VFIO_SOCKET_REQ_GROUP;
 	p->group_num = iommu_group_num;
 	strcpy(mp_req.name, EAL_VFIO_MP);
 	mp_req.len_param = sizeof(*p);
@@ -455,9 +420,9 @@ vfio_open_group_fd(int iommu_group_num, bool mp_request)
 	    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) {
+		if (p->result == VFIO_SOCKET_OK && mp_rep->num_fds == 1) {
 			vfio_group_fd = mp_rep->fds[0];
-		} else if (p->result == SOCKET_NO_FD) {
+		} else if (p->result == VFIO_SOCKET_NO_FD) {
 			EAL_LOG(ERR, "Bad VFIO group fd");
 			vfio_group_fd = -ENOENT;
 		}
@@ -469,18 +434,18 @@ vfio_open_group_fd(int iommu_group_num, bool mp_request)
 	return vfio_group_fd;
 }
 
-static struct vfio_config *
+static struct vfio_container *
 get_vfio_cfg_by_group_num(int iommu_group_num)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 	unsigned int i, j;
 
-	for (i = 0; i < RTE_DIM(vfio_cfgs); i++) {
-		vfio_cfg = &vfio_cfgs[i];
-		for (j = 0; j < RTE_DIM(vfio_cfg->vfio_groups); j++) {
-			if (vfio_cfg->vfio_groups[j].group_num ==
+	for (i = 0; i < RTE_DIM(vfio_containers); i++) {
+		cfg = &vfio_containers[i];
+		for (j = 0; j < RTE_DIM(cfg->vfio_groups); j++) {
+			if (cfg->vfio_groups[j].group_num ==
 					iommu_group_num)
-				return vfio_cfg;
+				return cfg;
 		}
 	}
 
@@ -488,28 +453,27 @@ get_vfio_cfg_by_group_num(int iommu_group_num)
 }
 
 static int
-vfio_get_group_fd(struct vfio_config *vfio_cfg,
-		int iommu_group_num)
+vfio_get_group_fd(struct vfio_container *cfg, int iommu_group_num)
 {
 	struct vfio_group *cur_grp = NULL;
 	int vfio_group_fd;
 	unsigned int i;
 
 	/* check if we already have the group descriptor open */
-	for (i = 0; i < RTE_DIM(vfio_cfg->vfio_groups); i++)
-		if (vfio_cfg->vfio_groups[i].group_num == iommu_group_num)
-			return vfio_cfg->vfio_groups[i].fd;
+	for (i = 0; i < RTE_DIM(cfg->vfio_groups); i++)
+		if (cfg->vfio_groups[i].group_num == iommu_group_num)
+			return cfg->vfio_groups[i].fd;
 
 	/* Lets see first if there is room for a new group */
-	if (vfio_cfg->vfio_active_groups == RTE_DIM(vfio_cfg->vfio_groups)) {
+	if (cfg->vfio_active_groups == RTE_DIM(cfg->vfio_groups)) {
 		EAL_LOG(ERR, "Maximum number of VFIO groups reached!");
 		return -1;
 	}
 
 	/* Now lets get an index for the new group */
-	for (i = 0; i < RTE_DIM(vfio_cfg->vfio_groups); i++)
-		if (vfio_cfg->vfio_groups[i].group_num == -1) {
-			cur_grp = &vfio_cfg->vfio_groups[i];
+	for (i = 0; i < RTE_DIM(cfg->vfio_groups); i++)
+		if (cfg->vfio_groups[i].group_num == -1) {
+			cur_grp = &cfg->vfio_groups[i];
 			break;
 		}
 
@@ -534,7 +498,7 @@ vfio_get_group_fd(struct vfio_config *vfio_cfg,
 	 */
 	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);
+			(cfg == default_vfio_cfg);
 
 	vfio_group_fd = vfio_open_group_fd(iommu_group_num, mp_request);
 	if (vfio_group_fd < 0) {
@@ -545,28 +509,28 @@ vfio_get_group_fd(struct vfio_config *vfio_cfg,
 
 	cur_grp->group_num = iommu_group_num;
 	cur_grp->fd = vfio_group_fd;
-	vfio_cfg->vfio_active_groups++;
+	cfg->vfio_active_groups++;
 
 	return vfio_group_fd;
 }
 
-static struct vfio_config *
+static struct vfio_container *
 get_vfio_cfg_by_group_fd(int vfio_group_fd)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 	unsigned int i, j;
 
-	for (i = 0; i < RTE_DIM(vfio_cfgs); i++) {
-		vfio_cfg = &vfio_cfgs[i];
-		for (j = 0; j < RTE_DIM(vfio_cfg->vfio_groups); j++)
-			if (vfio_cfg->vfio_groups[j].fd == vfio_group_fd)
-				return vfio_cfg;
+	for (i = 0; i < RTE_DIM(vfio_containers); i++) {
+		cfg = &vfio_containers[i];
+		for (j = 0; j < RTE_DIM(cfg->vfio_groups); j++)
+			if (cfg->vfio_groups[j].fd == vfio_group_fd)
+				return cfg;
 	}
 
 	return NULL;
 }
 
-static struct vfio_config *
+static struct vfio_container *
 get_vfio_cfg_by_container_fd(int container_fd)
 {
 	unsigned int i;
@@ -574,9 +538,9 @@ get_vfio_cfg_by_container_fd(int container_fd)
 	if (container_fd == DEV_VFIO_DEFAULT_CONTAINER_FD)
 		return default_vfio_cfg;
 
-	for (i = 0; i < RTE_DIM(vfio_cfgs); i++) {
-		if (vfio_cfgs[i].vfio_container_fd == container_fd)
-			return &vfio_cfgs[i];
+	for (i = 0; i < RTE_DIM(vfio_containers); i++) {
+		if (vfio_containers[i].container_fd == container_fd)
+			return &vfio_containers[i];
 	}
 
 	return NULL;
@@ -585,28 +549,28 @@ get_vfio_cfg_by_container_fd(int container_fd)
 int
 vfio_get_group_fd_by_num(int iommu_group_num)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 
 	if (!vfio_enabled)
 		return -1;
 
-	/* get the vfio_config it belongs to */
-	vfio_cfg = get_vfio_cfg_by_group_num(iommu_group_num);
-	vfio_cfg = vfio_cfg ? vfio_cfg : default_vfio_cfg;
+	/* get the vfio_container it belongs to */
+	cfg = get_vfio_cfg_by_group_num(iommu_group_num);
+	cfg = cfg ? cfg : default_vfio_cfg;
 
-	return vfio_get_group_fd(vfio_cfg, iommu_group_num);
+	return vfio_get_group_fd(cfg, iommu_group_num);
 }
 
 static int
 get_vfio_group_idx(int vfio_group_fd)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 	unsigned int i, j;
 
-	for (i = 0; i < RTE_DIM(vfio_cfgs); i++) {
-		vfio_cfg = &vfio_cfgs[i];
-		for (j = 0; j < RTE_DIM(vfio_cfg->vfio_groups); j++)
-			if (vfio_cfg->vfio_groups[j].fd == vfio_group_fd)
+	for (i = 0; i < RTE_DIM(vfio_containers); i++) {
+		cfg = &vfio_containers[i];
+		for (j = 0; j < RTE_DIM(cfg->vfio_groups); j++)
+			if (cfg->vfio_groups[j].fd == vfio_group_fd)
 				return j;
 	}
 
@@ -616,11 +580,11 @@ get_vfio_group_idx(int vfio_group_fd)
 static void
 vfio_group_device_get(int vfio_group_fd)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 	int i;
 
-	vfio_cfg = get_vfio_cfg_by_group_fd(vfio_group_fd);
-	if (vfio_cfg == NULL) {
+	cfg = get_vfio_cfg_by_group_fd(vfio_group_fd);
+	if (cfg == NULL) {
 		EAL_LOG(ERR, "Invalid VFIO group fd!");
 		return;
 	}
@@ -629,17 +593,17 @@ vfio_group_device_get(int vfio_group_fd)
 	if (i < 0)
 		EAL_LOG(ERR, "Wrong VFIO group index (%d)", i);
 	else
-		vfio_cfg->vfio_groups[i].devices++;
+		cfg->vfio_groups[i].devices++;
 }
 
 static void
 vfio_group_device_put(int vfio_group_fd)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 	int i;
 
-	vfio_cfg = get_vfio_cfg_by_group_fd(vfio_group_fd);
-	if (vfio_cfg == NULL) {
+	cfg = get_vfio_cfg_by_group_fd(vfio_group_fd);
+	if (cfg == NULL) {
 		EAL_LOG(ERR, "Invalid VFIO group fd!");
 		return;
 	}
@@ -648,17 +612,17 @@ vfio_group_device_put(int vfio_group_fd)
 	if (i < 0)
 		EAL_LOG(ERR, "Wrong VFIO group index (%d)", i);
 	else
-		vfio_cfg->vfio_groups[i].devices--;
+		cfg->vfio_groups[i].devices--;
 }
 
 static int
 vfio_group_device_count(int vfio_group_fd)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 	int i;
 
-	vfio_cfg = get_vfio_cfg_by_group_fd(vfio_group_fd);
-	if (vfio_cfg == NULL) {
+	cfg = get_vfio_cfg_by_group_fd(vfio_group_fd);
+	if (cfg == NULL) {
 		EAL_LOG(ERR, "Invalid VFIO group fd!");
 		return -1;
 	}
@@ -669,7 +633,7 @@ vfio_group_device_count(int vfio_group_fd)
 		return -1;
 	}
 
-	return vfio_cfg->vfio_groups[i].devices;
+	return cfg->vfio_groups[i].devices;
 }
 
 static void
@@ -738,14 +702,13 @@ vfio_sync_default_container(void)
 		return -1;
 
 	/* default container fd should have been opened in dev_vfio_enable() */
-	if (!vfio_enabled ||
-			default_vfio_cfg->vfio_container_fd < 0) {
+	if (!vfio_enabled || default_vfio_cfg->container_fd < 0) {
 		EAL_LOG(ERR, "VFIO support is not initialized");
 		return -1;
 	}
 
 	/* find default container's IOMMU type */
-	p->req = SOCKET_REQ_IOMMU_TYPE;
+	p->req = VFIO_SOCKET_REQ_IOMMU_TYPE;
 	strcpy(mp_req.name, EAL_VFIO_MP);
 	mp_req.len_param = sizeof(*p);
 	mp_req.num_fds = 0;
@@ -755,7 +718,7 @@ vfio_sync_default_container(void)
 			mp_reply.nb_received == 1) {
 		mp_rep = &mp_reply.msgs[0];
 		p = (struct vfio_mp_param *)mp_rep->param;
-		if (p->result == SOCKET_OK)
+		if (p->result == VFIO_SOCKET_OK)
 			iommu_type_id = p->iommu_type_id;
 	}
 	free(mp_reply.msgs);
@@ -787,13 +750,13 @@ static int
 vfio_clear_group(int vfio_group_fd)
 {
 	int i;
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 
 	if (!vfio_enabled)
 		return -1;
 
-	vfio_cfg = get_vfio_cfg_by_group_fd(vfio_group_fd);
-	if (vfio_cfg == NULL) {
+	cfg = get_vfio_cfg_by_group_fd(vfio_group_fd);
+	if (cfg == NULL) {
 		EAL_LOG(ERR, "Invalid VFIO group fd!");
 		return -1;
 	}
@@ -801,10 +764,10 @@ vfio_clear_group(int vfio_group_fd)
 	i = get_vfio_group_idx(vfio_group_fd);
 	if (i < 0)
 		return -1;
-	vfio_cfg->vfio_groups[i].group_num = -1;
-	vfio_cfg->vfio_groups[i].fd = -1;
-	vfio_cfg->vfio_groups[i].devices = 0;
-	vfio_cfg->vfio_active_groups--;
+	cfg->vfio_groups[i].group_num = -1;
+	cfg->vfio_groups[i].fd = -1;
+	cfg->vfio_groups[i].devices = 0;
+	cfg->vfio_active_groups--;
 
 	return 0;
 }
@@ -816,8 +779,8 @@ dev_vfio_setup_device(const char *sysfs_base, const char *dev_addr, int *vfio_de
 	struct vfio_group_status group_status = {
 			.argsz = sizeof(group_status)
 	};
-	struct vfio_config *vfio_cfg;
-	struct user_mem_maps *user_mem_maps;
+	struct vfio_container *cfg;
+	struct vfio_user_mem_maps *user_mem_maps;
 	int vfio_container_fd;
 	int vfio_group_fd;
 	int iommu_group_num;
@@ -880,18 +843,17 @@ dev_vfio_setup_device(const char *sysfs_base, const char *dev_addr, int *vfio_de
 		return -1;
 	}
 
-	/* get the vfio_config it belongs to */
-	vfio_cfg = get_vfio_cfg_by_group_num(iommu_group_num);
-	vfio_cfg = vfio_cfg ? vfio_cfg : default_vfio_cfg;
-	vfio_container_fd = vfio_cfg->vfio_container_fd;
-	user_mem_maps = &vfio_cfg->mem_maps;
+	/* get the vfio_container it belongs to */
+	cfg = get_vfio_cfg_by_group_num(iommu_group_num);
+	cfg = cfg ? cfg : default_vfio_cfg;
+	vfio_container_fd = cfg->container_fd;
+	user_mem_maps = &cfg->mem_maps;
 
 	/* check if group does not have a container yet */
 	if (!(group_status.flags & VFIO_GROUP_FLAGS_CONTAINER_SET)) {
 
 		/* add group to a container */
-		ret = ioctl(vfio_group_fd, VFIO_GROUP_SET_CONTAINER,
-				&vfio_container_fd);
+		ret = ioctl(vfio_group_fd, VFIO_GROUP_SET_CONTAINER, &vfio_container_fd);
 		if (ret) {
 			EAL_LOG(ERR,
 				"%s cannot add VFIO group to container, error "
@@ -910,7 +872,7 @@ dev_vfio_setup_device(const char *sysfs_base, const char *dev_addr, int *vfio_de
 		 * functionality.
 		 */
 		if (internal_conf->process_type == RTE_PROC_PRIMARY &&
-				vfio_cfg->vfio_active_groups == 1 &&
+				cfg->vfio_active_groups == 1 &&
 				vfio_group_device_count(vfio_group_fd) == 0) {
 			const struct vfio_iommu_type *t;
 
@@ -928,8 +890,8 @@ dev_vfio_setup_device(const char *sysfs_base, const char *dev_addr, int *vfio_de
 			 * after registering callback, to prevent races
 			 */
 			rte_mcfg_mem_read_lock();
-			if (vfio_cfg == default_vfio_cfg)
-				ret = t->dma_map_func(vfio_container_fd);
+			if (cfg == default_vfio_cfg)
+				ret = t->dma_map_func(cfg);
 			else
 				ret = 0;
 			if (ret) {
@@ -943,7 +905,7 @@ dev_vfio_setup_device(const char *sysfs_base, const char *dev_addr, int *vfio_de
 				return -1;
 			}
 
-			vfio_cfg->vfio_iommu_type = t;
+			cfg->vfio_iommu_type = t;
 
 			/* re-map all user-mapped segments */
 			rte_spinlock_recursive_lock(&user_mem_maps->lock);
@@ -954,13 +916,10 @@ dev_vfio_setup_device(const char *sysfs_base, const char *dev_addr, int *vfio_de
 			 * be sure that DMA mapping is supported.
 			 */
 			for (i = 0; i < user_mem_maps->n_maps; i++) {
-				struct user_mem_map *map;
+				struct vfio_user_mem_map *map;
 				map = &user_mem_maps->maps[i];
 
-				ret = t->dma_user_map_func(
-						vfio_container_fd,
-						map->addr, map->iova, map->len,
-						1);
+				ret = t->dma_user_map_func(cfg, map->addr, map->iova, map->len, 1);
 				if (ret) {
 					EAL_LOG(ERR, "Couldn't map user memory for DMA: "
 							"va: 0x%" PRIx64 " "
@@ -977,7 +936,7 @@ dev_vfio_setup_device(const char *sysfs_base, const char *dev_addr, int *vfio_de
 			rte_spinlock_recursive_unlock(&user_mem_maps->lock);
 
 			/* register callback for mem events */
-			if (vfio_cfg == default_vfio_cfg)
+			if (cfg == default_vfio_cfg)
 				ret = rte_mem_event_callback_register(
 					VFIO_MEM_EVENT_CLB_NAME,
 					vfio_mem_event_callback, NULL);
@@ -996,8 +955,8 @@ dev_vfio_setup_device(const char *sysfs_base, const char *dev_addr, int *vfio_de
 				EAL_LOG(DEBUG, "Installed memory event callback for VFIO");
 		}
 	} else if (rte_eal_process_type() != RTE_PROC_PRIMARY &&
-			vfio_cfg == default_vfio_cfg &&
-			vfio_cfg->vfio_iommu_type == NULL) {
+			cfg == default_vfio_cfg &&
+			cfg->vfio_iommu_type == NULL) {
 		/* if we're not a primary process, we do not set up the VFIO
 		 * container because it's already been set up by the primary
 		 * process. instead, we simply ask the primary about VFIO type
@@ -1060,7 +1019,7 @@ int
 dev_vfio_release_device(const char *sysfs_base, const char *dev_addr,
 		    int vfio_dev_fd)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 	int vfio_group_fd;
 	int iommu_group_num;
 	int ret;
@@ -1092,9 +1051,9 @@ dev_vfio_release_device(const char *sysfs_base, const char *dev_addr,
 		goto out;
 	}
 
-	/* get the vfio_config it belongs to */
-	vfio_cfg = get_vfio_cfg_by_group_num(iommu_group_num);
-	vfio_cfg = vfio_cfg ? vfio_cfg : default_vfio_cfg;
+	/* get the vfio_container it belongs to */
+	cfg = get_vfio_cfg_by_group_num(iommu_group_num);
+	cfg = cfg ? cfg : default_vfio_cfg;
 
 	/* At this point we got an active group. Closing it will make the
 	 * container detachment. If this is the last active group, VFIO kernel
@@ -1133,7 +1092,7 @@ dev_vfio_release_device(const char *sysfs_base, const char *dev_addr,
 	/* if there are no active device groups, unregister the callback to
 	 * avoid spurious attempts to map/unmap memory from VFIO.
 	 */
-	if (vfio_cfg == default_vfio_cfg && vfio_cfg->vfio_active_groups == 0 &&
+	if (cfg == default_vfio_cfg && cfg->vfio_active_groups == 0 &&
 			rte_eal_process_type() != RTE_PROC_SECONDARY)
 		rte_mem_event_callback_unregister(VFIO_MEM_EVENT_CLB_NAME,
 				NULL);
@@ -1162,16 +1121,16 @@ dev_vfio_enable(void)
 	if (vfio_enabled)
 		return 0;
 
-	for (i = 0; i < RTE_DIM(vfio_cfgs); i++) {
-		vfio_cfgs[i].vfio_container_fd = -1;
-		vfio_cfgs[i].vfio_active_groups = 0;
-		vfio_cfgs[i].vfio_iommu_type = NULL;
-		vfio_cfgs[i].mem_maps.lock = lock;
+	for (i = 0; i < RTE_DIM(vfio_containers); i++) {
+		vfio_containers[i].container_fd = -1;
+		vfio_containers[i].vfio_active_groups = 0;
+		vfio_containers[i].vfio_iommu_type = NULL;
+		vfio_containers[i].mem_maps.lock = lock;
 
-		for (j = 0; j < RTE_DIM(vfio_cfgs[i].vfio_groups); j++) {
-			vfio_cfgs[i].vfio_groups[j].fd = -1;
-			vfio_cfgs[i].vfio_groups[j].group_num = -1;
-			vfio_cfgs[i].vfio_groups[j].devices = 0;
+		for (j = 0; j < RTE_DIM(vfio_containers[i].vfio_groups); j++) {
+			vfio_containers[i].vfio_groups[j].fd = -1;
+			vfio_containers[i].vfio_groups[j].group_num = -1;
+			vfio_containers[i].vfio_groups[j].devices = 0;
 		}
 	}
 
@@ -1204,19 +1163,18 @@ dev_vfio_enable(void)
 
 	if (internal_conf->process_type == RTE_PROC_PRIMARY) {
 		if (vfio_mp_sync_setup() == -1) {
-			default_vfio_cfg->vfio_container_fd = -1;
+			default_vfio_cfg->container_fd = -1;
 		} else {
 			/* open a default container */
-			default_vfio_cfg->vfio_container_fd = vfio_open_container_fd(false);
+			default_vfio_cfg->container_fd = vfio_open_container_fd(false);
 		}
 	} else {
 		/* get the default container from the primary process */
-		default_vfio_cfg->vfio_container_fd =
-			vfio_open_container_fd(true);
+		default_vfio_cfg->container_fd = vfio_open_container_fd(true);
 	}
 
 	/* check if we have VFIO driver enabled */
-	if (default_vfio_cfg->vfio_container_fd != -1) {
+	if (default_vfio_cfg->container_fd != -1) {
 		EAL_LOG(INFO, "VFIO support initialized");
 		vfio_enabled = true;
 	} else {
@@ -1381,7 +1339,7 @@ vfio_open_container_fd(bool mp_request)
 	 * if we're in a secondary process, request container fd from the
 	 * primary process via mp channel
 	 */
-	p->req = SOCKET_REQ_CONTAINER;
+	p->req = VFIO_SOCKET_REQ_CONTAINER;
 	strcpy(mp_req.name, EAL_VFIO_MP);
 	mp_req.len_param = sizeof(*p);
 	mp_req.num_fds = 0;
@@ -1391,7 +1349,7 @@ vfio_open_container_fd(bool mp_request)
 	    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) {
+		if (p->result == VFIO_SOCKET_OK && mp_rep->num_fds == 1) {
 			vfio_container_fd = mp_rep->fds[0];
 			free(mp_reply.msgs);
 			return vfio_container_fd;
@@ -1414,7 +1372,7 @@ dev_vfio_get_container_fd(void)
 	if (!vfio_enabled)
 		return -1;
 
-	return default_vfio_cfg->vfio_container_fd;
+	return default_vfio_cfg->container_fd;
 }
 
 RTE_EXPORT_INTERNAL_SYMBOL(dev_vfio_get_group_num)
@@ -1465,10 +1423,9 @@ dev_vfio_get_group_num(const char *sysfs_base,
 }
 
 static int
-type1_map(const struct rte_memseg_list *msl, const struct rte_memseg *ms,
-		void *arg)
+type1_map(const struct rte_memseg_list *msl, const struct rte_memseg *ms, void *arg)
 {
-	int *vfio_container_fd = arg;
+	struct vfio_container *cfg = arg;
 
 	/* skip external memory that isn't a heap */
 	if (msl->external && !msl->heap)
@@ -1478,13 +1435,12 @@ type1_map(const struct rte_memseg_list *msl, const struct rte_memseg *ms,
 	if (ms->iova == RTE_BAD_IOVA)
 		return 0;
 
-	return vfio_type1_dma_mem_map(*vfio_container_fd, ms->addr_64, ms->iova,
-			ms->len, 1);
+	return vfio_type1_dma_mem_map(cfg, ms->addr_64, ms->iova, ms->len, 1);
 }
 
 static int
-vfio_type1_dma_mem_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
-		uint64_t len, int do_map)
+vfio_type1_dma_mem_map(struct vfio_container *cfg, uint64_t vaddr, uint64_t iova, uint64_t len,
+		int do_map)
 {
 	struct vfio_iommu_type1_dma_map dma_map;
 	struct vfio_iommu_type1_dma_unmap dma_unmap;
@@ -1499,7 +1455,7 @@ vfio_type1_dma_mem_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
 		dma_map.flags = VFIO_DMA_MAP_FLAG_READ |
 				VFIO_DMA_MAP_FLAG_WRITE;
 
-		ret = ioctl(vfio_container_fd, VFIO_IOMMU_MAP_DMA, &dma_map);
+		ret = ioctl(cfg->container_fd, VFIO_IOMMU_MAP_DMA, &dma_map);
 		if (ret) {
 			/**
 			 * In case the mapping was already done EEXIST will be
@@ -1521,8 +1477,7 @@ vfio_type1_dma_mem_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
 		dma_unmap.size = len;
 		dma_unmap.iova = iova;
 
-		ret = ioctl(vfio_container_fd, VFIO_IOMMU_UNMAP_DMA,
-				&dma_unmap);
+		ret = ioctl(cfg->container_fd, VFIO_IOMMU_UNMAP_DMA, &dma_unmap);
 		if (ret) {
 			EAL_LOG(ERR, "Cannot clear DMA remapping, error "
 					"%i (%s)", errno, strerror(errno));
@@ -1540,9 +1495,9 @@ vfio_type1_dma_mem_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
 }
 
 static int
-vfio_type1_dma_map(int vfio_container_fd)
+vfio_type1_dma_map(struct vfio_container *cfg)
 {
-	return rte_memseg_walk(type1_map, &vfio_container_fd);
+	return rte_memseg_walk(type1_map, cfg);
 }
 
 /* Track the size of the statically allocated DMA window for SPAPR */
@@ -1550,8 +1505,8 @@ uint64_t spapr_dma_win_len;
 uint64_t spapr_dma_win_page_sz;
 
 static int
-vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
-		uint64_t len, int do_map)
+vfio_spapr_dma_do_map(struct vfio_container *cfg, uint64_t vaddr, uint64_t iova, uint64_t len,
+		int do_map)
 {
 	struct vfio_iommu_spapr_register_memory reg = {
 		.argsz = sizeof(reg),
@@ -1569,8 +1524,7 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
 			return -1;
 		}
 
-		ret = ioctl(vfio_container_fd,
-				VFIO_IOMMU_SPAPR_REGISTER_MEMORY, &reg);
+		ret = ioctl(cfg->container_fd, VFIO_IOMMU_SPAPR_REGISTER_MEMORY, &reg);
 		if (ret) {
 			EAL_LOG(ERR,
 				"Cannot register vaddr for IOMMU, error "
@@ -1586,7 +1540,7 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
 		dma_map.flags = VFIO_DMA_MAP_FLAG_READ |
 				VFIO_DMA_MAP_FLAG_WRITE;
 
-		ret = ioctl(vfio_container_fd, VFIO_IOMMU_MAP_DMA, &dma_map);
+		ret = ioctl(cfg->container_fd, VFIO_IOMMU_MAP_DMA, &dma_map);
 		if (ret) {
 			EAL_LOG(ERR, "Cannot map vaddr for IOMMU, error "
 					"%i (%s)", errno, strerror(errno));
@@ -1601,16 +1555,14 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
 		dma_unmap.size = len;
 		dma_unmap.iova = iova;
 
-		ret = ioctl(vfio_container_fd, VFIO_IOMMU_UNMAP_DMA,
-				&dma_unmap);
+		ret = ioctl(cfg->container_fd, VFIO_IOMMU_UNMAP_DMA, &dma_unmap);
 		if (ret) {
 			EAL_LOG(ERR, "Cannot unmap vaddr for IOMMU, error "
 					"%i (%s)", errno, strerror(errno));
 			return -1;
 		}
 
-		ret = ioctl(vfio_container_fd,
-				VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY, &reg);
+		ret = ioctl(cfg->container_fd, VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY, &reg);
 		if (ret) {
 			EAL_LOG(ERR,
 				"Cannot unregister vaddr for IOMMU, error "
@@ -1623,10 +1575,9 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova,
 }
 
 static int
-vfio_spapr_map_walk(const struct rte_memseg_list *msl,
-		const struct rte_memseg *ms, void *arg)
+vfio_spapr_map_walk(const struct rte_memseg_list *msl, const struct rte_memseg *ms, void *arg)
 {
-	int *vfio_container_fd = arg;
+	struct vfio_container *cfg = arg;
 
 	/* skip external memory that isn't a heap */
 	if (msl->external && !msl->heap)
@@ -1636,8 +1587,7 @@ vfio_spapr_map_walk(const struct rte_memseg_list *msl,
 	if (ms->iova == RTE_BAD_IOVA)
 		return 0;
 
-	return vfio_spapr_dma_do_map(*vfio_container_fd,
-		ms->addr_64, ms->iova, ms->len, 1);
+	return vfio_spapr_dma_do_map(cfg, ms->addr_64, ms->iova, ms->len, 1);
 }
 
 struct spapr_size_walk_param {
@@ -1782,7 +1732,7 @@ spapr_dma_win_size(void)
 }
 
 static int
-vfio_spapr_create_dma_window(int vfio_container_fd)
+vfio_spapr_create_dma_window(struct vfio_container *cfg)
 {
 	struct vfio_iommu_spapr_tce_create create = {
 		.argsz = sizeof(create), };
@@ -1796,7 +1746,7 @@ vfio_spapr_create_dma_window(int vfio_container_fd)
 	if (ret < 0)
 		return ret;
 
-	ret = ioctl(vfio_container_fd, VFIO_IOMMU_SPAPR_TCE_GET_INFO, &info);
+	ret = ioctl(cfg->container_fd, VFIO_IOMMU_SPAPR_TCE_GET_INFO, &info);
 	if (ret) {
 		EAL_LOG(ERR, "Cannot get IOMMU info, error %i (%s)",
 			errno, strerror(errno));
@@ -1809,7 +1759,7 @@ vfio_spapr_create_dma_window(int vfio_container_fd)
 	 * supports v2, remove the default DMA window so it can be resized.
 	 */
 	remove.start_addr = info.dma32_window_start;
-	ret = ioctl(vfio_container_fd, VFIO_IOMMU_SPAPR_TCE_REMOVE, &remove);
+	ret = ioctl(cfg->container_fd, VFIO_IOMMU_SPAPR_TCE_REMOVE, &remove);
 	if (ret)
 		return -1;
 
@@ -1817,7 +1767,7 @@ vfio_spapr_create_dma_window(int vfio_container_fd)
 	create.window_size = spapr_dma_win_len;
 	create.page_shift  = rte_ctz64(spapr_dma_win_page_sz);
 	create.levels = 1;
-	ret = ioctl(vfio_container_fd, VFIO_IOMMU_SPAPR_TCE_CREATE, &create);
+	ret = ioctl(cfg->container_fd, VFIO_IOMMU_SPAPR_TCE_CREATE, &create);
 #ifdef VFIO_IOMMU_SPAPR_INFO_DDW
 	/*
 	 * The vfio_iommu_spapr_tce_info structure was modified in
@@ -1833,8 +1783,7 @@ vfio_spapr_create_dma_window(int vfio_container_fd)
 		for (levels = create.levels + 1;
 			ret && levels <= info.ddw.levels; levels++) {
 			create.levels = levels;
-			ret = ioctl(vfio_container_fd,
-				VFIO_IOMMU_SPAPR_TCE_CREATE, &create);
+			ret = ioctl(cfg->container_fd, VFIO_IOMMU_SPAPR_TCE_CREATE, &create);
 		}
 	}
 #endif /* VFIO_IOMMU_SPAPR_INFO_DDW */
@@ -1856,20 +1805,18 @@ vfio_spapr_create_dma_window(int vfio_container_fd)
 }
 
 static int
-vfio_spapr_dma_mem_map(int vfio_container_fd, uint64_t vaddr,
-		uint64_t iova, uint64_t len, int do_map)
+vfio_spapr_dma_mem_map(struct vfio_container *cfg, uint64_t vaddr, uint64_t iova, uint64_t len,
+		int do_map)
 {
 	int ret = 0;
 
 	if (do_map) {
-		if (vfio_spapr_dma_do_map(vfio_container_fd,
-			vaddr, iova, len, 1)) {
+		if (vfio_spapr_dma_do_map(cfg, vaddr, iova, len, 1)) {
 			EAL_LOG(ERR, "Failed to map DMA");
 			ret = -1;
 		}
 	} else {
-		if (vfio_spapr_dma_do_map(vfio_container_fd,
-			vaddr, iova, len, 0)) {
+		if (vfio_spapr_dma_do_map(cfg, vaddr, iova, len, 0)) {
 			EAL_LOG(ERR, "Failed to unmap DMA");
 			ret = -1;
 		}
@@ -1879,42 +1826,40 @@ vfio_spapr_dma_mem_map(int vfio_container_fd, uint64_t vaddr,
 }
 
 static int
-vfio_spapr_dma_map(int vfio_container_fd)
+vfio_spapr_dma_map(struct vfio_container *cfg)
 {
-	if (vfio_spapr_create_dma_window(vfio_container_fd) < 0) {
+	if (vfio_spapr_create_dma_window(cfg) < 0) {
 		EAL_LOG(ERR, "Could not create new DMA window!");
 		return -1;
 	}
 
 	/* map all existing DPDK segments for DMA */
-	if (rte_memseg_walk(vfio_spapr_map_walk, &vfio_container_fd) < 0)
+	if (rte_memseg_walk(vfio_spapr_map_walk, cfg) < 0)
 		return -1;
 
 	return 0;
 }
 
 static int
-vfio_noiommu_dma_map(int __rte_unused vfio_container_fd)
+vfio_noiommu_dma_map(struct vfio_container *cfg __rte_unused)
 {
 	/* No-IOMMU mode does not need DMA mapping */
 	return 0;
 }
 
 static int
-vfio_noiommu_dma_mem_map(int __rte_unused vfio_container_fd,
-			 uint64_t __rte_unused vaddr,
-			 uint64_t __rte_unused iova, uint64_t __rte_unused len,
-			 int __rte_unused do_map)
+vfio_noiommu_dma_mem_map(struct vfio_container *cfg __rte_unused, uint64_t vaddr __rte_unused,
+		uint64_t iova __rte_unused, uint64_t len __rte_unused, int do_map __rte_unused)
 {
 	/* No-IOMMU mode does not need DMA mapping */
 	return 0;
 }
 
 static int
-vfio_dma_mem_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
-		uint64_t len, int do_map)
+vfio_dma_mem_map(struct vfio_container *cfg, uint64_t vaddr, uint64_t iova, uint64_t len,
+		int do_map)
 {
-	const struct vfio_iommu_type *t = vfio_cfg->vfio_iommu_type;
+	const struct vfio_iommu_type *t = cfg->vfio_iommu_type;
 
 	if (!t) {
 		EAL_LOG(ERR, "VFIO support not initialized");
@@ -1930,20 +1875,18 @@ vfio_dma_mem_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
 		return -1;
 	}
 
-	return t->dma_user_map_func(vfio_cfg->vfio_container_fd, vaddr, iova,
-			len, do_map);
+	return t->dma_user_map_func(cfg, vaddr, iova, len, do_map);
 }
 
 static int
-container_dma_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
-		uint64_t len)
+container_dma_map(struct vfio_container *cfg, uint64_t vaddr, uint64_t iova, uint64_t len)
 {
-	struct user_mem_map *new_map;
-	struct user_mem_maps *user_mem_maps;
+	struct vfio_user_mem_map *new_map;
+	struct vfio_user_mem_maps *user_mem_maps;
 	bool has_partial_unmap;
 	int ret = 0;
 
-	user_mem_maps = &vfio_cfg->mem_maps;
+	user_mem_maps = &cfg->mem_maps;
 	rte_spinlock_recursive_lock(&user_mem_maps->lock);
 	if (user_mem_maps->n_maps == RTE_DIM(user_mem_maps->maps)) {
 		EAL_LOG(ERR, "No more space for user mem maps");
@@ -1952,7 +1895,7 @@ container_dma_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
 		goto out;
 	}
 	/* map the entry */
-	if (vfio_dma_mem_map(vfio_cfg, vaddr, iova, len, 1)) {
+	if (vfio_dma_mem_map(cfg, vaddr, iova, len, 1)) {
 		/* technically, this will fail if there are currently no devices
 		 * plugged in, even if a device were added later, this mapping
 		 * might have succeeded. however, since we cannot verify if this
@@ -1965,7 +1908,7 @@ container_dma_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
 		goto out;
 	}
 	/* do we have partial unmap support? */
-	has_partial_unmap = vfio_cfg->vfio_iommu_type->partial_unmap;
+	has_partial_unmap = cfg->vfio_iommu_type->partial_unmap;
 
 	/* create new user mem map entry */
 	new_map = &user_mem_maps->maps[user_mem_maps->n_maps++];
@@ -1982,17 +1925,16 @@ container_dma_map(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
 }
 
 static int
-container_dma_unmap(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
-		uint64_t len)
+container_dma_unmap(struct vfio_container *cfg, uint64_t vaddr, uint64_t iova, uint64_t len)
 {
-	struct user_mem_map orig_maps[RTE_DIM(vfio_cfg->mem_maps.maps)];
-	struct user_mem_map new_maps[2]; /* can be at most 2 */
-	struct user_mem_maps *user_mem_maps;
+	struct vfio_user_mem_map orig_maps[RTE_DIM(cfg->mem_maps.maps)];
+	struct vfio_user_mem_map new_maps[2]; /* can be at most 2 */
+	struct vfio_user_mem_maps *user_mem_maps;
 	int n_orig, n_new, ret = 0;
 	bool has_partial_unmap;
 	unsigned int newlen;
 
-	user_mem_maps = &vfio_cfg->mem_maps;
+	user_mem_maps = &cfg->mem_maps;
 	rte_spinlock_recursive_lock(&user_mem_maps->lock);
 
 	/*
@@ -2024,7 +1966,7 @@ container_dma_unmap(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
 	}
 
 	/* do we have partial unmap capability? */
-	has_partial_unmap = vfio_cfg->vfio_iommu_type->partial_unmap;
+	has_partial_unmap = cfg->vfio_iommu_type->partial_unmap;
 
 	/*
 	 * if we don't support partial unmap, we must check if start and end of
@@ -2064,7 +2006,7 @@ container_dma_unmap(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
 	}
 
 	/* unmap the entry */
-	if (vfio_dma_mem_map(vfio_cfg, vaddr, iova, len, 0)) {
+	if (vfio_dma_mem_map(cfg, vaddr, iova, len, 0)) {
 		/* there may not be any devices plugged in, so unmapping will
 		 * fail with ENODEV/ENOTSUP rte_errno values, but that doesn't
 		 * stop us from removing the mapping, as the assumption is we
@@ -2134,31 +2076,31 @@ dev_vfio_container_create(void)
 		return -1;
 
 	/* Find an empty slot to store new vfio config */
-	for (i = 1; i < RTE_DIM(vfio_cfgs); i++) {
-		if (vfio_cfgs[i].vfio_container_fd == -1)
+	for (i = 1; i < RTE_DIM(vfio_containers); i++) {
+		if (vfio_containers[i].container_fd == -1)
 			break;
 	}
 
-	if (i == RTE_DIM(vfio_cfgs)) {
+	if (i == RTE_DIM(vfio_containers)) {
 		EAL_LOG(ERR, "Exceed max VFIO container limit");
 		return -1;
 	}
 
 	/* Create a new container fd */
-	vfio_cfgs[i].vfio_container_fd = vfio_open_container_fd(false);
-	if (vfio_cfgs[i].vfio_container_fd < 0) {
+	vfio_containers[i].container_fd = vfio_open_container_fd(false);
+	if (vfio_containers[i].container_fd < 0) {
 		EAL_LOG(NOTICE, "Fail to create a new VFIO container");
 		return -1;
 	}
 
-	return vfio_cfgs[i].vfio_container_fd;
+	return vfio_containers[i].container_fd;
 }
 
 RTE_EXPORT_INTERNAL_SYMBOL(dev_vfio_container_destroy)
 int
 dev_vfio_container_destroy(int container_fd)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 	unsigned int i;
 
 	if (!vfio_enabled)
@@ -2169,21 +2111,21 @@ dev_vfio_container_destroy(int container_fd)
 		return -1;
 	}
 
-	vfio_cfg = get_vfio_cfg_by_container_fd(container_fd);
-	if (vfio_cfg == NULL) {
+	cfg = get_vfio_cfg_by_container_fd(container_fd);
+	if (cfg == NULL) {
 		EAL_LOG(ERR, "Invalid VFIO container fd");
 		return -1;
 	}
 
-	for (i = 0; i < RTE_DIM(vfio_cfg->vfio_groups); i++)
-		if (vfio_cfg->vfio_groups[i].group_num != -1)
+	for (i = 0; i < RTE_DIM(cfg->vfio_groups); i++)
+		if (cfg->vfio_groups[i].group_num != -1)
 			vfio_container_group_unbind(container_fd,
-				vfio_cfg->vfio_groups[i].group_num);
+				cfg->vfio_groups[i].group_num);
 
 	close(container_fd);
-	vfio_cfg->vfio_container_fd = -1;
-	vfio_cfg->vfio_active_groups = 0;
-	vfio_cfg->vfio_iommu_type = NULL;
+	cfg->container_fd = -1;
+	cfg->vfio_active_groups = 0;
+	cfg->vfio_iommu_type = NULL;
 
 	return 0;
 }
@@ -2218,39 +2160,39 @@ dev_vfio_container_assign_device(int vfio_container_fd, const char *sysfs_base,
 static int
 vfio_container_group_bind(int container_fd, int iommu_group_num)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 
 	if (!vfio_enabled)
 		return -1;
 
-	vfio_cfg = get_vfio_cfg_by_container_fd(container_fd);
-	if (vfio_cfg == NULL) {
+	cfg = get_vfio_cfg_by_container_fd(container_fd);
+	if (cfg == NULL) {
 		EAL_LOG(ERR, "Invalid VFIO container fd");
 		return -1;
 	}
 
-	return vfio_get_group_fd(vfio_cfg, iommu_group_num);
+	return vfio_get_group_fd(cfg, iommu_group_num);
 }
 
 static int
 vfio_container_group_unbind(int container_fd, int iommu_group_num)
 {
 	struct vfio_group *cur_grp = NULL;
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 	unsigned int i;
 
 	if (!vfio_enabled)
 		return -1;
 
-	vfio_cfg = get_vfio_cfg_by_container_fd(container_fd);
-	if (vfio_cfg == NULL) {
+	cfg = get_vfio_cfg_by_container_fd(container_fd);
+	if (cfg == NULL) {
 		EAL_LOG(ERR, "Invalid VFIO container fd");
 		return -1;
 	}
 
-	for (i = 0; i < RTE_DIM(vfio_cfg->vfio_groups); i++) {
-		if (vfio_cfg->vfio_groups[i].group_num == iommu_group_num) {
-			cur_grp = &vfio_cfg->vfio_groups[i];
+	for (i = 0; i < RTE_DIM(cfg->vfio_groups); i++) {
+		if (cfg->vfio_groups[i].group_num == iommu_group_num) {
+			cur_grp = &cfg->vfio_groups[i];
 			break;
 		}
 	}
@@ -2270,7 +2212,7 @@ vfio_container_group_unbind(int container_fd, int iommu_group_num)
 	cur_grp->group_num = -1;
 	cur_grp->fd = -1;
 	cur_grp->devices = 0;
-	vfio_cfg->vfio_active_groups--;
+	cfg->vfio_active_groups--;
 
 	return 0;
 }
@@ -2280,7 +2222,7 @@ int
 dev_vfio_container_dma_map(int container_fd, uint64_t vaddr, uint64_t iova,
 		uint64_t len)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 
 	if (!vfio_enabled)
 		return -1;
@@ -2290,13 +2232,13 @@ dev_vfio_container_dma_map(int container_fd, uint64_t vaddr, uint64_t iova,
 		return -1;
 	}
 
-	vfio_cfg = get_vfio_cfg_by_container_fd(container_fd);
-	if (vfio_cfg == NULL) {
+	cfg = get_vfio_cfg_by_container_fd(container_fd);
+	if (cfg == NULL) {
 		EAL_LOG(ERR, "Invalid VFIO container fd");
 		return -1;
 	}
 
-	return container_dma_map(vfio_cfg, vaddr, iova, len);
+	return container_dma_map(cfg, vaddr, iova, len);
 }
 
 RTE_EXPORT_INTERNAL_SYMBOL(dev_vfio_container_dma_unmap)
@@ -2304,7 +2246,7 @@ int
 dev_vfio_container_dma_unmap(int container_fd, uint64_t vaddr, uint64_t iova,
 		uint64_t len)
 {
-	struct vfio_config *vfio_cfg;
+	struct vfio_container *cfg;
 
 	if (!vfio_enabled)
 		return -1;
@@ -2314,22 +2256,22 @@ dev_vfio_container_dma_unmap(int container_fd, uint64_t vaddr, uint64_t iova,
 		return -1;
 	}
 
-	vfio_cfg = get_vfio_cfg_by_container_fd(container_fd);
-	if (vfio_cfg == NULL) {
+	cfg = get_vfio_cfg_by_container_fd(container_fd);
+	if (cfg == NULL) {
 		EAL_LOG(ERR, "Invalid VFIO container fd");
 		return -1;
 	}
 
-	return container_dma_unmap(vfio_cfg, vaddr, iova, len);
+	return container_dma_unmap(cfg, vaddr, iova, len);
 }
 
 static int
-vfio_cleanup_config(struct vfio_config *vfio_cfg)
+vfio_cleanup_config(struct vfio_container *cfg)
 {
 	unsigned int i;
 
-	for (i = 0; i < RTE_DIM(vfio_cfg->vfio_groups); i++) {
-		struct vfio_group *group = &vfio_cfg->vfio_groups[i];
+	for (i = 0; i < RTE_DIM(cfg->vfio_groups); i++) {
+		struct vfio_group *group = &cfg->vfio_groups[i];
 
 		if (group->group_num == -1)
 			continue;
@@ -2347,26 +2289,26 @@ vfio_cleanup_config(struct vfio_config *vfio_cfg)
 		group->group_num = -1;
 		group->fd = -1;
 		group->devices = 0;
-		vfio_cfg->vfio_active_groups--;
+		cfg->vfio_active_groups--;
 	}
 
 	/* if there are still active groups, we cannot cleanup the container */
-	if (vfio_cfg->vfio_active_groups != 0) {
+	if (cfg->vfio_active_groups != 0) {
 		EAL_LOG(ERR, "Cannot cleanup VFIO container with %d active groups",
-			vfio_cfg->vfio_active_groups);
+			cfg->vfio_active_groups);
 		return -1;
 	}
 
-	if (vfio_cfg->vfio_container_fd >= 0 && close(vfio_cfg->vfio_container_fd) < 0) {
+	if (cfg->container_fd >= 0 && close(cfg->container_fd) < 0) {
 		EAL_LOG(ERR, "Cannot close VFIO container: %s", strerror(errno));
 		return -1;
 	}
 
-	vfio_cfg->vfio_container_fd = -1;
-	vfio_cfg->vfio_iommu_type = NULL;
+	cfg->container_fd = -1;
+	cfg->vfio_iommu_type = NULL;
 
-	vfio_cfg->mem_maps.n_maps = 0;
-	memset(vfio_cfg->mem_maps.maps, 0, sizeof(vfio_cfg->mem_maps.maps));
+	cfg->mem_maps.n_maps = 0;
+	memset(cfg->mem_maps.maps, 0, sizeof(cfg->mem_maps.maps));
 
 	return 0;
 }
@@ -2388,9 +2330,9 @@ dev_vfio_cleanup(void)
 		rte_mem_event_callback_unregister(VFIO_MEM_EVENT_CLB_NAME, NULL);
 
 	/* cleanup all initialized configs */
-	for (i = 0; i < RTE_DIM(vfio_cfgs); i++) {
-		if (vfio_cfgs[i].vfio_container_fd != -1)
-			stuck |= vfio_cleanup_config(&vfio_cfgs[i]) != 0;
+	for (i = 0; i < RTE_DIM(vfio_containers); i++) {
+		if (vfio_containers[i].container_fd != -1)
+			stuck |= vfio_cleanup_config(&vfio_containers[i]) != 0;
 	}
 
 	/* failed to deinitialize some configs, so don't set VFIO as disabled */
diff --git a/lib/eal/linux/eal_vfio.h b/lib/eal/linux/eal_vfio.h
index 30389fb274..cd37790ad2 100644
--- a/lib/eal/linux/eal_vfio.h
+++ b/lib/eal/linux/eal_vfio.h
@@ -9,6 +9,28 @@
 
 #include <stdint.h>
 
+/* hot plug/unplug of VFIO groups may cause all DMA maps to be dropped. we can
+ * recreate the mappings for DPDK segments, but we cannot do so for memory that
+ * was registered by the user themselves, so we need to store the user mappings
+ * somewhere, to recreate them later.
+ */
+#define EAL_VFIO_MAX_USER_MEM_MAPS 256
+
+/* user memory map entry */
+struct vfio_user_mem_map {
+	uint64_t addr;  /**< start VA */
+	uint64_t iova;  /**< start IOVA */
+	uint64_t len;   /**< total length of the mapping */
+	uint64_t chunk; /**< this mapping can be split in chunks of this size */
+};
+
+/* user memory maps container (common for all API modes) */
+struct vfio_user_mem_maps {
+	rte_spinlock_recursive_t lock;
+	int n_maps;
+	struct vfio_user_mem_map maps[EAL_VFIO_MAX_USER_MEM_MAPS];
+};
+
 /*
  * we don't need to store device fd's anywhere since they can be obtained from
  * the group fd via an ioctl() call.
@@ -19,18 +41,26 @@ struct vfio_group {
 	int devices;
 };
 
+struct vfio_container {
+	int container_fd;
+	int vfio_active_groups;
+	const struct vfio_iommu_type *vfio_iommu_type;
+	struct vfio_group vfio_groups[RTE_MAX_VFIO_GROUPS];
+	struct vfio_user_mem_maps mem_maps;
+};
+
 /* DMA mapping function prototype.
- * Takes VFIO container fd as a parameter.
+ * Takes VFIO container config as a parameter.
  * Returns 0 on success, -1 on error.
  */
-typedef int (*vfio_dma_func_t)(int);
+typedef int (*vfio_dma_func_t)(struct vfio_container *cfg);
 
 /* Custom memory region DMA mapping function prototype.
- * Takes VFIO container fd, virtual address, physical address, length and
+ * Takes VFIO container config, virtual address, physical address, length and
  * operation type (0 to unmap 1 for map) as a parameters.
  * Returns 0 on success, -1 on error.
  */
-typedef int (*vfio_dma_user_func_t)(int fd, uint64_t vaddr, uint64_t iova,
+typedef int (*vfio_dma_user_func_t)(struct vfio_container *cfg, uint64_t vaddr, uint64_t iova,
 		uint64_t len, int do_map);
 
 struct vfio_iommu_type {
@@ -62,12 +92,12 @@ void vfio_mp_sync_cleanup(void);
 
 #define EAL_VFIO_MP "eal_vfio_mp_sync"
 
-#define SOCKET_REQ_CONTAINER 0x100
-#define SOCKET_REQ_GROUP 0x200
-#define SOCKET_REQ_IOMMU_TYPE 0x400
-#define SOCKET_OK 0x0
-#define SOCKET_NO_FD 0x1
-#define SOCKET_ERR 0xFF
+#define VFIO_SOCKET_REQ_CONTAINER 0x100
+#define VFIO_SOCKET_REQ_GROUP 0x200
+#define VFIO_SOCKET_REQ_IOMMU_TYPE 0x400
+#define VFIO_SOCKET_OK 0x0
+#define VFIO_SOCKET_NO_FD 0x1
+#define VFIO_SOCKET_ERR 0xFF
 
 struct vfio_mp_param {
 	int req;
diff --git a/lib/eal/linux/eal_vfio_mp_sync.c b/lib/eal/linux/eal_vfio_mp_sync.c
index 66341a701a..f394f3d227 100644
--- a/lib/eal/linux/eal_vfio_mp_sync.c
+++ b/lib/eal/linux/eal_vfio_mp_sync.c
@@ -31,46 +31,46 @@ vfio_mp_primary(const struct rte_mp_msg *msg, const void *peer)
 	memset(&reply, 0, sizeof(reply));
 
 	switch (m->req) {
-	case SOCKET_REQ_GROUP:
-		r->req = SOCKET_REQ_GROUP;
+	case VFIO_SOCKET_REQ_GROUP:
+		r->req = VFIO_SOCKET_REQ_GROUP;
 		r->group_num = m->group_num;
 		fd = vfio_get_group_fd_by_num(m->group_num);
 		if (fd < 0 && fd != -ENOENT)
-			r->result = SOCKET_ERR;
+			r->result = VFIO_SOCKET_ERR;
 		else if (fd == -ENOENT)
 			/* if VFIO group exists but isn't bound to VFIO driver */
-			r->result = SOCKET_NO_FD;
+			r->result = VFIO_SOCKET_NO_FD;
 		else {
 			/* if group exists and is bound to VFIO driver */
-			r->result = SOCKET_OK;
+			r->result = VFIO_SOCKET_OK;
 			reply.num_fds = 1;
 			reply.fds[0] = fd;
 		}
 		break;
-	case SOCKET_REQ_CONTAINER:
-		r->req = SOCKET_REQ_CONTAINER;
+	case VFIO_SOCKET_REQ_CONTAINER:
+		r->req = VFIO_SOCKET_REQ_CONTAINER;
 		fd = dev_vfio_get_container_fd();
 		if (fd < 0)
-			r->result = SOCKET_ERR;
+			r->result = VFIO_SOCKET_ERR;
 		else {
-			r->result = SOCKET_OK;
+			r->result = VFIO_SOCKET_OK;
 			reply.num_fds = 1;
 			reply.fds[0] = fd;
 		}
 		break;
-	case SOCKET_REQ_IOMMU_TYPE:
+	case VFIO_SOCKET_REQ_IOMMU_TYPE:
 	{
 		int iommu_type_id;
 
-		r->req = SOCKET_REQ_IOMMU_TYPE;
+		r->req = VFIO_SOCKET_REQ_IOMMU_TYPE;
 
 		iommu_type_id = vfio_get_iommu_type();
 
 		if (iommu_type_id < 0)
-			r->result = SOCKET_ERR;
+			r->result = VFIO_SOCKET_ERR;
 		else {
 			r->iommu_type_id = iommu_type_id;
-			r->result = SOCKET_OK;
+			r->result = VFIO_SOCKET_OK;
 		}
 		break;
 	}
-- 
2.54.0


  parent reply	other threads:[~2026-10-07  7:34 UTC|newest]

Thread overview: 385+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <cover.1763141462.git.anatoly.burakov@intel.com>
2025-11-18 16:29 ` [PATCH v3 00/20] Support VFIO cdev API in DPDK Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 01/20] doc: add deprecation notice for VFIO API Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 02/20] doc: add deprecation notice for vDPA driver API Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 03/20] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2025-11-18 17:36     ` Stephen Hemminger
2025-11-18 16:29   ` [PATCH v3 04/20] vfio: make all functions internal Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 05/20] vfio: split get device info from setup Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 06/20] vfio: add container device assignment API Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 07/20] net/nbl: do not use VFIO group bind API Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 08/20] net/ntnic: use container device assignment API Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 09/20] vdpa/ifc: " Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 10/20] vdpa/nfp: " Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 11/20] vdpa/sfc: " Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 12/20] vhost: remove group-related API from drivers Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 13/20] vfio: remove group-based API Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 14/20] vfio: cleanup and refactor Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 15/20] bus/pci: use the new VFIO mode API Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 16/20] bus/fslmc: " Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 17/20] net/hinic3: " Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 18/20] net/ntnic: " Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 19/20] vfio: remove no-IOMMU check API Anatoly Burakov
2025-11-18 16:29   ` [PATCH v3 20/20] vfio: introduce cdev mode Anatoly Burakov
2026-02-26 14:17 ` [PATCH v7 00/18] Support VFIO cdev API in DPDK Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 01/18] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 02/18] vfio: make all functions internal Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 03/18] vfio: split get device info from setup Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 04/18] vfio: add container device assignment API Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 05/18] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 06/18] net/ntnic: use container device assignment API Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 07/18] vdpa/ifc: " Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 08/18] vdpa/nfp: " Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 09/18] vdpa/sfc: " Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 10/18] vhost: remove group-related API from drivers Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 11/18] vfio: remove group-based API Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 12/18] vfio: cleanup and refactor Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 13/18] bus/pci: use the new VFIO mode API Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 14/18] bus/fslmc: " Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 15/18] net/hinic3: " Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 16/18] net/ntnic: " Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 17/18] vfio: remove no-IOMMU check API Anatoly Burakov
2026-02-26 14:17   ` [PATCH v7 18/18] vfio: introduce cdev mode Anatoly Burakov
2026-05-01 22:45   ` [PATCH v7 00/18] Support VFIO cdev API in DPDK Stephen Hemminger
2026-06-11 15:08 ` [PATCH v8 " Anatoly Burakov
2026-06-11 15:08   ` [PATCH v8 01/18] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-06-11 15:08   ` [PATCH v8 02/18] vfio: make all functions internal Anatoly Burakov
2026-06-11 15:08   ` [PATCH v8 03/18] vfio: split get device info from setup Anatoly Burakov
2026-06-11 15:08   ` [PATCH v8 04/18] vfio: add container device assignment API Anatoly Burakov
2026-06-11 15:08   ` [PATCH v8 05/18] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-06-11 15:08   ` [PATCH v8 06/18] net/ntnic: use container device assignment API Anatoly Burakov
2026-06-11 15:08   ` [PATCH v8 07/18] vdpa/ifc: " Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 08/18] vdpa/nfp: " Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 09/18] vdpa/sfc: " Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 10/18] vhost: remove group-related API from drivers Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 11/18] vfio: remove group-based API Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 12/18] vfio: cleanup and refactor Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 13/18] bus/pci: use the new VFIO mode API Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 14/18] bus/fslmc: " Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 15/18] net/hinic3: " Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 16/18] net/ntnic: " Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 17/18] vfio: remove no-IOMMU check API Anatoly Burakov
2026-06-11 15:09   ` [PATCH v8 18/18] vfio: introduce cdev mode Anatoly Burakov
2026-06-11 17:49   ` [PATCH v8 00/18] Support VFIO cdev API in DPDK Stephen Hemminger
2026-08-05 13:45 ` [PATCH v9 00/19] " Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 01/19] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 02/19] vfio: make all functions internal Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 03/19] vfio: split get device info from setup Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 04/19] vfio: add container device assignment API Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 05/19] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 06/19] net/ntnic: use container device assignment API Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 07/19] vdpa/ifc: " Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 08/19] vdpa/nfp: " Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 09/19] vdpa/sfc: " Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 10/19] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 11/19] vhost: remove group-related API from driver Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 12/19] vfio: remove group-based API Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 13/19] vfio: cleanup and refactor Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 14/19] bus/pci: use the new VFIO mode API Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 15/19] bus/fslmc: " Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 16/19] net/hinic3: " Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 17/19] net/ntnic: " Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 18/19] vfio: remove no-IOMMU check API Anatoly Burakov
2026-08-05 13:45   ` [PATCH v9 19/19] vfio: introduce cdev mode Anatoly Burakov
2026-08-06  3:52   ` [PATCH v9 00/19] Support VFIO cdev API in DPDK Stephen Hemminger
2026-08-06 14:11 ` [PATCH v10 00/20] " Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 01/20] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 02/20] vfio: make all functions internal Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 03/20] bus/pci: rename mismatching error labels Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 04/20] vfio: split get device info from setup Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 05/20] vfio: add container device assignment API Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 06/20] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 07/20] net/ntnic: use container device assignment API Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 08/20] vdpa/ifc: " Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 09/20] vdpa/nfp: " Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 10/20] vdpa/sfc: " Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 11/20] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 12/20] vhost: remove group-related API from driver Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 13/20] vfio: remove group-based API Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 14/20] vfio: cleanup and refactor Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 15/20] bus/pci: use the new VFIO mode API Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 16/20] bus/fslmc: " Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 17/20] net/hinic3: " Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 18/20] net/ntnic: " Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 19/20] vfio: remove no-IOMMU check API Anatoly Burakov
2026-08-06 14:11   ` [PATCH v10 20/20] vfio: introduce cdev mode Anatoly Burakov
2026-08-06 17:13   ` [PATCH v10 00/20] Support VFIO cdev API in DPDK Stephen Hemminger
2026-08-07 14:46 ` [PATCH v11 " Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 01/20] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 02/20] vfio: make all functions internal Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 03/20] bus/pci: rename mismatching error labels Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 04/20] vfio: split get device info from setup Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 05/20] vfio: add container device assignment API Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 06/20] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 07/20] net/ntnic: use container device assignment API Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 08/20] vdpa/ifc: " Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 09/20] vdpa/nfp: " Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 10/20] vdpa/sfc: " Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 11/20] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 12/20] vhost: remove group-related API from driver Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 13/20] vfio: remove group-based API Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 14/20] vfio: cleanup and refactor Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 15/20] bus/pci: use the new VFIO mode API Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 16/20] bus/fslmc: " Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 17/20] net/hinic3: " Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 18/20] net/ntnic: " Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 19/20] vfio: remove no-IOMMU check API Anatoly Burakov
2026-08-07 14:46   ` [PATCH v11 20/20] vfio: introduce cdev mode Anatoly Burakov
2026-08-11  0:30   ` [PATCH v11 00/20] Support VFIO cdev API in DPDK Stephen Hemminger
2026-08-25 13:20 ` [PATCH v12 " Anatoly Burakov
2026-08-25 13:20   ` [PATCH v12 01/20] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-08-25 14:08     ` Stephen Hemminger
2026-08-25 13:20   ` [PATCH v12 02/20] vfio: make all functions internal Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 03/20] bus/pci: rename mismatching error labels Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 04/20] vfio: split get device info from setup Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 05/20] vfio: add container device assignment API Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 06/20] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 07/20] net/ntnic: use container device assignment API Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 08/20] vdpa/ifc: " Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 09/20] vdpa/nfp: " Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 10/20] vdpa/sfc: " Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 11/20] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 12/20] vhost: remove group-related API from driver Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 13/20] vfio: remove group-based API Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 14/20] vfio: cleanup and refactor Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 15/20] bus/pci: use the new VFIO mode API Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 16/20] bus/fslmc: " Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 17/20] net/hinic3: " Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 18/20] net/ntnic: " Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 19/20] vfio: remove no-IOMMU check API Anatoly Burakov
2026-08-25 13:21   ` [PATCH v12 20/20] vfio: introduce cdev mode Anatoly Burakov
2026-08-25 14:17   ` [PATCH v12 00/20] Support VFIO cdev API in DPDK Stephen Hemminger
2026-08-26 10:09     ` Burakov, Anatoly
2026-08-27 15:14 ` [PATCH v13 00/24] " Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 01/24] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 02/24] vfio: make all functions internal Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 03/24] bus/fslmc: decouple from EAL VFIO Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 04/24] vfio: decouple EAL from VFIO internals Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 05/24] vfio: do proper teardown on VFIO cleanup Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 06/24] vfio: rename API to reflect internal status Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 07/24] bus/pci: rename mismatching error labels Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 08/24] vfio: split get device info from setup Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 09/24] vfio: add container device assignment API Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 10/24] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 11/24] net/ntnic: use container device assignment API Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 12/24] vdpa/ifc: " Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 13/24] vdpa/nfp: " Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 14/24] vdpa/sfc: " Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 15/24] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 16/24] vhost: remove group-related API from driver Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 17/24] vfio: remove group-based API Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 18/24] vfio: cleanup and refactor Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 19/24] bus/pci: use the new VFIO mode API Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 20/24] bus/fslmc: " Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 21/24] net/hinic3: " Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 22/24] net/ntnic: " Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 23/24] vfio: remove no-IOMMU check API Anatoly Burakov
2026-08-27 15:14   ` [PATCH v13 24/24] vfio: introduce cdev mode Anatoly Burakov
2026-08-28 13:06 ` [PATCH v14 00/25] Support VFIO cdev API in DPDK Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 01/25] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 02/25] vfio: make all functions internal Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 03/25] bus/fslmc: decouple from EAL VFIO Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 04/25] vfio: decouple EAL from VFIO internals Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 05/25] vfio: do proper teardown on VFIO cleanup Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 06/25] vfio: remove modname parameter from init Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 07/25] vfio: rename API to reflect internal status Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 08/25] bus/pci: rename mismatching error labels Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 09/25] vfio: split get device info from setup Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 10/25] vfio: add container device assignment API Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 11/25] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 12/25] net/ntnic: use container device assignment API Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 13/25] vdpa/ifc: " Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 14/25] vdpa/nfp: " Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 15/25] vdpa/sfc: " Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 16/25] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 17/25] vhost: remove group-related API from driver Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 18/25] vfio: remove group-based API Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 19/25] vfio: cleanup and refactor Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 20/25] bus/pci: use the new VFIO mode API Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 21/25] bus/fslmc: " Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 22/25] net/hinic3: " Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 23/25] net/ntnic: " Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 24/25] vfio: remove no-IOMMU check API Anatoly Burakov
2026-08-28 13:06   ` [PATCH v14 25/25] vfio: introduce cdev mode Anatoly Burakov
2026-08-28 13:32   ` [PATCH v14 00/25] Support VFIO cdev API in DPDK Burakov, Anatoly
2026-09-01 16:15 ` [PATCH v15 " Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 01/25] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 02/25] vfio: make all functions internal Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 03/25] bus/fslmc: decouple from EAL VFIO Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 04/25] vfio: decouple EAL from VFIO internals Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 05/25] vfio: do proper teardown on VFIO cleanup Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 06/25] vfio: remove modname parameter from init Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 07/25] vfio: rename API to reflect internal status Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 08/25] bus/pci: rename mismatching error labels Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 09/25] vfio: split get device info from setup Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 10/25] vfio: add container device assignment API Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 11/25] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 12/25] net/ntnic: use container device assignment API Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 13/25] vdpa/ifc: " Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 14/25] vdpa/nfp: " Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 15/25] vdpa/sfc: " Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 16/25] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 17/25] vhost: remove group-related API from driver Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 18/25] vfio: remove group-based API Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 19/25] vfio: cleanup and refactor Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 20/25] bus/pci: use the new VFIO IOMMU mode API Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 21/25] bus/fslmc: " Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 22/25] net/hinic3: " Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 23/25] net/ntnic: " Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 24/25] vfio: remove no-IOMMU check API Anatoly Burakov
2026-09-01 16:15   ` [PATCH v15 25/25] vfio: introduce cdev mode Anatoly Burakov
2026-09-09 10:01 ` [PATCH v16 00/26] Support VFIO cdev API in DPDK Anatoly Burakov
2026-09-09 10:01   ` [PATCH v16 01/26] net/nbl: fix use-after-free Anatoly Burakov
2026-09-09 11:51     ` Burakov, Anatoly
2026-09-09 10:01   ` [PATCH v16 02/26] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-09-09 10:01   ` [PATCH v16 03/26] vfio: make all functions internal Anatoly Burakov
2026-09-09 10:01   ` [PATCH v16 04/26] bus/fslmc: decouple from EAL VFIO Anatoly Burakov
2026-09-09 10:01   ` [PATCH v16 05/26] vfio: decouple EAL from VFIO internals Anatoly Burakov
2026-09-09 10:01   ` [PATCH v16 06/26] vfio: do proper teardown on VFIO cleanup Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 07/26] vfio: remove modname parameter from init Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 08/26] vfio: rename API to reflect internal status Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 09/26] bus/pci: rename mismatching error labels Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 10/26] vfio: split get device info from setup Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 11/26] vfio: add container device assignment API Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 12/26] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-09-09 11:22     ` Burakov, Anatoly
2026-09-09 10:02   ` [PATCH v16 13/26] net/ntnic: use container device assignment API Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 14/26] vdpa/ifc: " Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 15/26] vdpa/nfp: " Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 16/26] vdpa/sfc: " Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 17/26] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 18/26] vhost: remove group-related API from driver Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 19/26] vfio: remove group-based API Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 20/26] vfio: cleanup and refactor Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 21/26] bus/pci: use the new VFIO IOMMU mode API Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 22/26] bus/fslmc: " Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 23/26] net/hinic3: " Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 24/26] net/ntnic: " Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 25/26] vfio: remove no-IOMMU check API Anatoly Burakov
2026-09-09 10:02   ` [PATCH v16 26/26] vfio: introduce cdev mode Anatoly Burakov
2026-09-10 12:52 ` [PATCH v17 00/26] Support VFIO cdev API in DPDK Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 01/26] net/nbl: fix use-after-free Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 02/26] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 03/26] vfio: make all functions internal Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 04/26] bus/fslmc: decouple from EAL VFIO Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 05/26] vfio: decouple EAL from VFIO internals Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 06/26] vfio: do proper teardown on VFIO cleanup Anatoly Burakov
2026-09-15 15:25     ` David Marchand
2026-09-16 11:10       ` Burakov, Anatoly
2026-09-10 12:52   ` [PATCH v17 07/26] vfio: remove modname parameter from init Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 08/26] vfio: rename API to reflect internal status Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 09/26] bus/pci: rename mismatching error labels Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 10/26] vfio: split get device info from setup Anatoly Burakov
2026-09-15 15:24     ` David Marchand
2026-09-16 11:14       ` Burakov, Anatoly
2026-09-10 12:52   ` [PATCH v17 11/26] vfio: add container device assignment API Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 12/26] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 13/26] net/ntnic: use container device assignment API Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 14/26] vdpa/ifc: " Anatoly Burakov
2026-09-10 12:52   ` [PATCH v17 15/26] vdpa/nfp: " Anatoly Burakov
2026-09-10 12:53   ` [PATCH v17 16/26] vdpa/sfc: " Anatoly Burakov
2026-09-10 12:53   ` [PATCH v17 17/26] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-09-10 12:53   ` [PATCH v17 18/26] vhost: remove group-related API from driver Anatoly Burakov
2026-09-10 12:53   ` [PATCH v17 19/26] vfio: remove group-based API Anatoly Burakov
2026-09-10 12:53   ` [PATCH v17 20/26] vfio: cleanup and refactor Anatoly Burakov
2026-09-16  9:42     ` David Marchand
2026-09-16 11:19       ` Burakov, Anatoly
2026-09-22  8:02         ` David Marchand
2026-09-23  9:22           ` Burakov, Anatoly
2026-09-10 12:53   ` [PATCH v17 21/26] bus/pci: use the new VFIO IOMMU mode API Anatoly Burakov
2026-09-10 12:53   ` [PATCH v17 22/26] bus/fslmc: " Anatoly Burakov
2026-09-16  7:44     ` David Marchand
2026-09-16 11:20       ` Burakov, Anatoly
2026-09-10 12:53   ` [PATCH v17 23/26] net/hinic3: " Anatoly Burakov
2026-09-10 12:53   ` [PATCH v17 24/26] net/ntnic: " Anatoly Burakov
2026-09-10 12:53   ` [PATCH v17 25/26] vfio: remove no-IOMMU check API Anatoly Burakov
2026-09-10 12:53   ` [PATCH v17 26/26] vfio: introduce cdev mode Anatoly Burakov
2026-09-15 14:32   ` [PATCH v17 00/26] Support VFIO cdev API in DPDK David Marchand
2026-09-16 11:06     ` Burakov, Anatoly
2026-09-24 16:13 ` [PATCH v18 00/29] " Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 01/29] uapi: update to v6.17 and add iommufd.h Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 02/29] vfio: make all functions internal Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 03/29] bus/fslmc: decouple from EAL VFIO Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 04/29] vfio: decouple EAL from VFIO internals Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 05/29] vhost: check DMA capability only once Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 06/29] vfio: do proper teardown on VFIO cleanup Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 07/29] eal: move kernel module check function into VFIO Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 08/29] vfio: remove modname parameter from init Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 09/29] vfio: add module check API Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 10/29] bus/pci: decouple PCI bus driver from VFIO Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 11/29] vfio: rename API to reflect internal status Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 12/29] bus/pci: rename mismatching error labels Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 13/29] vfio: split get device info from setup Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 14/29] vfio: add container device assignment API Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 15/29] net/nbl: do not use VFIO group bind API Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 16/29] net/ntnic: use container device assignment API Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 17/29] vdpa/ifc: " Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 18/29] vdpa/nfp: " Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 19/29] vdpa/sfc: " Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 20/29] vdpa/mlx5: remove group-related API Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 21/29] vhost: remove group-related API from driver Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 22/29] vfio: remove group-based API Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 23/29] vfio: cleanup and refactor Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 24/29] bus/pci: use the new VFIO IOVA mode API Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 25/29] bus/fslmc: " Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 26/29] net/hinic3: " Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 27/29] net/ntnic: " Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 28/29] vfio: remove no-IOMMU check API Anatoly Burakov
2026-09-24 16:13   ` [PATCH v18 29/29] vfio: introduce cdev mode Anatoly Burakov
2026-10-07  7:31 ` [PATCH v19 00/26] Support VFIO cdev API in DPDK David Marchand
2026-10-07  7:31   ` [PATCH v19 01/26] vhost: check DMA capability only once David Marchand
2026-10-07  7:31   ` [PATCH v19 02/26] bus/fslmc: decouple from EAL VFIO David Marchand
2026-10-07  7:31   ` [PATCH v19 03/26] bus/pci: rename mismatching error labels David Marchand
2026-10-07  7:31   ` [PATCH v19 04/26] bus/pci: move VFIO concerns in Linux implementation David Marchand
2026-10-07 10:54     ` Burakov, Anatoly
2026-10-07  7:31   ` [PATCH v19 05/26] eal: provide VFIO only for Linux David Marchand
2026-10-07 10:55     ` Burakov, Anatoly
2026-10-07  7:31   ` [PATCH v19 06/26] vfio: make all functions internal David Marchand
2026-10-07  7:31   ` [PATCH v19 07/26] vfio: add module check API David Marchand
2026-10-07  7:31   ` [PATCH v19 08/26] vfio: teardown internals on VFIO cleanup David Marchand
2026-10-07  7:31   ` [PATCH v19 09/26] vfio: split get device info from setup David Marchand
2026-10-07  7:31   ` [PATCH v19 10/26] vfio: add container device assignment API David Marchand
2026-10-07  7:31   ` [PATCH v19 11/26] net/nbl: do not use VFIO group bind API David Marchand
2026-10-07  7:31   ` [PATCH v19 12/26] net/ntnic: use container device assignment API David Marchand
2026-10-07  7:31   ` [PATCH v19 13/26] vdpa/ifc: " David Marchand
2026-10-07  7:31   ` [PATCH v19 14/26] vdpa/nfp: " David Marchand
2026-10-07  7:31   ` [PATCH v19 15/26] vdpa/sfc: " David Marchand
2026-10-07  7:31   ` [PATCH v19 16/26] vhost: remove group-related API from driver David Marchand
2026-10-07  7:31   ` [PATCH v19 17/26] vfio: remove group-based API David Marchand
2026-10-07  7:31   ` David Marchand [this message]
2026-10-07  7:31   ` [PATCH v19 19/26] vfio: declare global configuration David Marchand
2026-10-07  7:31   ` [PATCH v19 20/26] vfio: separate group-based IOMMU types David Marchand
2026-10-07  7:31   ` [PATCH v19 21/26] vfio: add some check on input parameters David Marchand
2026-10-07  7:32   ` [PATCH v19 22/26] vfio: decouple device setup from bus concerns David Marchand
2026-10-07  7:32   ` [PATCH v19 23/26] vfio: introduce IOVA mode David Marchand
2026-10-07  7:32   ` [PATCH v19 24/26] vfio: introduce VFIO mode David Marchand
2026-10-07  7:32   ` [PATCH v19 25/26] uapi: import IOMMUFD header David Marchand
2026-10-07  7:32   ` [PATCH v19 26/26] vfio: introduce cdev mode David Marchand
2026-10-07  8:04   ` [PATCH v19 00/26] Support VFIO cdev API in DPDK David Marchand
2026-10-07  8:09 ` [RESEND][PATCH " David Marchand
2026-10-07  8:09   ` [RESEND][PATCH v19 01/26] vhost: check DMA capability only once David Marchand
2026-10-07  8:09   ` [RESEND][PATCH v19 02/26] bus/fslmc: decouple from EAL VFIO David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 03/26] bus/pci: rename mismatching error labels David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 04/26] bus/pci: move VFIO concerns in Linux implementation David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 05/26] eal: provide VFIO only for Linux David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 06/26] vfio: make all functions internal David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 07/26] vfio: add module check API David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 08/26] vfio: teardown internals on VFIO cleanup David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 09/26] vfio: split get device info from setup David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 10/26] vfio: add container device assignment API David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 11/26] net/nbl: do not use VFIO group bind API David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 12/26] net/ntnic: use container device assignment API David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 13/26] vdpa/ifc: " David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 14/26] vdpa/nfp: " David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 15/26] vdpa/sfc: " David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 16/26] vhost: remove group-related API from driver David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 17/26] vfio: remove group-based API David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 18/26] vfio: rename some internal types and macros David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 19/26] vfio: declare global configuration David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 20/26] vfio: separate group-based IOMMU types David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 21/26] vfio: add some check on input parameters David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 22/26] vfio: decouple device setup from bus concerns David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 23/26] vfio: introduce IOVA mode David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 24/26] vfio: introduce VFIO mode David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 25/26] uapi: import IOMMUFD header David Marchand
2026-10-07  8:10   ` [RESEND][PATCH v19 26/26] vfio: introduce cdev mode David Marchand
2026-10-07  9:59   ` [RESEND][PATCH v19 00/26] Support VFIO cdev API in DPDK David Marchand

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=20261007073206.567001-19-david.marchand@redhat.com \
    --to=david.marchand@redhat.com \
    --cc=anatoly.burakov@intel.com \
    --cc=dev@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.