[PATCH v13 03/24] bus/fslmc: decouple from EAL VFIO
Anatoly Burakov
anatoly.burakov at intel.com
Thu Aug 27 17:14:06 CEST 2026
FSLMC bus has its own VFIO implementation which is completely separate from
one in EAL or rte_vfio. Yet, it references a couple of macros and uses a
struct definition. Fully decoupling them is not a huge lift, so do that.
Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
---
drivers/bus/fslmc/fslmc_vfio.c | 50 +++++++++++++++++++++-------------
drivers/bus/fslmc/meson.build | 1 -
2 files changed, 31 insertions(+), 20 deletions(-)
diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
index 412b70e5ae..8d39895bac 100644
--- a/drivers/bus/fslmc/fslmc_vfio.c
+++ b/drivers/bus/fslmc/fslmc_vfio.c
@@ -35,7 +35,6 @@
#include <dev_driver.h>
#include <rte_eal_memconfig.h>
#include <rte_vfio.h>
-#include <eal_vfio.h>
#include "private.h"
#include "fslmc_vfio.h"
@@ -73,8 +72,21 @@ struct fslmc_dmaseg_list fslmc_iosegs =
static uint64_t fslmc_mem_va2iova = RTE_BAD_IOVA;
static int fslmc_mem_map_num;
+#define FSLMC_VFIO_SOCKET_OK 0x0
+#define FSLMC_VFIO_SOCKET_NO_FD 0x1
+#define FSLMC_VFIO_SOCKET_ERR 0xFF
+
+struct fslmc_vfio_mp_param {
+ int req;
+ int result;
+ union {
+ int group_num;
+ int iommu_type_id;
+ };
+};
+
struct fslmc_mem_param {
- struct vfio_mp_param mp_param;
+ struct fslmc_vfio_mp_param mp_param;
struct fslmc_dmaseg_list memsegs;
struct fslmc_dmaseg_list iosegs;
uint64_t mem_va2iova;
@@ -386,7 +398,7 @@ fslmc_vfio_open_group_fd(const char *group_name)
struct rte_mp_msg mp_req, *mp_rep;
struct rte_mp_reply mp_reply = {0};
struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
- struct vfio_mp_param *p = (struct vfio_mp_param *)mp_req.param;
+ struct fslmc_vfio_mp_param *p = (struct fslmc_vfio_mp_param *)mp_req.param;
int iommu_group_num, ret;
vfio_group_fd = fslmc_vfio_group_fd_by_name(group_name);
@@ -417,10 +429,10 @@ fslmc_vfio_open_group_fd(const char *group_name)
if (rte_mp_request_sync(&mp_req, &mp_reply, &ts) == 0 &&
mp_reply.nb_received == 1) {
mp_rep = &mp_reply.msgs[0];
- p = (struct vfio_mp_param *)mp_rep->param;
- if (p->result == SOCKET_OK && mp_rep->num_fds == 1)
+ p = (struct fslmc_vfio_mp_param *)mp_rep->param;
+ if (p->result == FSLMC_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 == FSLMC_VFIO_SOCKET_NO_FD)
DPAA2_BUS_ERR("Bad VFIO group fd");
}
@@ -490,7 +502,7 @@ fslmc_vfio_open_container_fd(void)
struct rte_mp_msg mp_req, *mp_rep;
struct rte_mp_reply mp_reply = {0};
struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
- struct vfio_mp_param *p = (void *)mp_req.param;
+ struct fslmc_vfio_mp_param *p = (void *)mp_req.param;
if (fslmc_vfio_container_fd() > 0)
return fslmc_vfio_container_fd();
@@ -551,7 +563,7 @@ fslmc_vfio_open_container_fd(void)
mp_rep = &mp_reply.msgs[0];
p = (void *)mp_rep->param;
- if (p->result == SOCKET_OK && mp_rep->num_fds == 1) {
+ if (p->result == FSLMC_VFIO_SOCKET_OK && mp_rep->num_fds == 1) {
vfio_container_fd = mp_rep->fds[0];
free(mp_reply.msgs);
}
@@ -594,8 +606,8 @@ fslmc_vfio_mp_primary(const struct rte_mp_msg *msg,
int fd = -1;
int ret;
struct rte_mp_msg reply;
- struct vfio_mp_param *r = (void *)reply.param;
- const struct vfio_mp_param *m = (const void *)msg->param;
+ struct fslmc_vfio_mp_param *r = (void *)reply.param;
+ const struct fslmc_vfio_mp_param *m = (const void *)msg->param;
struct fslmc_mem_param *map;
if (msg->len_param != sizeof(*m)) {
@@ -612,13 +624,13 @@ fslmc_vfio_mp_primary(const struct rte_mp_msg *msg,
r->group_num = m->group_num;
fd = fslmc_vfio_group_fd_by_id(m->group_num);
if (fd < 0) {
- r->result = SOCKET_ERR;
+ r->result = FSLMC_VFIO_SOCKET_ERR;
} else if (!fd) {
/* if group exists but isn't bound to VFIO driver */
- r->result = SOCKET_NO_FD;
+ r->result = FSLMC_VFIO_SOCKET_NO_FD;
} else {
/* if group exists and is bound to VFIO driver */
- r->result = SOCKET_OK;
+ r->result = FSLMC_VFIO_SOCKET_OK;
reply.num_fds = 1;
reply.fds[0] = fd;
}
@@ -628,9 +640,9 @@ fslmc_vfio_mp_primary(const struct rte_mp_msg *msg,
r->req = FSLMC_VFIO_SOCKET_REQ_CONTAINER;
fd = fslmc_vfio_container_fd();
if (fd <= 0) {
- r->result = SOCKET_ERR;
+ r->result = FSLMC_VFIO_SOCKET_ERR;
} else {
- r->result = SOCKET_OK;
+ r->result = FSLMC_VFIO_SOCKET_OK;
reply.num_fds = 1;
reply.fds[0] = fd;
}
@@ -640,7 +652,7 @@ fslmc_vfio_mp_primary(const struct rte_mp_msg *msg,
map = (void *)reply.param;
r = &map->mp_param;
r->req = FSLMC_VFIO_SOCKET_REQ_MEM;
- r->result = SOCKET_OK;
+ r->result = FSLMC_VFIO_SOCKET_OK;
map->memsegs = fslmc_memsegs;
map->iosegs = fslmc_iosegs;
map->mem_va2iova = fslmc_mem_va2iova;
@@ -666,19 +678,19 @@ fslmc_vfio_mp_sync_mem_req(void)
struct rte_mp_reply mp_reply = {0};
struct timespec ts = {.tv_sec = 5, .tv_nsec = 0};
int ret = 0;
- struct vfio_mp_param *mp_param;
+ struct fslmc_vfio_mp_param *mp_param;
struct fslmc_mem_param *mem_rsp;
mp_param = (void *)mp_req.param;
memset(&mp_req, 0, sizeof(struct rte_mp_msg));
mp_param->req = FSLMC_VFIO_SOCKET_REQ_MEM;
rte_strscpy(mp_req.name, FSLMC_VFIO_MP, sizeof(mp_req.name));
- mp_req.len_param = sizeof(struct vfio_mp_param);
+ mp_req.len_param = sizeof(struct fslmc_vfio_mp_param);
if (rte_mp_request_sync(&mp_req, &mp_reply, &ts) == 0 &&
mp_reply.nb_received == 1) {
mp_rep = &mp_reply.msgs[0];
mem_rsp = (struct fslmc_mem_param *)mp_rep->param;
- if (mem_rsp->mp_param.result == SOCKET_OK) {
+ if (mem_rsp->mp_param.result == FSLMC_VFIO_SOCKET_OK) {
fslmc_memsegs = mem_rsp->memsegs;
fslmc_mem_va2iova = mem_rsp->mem_va2iova;
fslmc_mem_map_num = mem_rsp->mem_map_num;
diff --git a/drivers/bus/fslmc/meson.build b/drivers/bus/fslmc/meson.build
index 50d9e91a37..55f9d2e808 100644
--- a/drivers/bus/fslmc/meson.build
+++ b/drivers/bus/fslmc/meson.build
@@ -30,4 +30,3 @@ sources = files(
)
includes += include_directories('mc', 'qbman/include', 'portal')
-includes += include_directories('../../../lib/eal/linux')
--
2.52.0
More information about the dev
mailing list