From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: Anatoly Burakov <anatoly.burakov@intel.com>
Subject: [RESEND][PATCH v19 18/26] vfio: rename some internal types and macros
Date: Wed, 7 Oct 2026 10:10:15 +0200 [thread overview]
Message-ID: <20261007081026.574382-19-david.marchand@redhat.com> (raw)
In-Reply-To: <20261007081026.574382-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, ®);
+ ret = ioctl(cfg->container_fd, VFIO_IOMMU_SPAPR_REGISTER_MEMORY, ®);
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, ®);
+ ret = ioctl(cfg->container_fd, VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY, ®);
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
next prev parent reply other threads:[~2026-10-07 8:12 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 ` [PATCH v19 18/26] vfio: rename some internal types and macros David Marchand
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 ` David Marchand [this message]
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=20261007081026.574382-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox