From: Dariusz Stojaczyk Date: Mon, 17 Sep 2018 13:46:42 +0000 (+0200) Subject: vfio: check if group fd is already open X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=db9d32b8b73e3fc9e16f8a38e5b7f66a5df0e36a;p=dpdk.git vfio: check if group fd is already open Always attempt to find already opened fd for an iommu group as subsequent attempts to open it will fail. There's no public API to check if a group was already bound and has a container, so rte_vfio_container_group_bind() shouldn't fail in such case. Fixes: ea2dc1066870 ("vfio: add multi container support") Cc: stable@dpdk.org Signed-off-by: Dariusz Stojaczyk Acked-by: Xiao Wang Acked-by: Anatoly Burakov --- diff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.c b/lib/librte_eal/linuxapp/eal/eal_vfio.c index ebecde12ca..04c8f2e9c9 100644 --- a/lib/librte_eal/linuxapp/eal/eal_vfio.c +++ b/lib/librte_eal/linuxapp/eal/eal_vfio.c @@ -1702,6 +1702,11 @@ rte_vfio_container_group_bind(int container_fd, int iommu_group_num) return -1; } + /* check if we already have the group descriptor open */ + for (i = 0; i < VFIO_MAX_GROUPS; i++) + if (vfio_cfg->vfio_groups[i].group_num == iommu_group_num) + return vfio_cfg->vfio_groups[i].fd; + /* Check room for new group */ if (vfio_cfg->vfio_active_groups == VFIO_MAX_GROUPS) { RTE_LOG(ERR, EAL, "Maximum number of VFIO groups reached!\n");