From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anatoly Burakov Subject: [PATCH v3 1/2] vfio: open VFIO container at startup rather than during init Date: Wed, 18 Jun 2014 16:07:16 +0100 Message-ID: <299e8046266266ad6faa1a01e6d719407dcbda67.1403104031.git.anatoly.burakov@intel.com> References: To: dev-VfR2kkLFssw@public.gmane.org Return-path: In-Reply-To: In-Reply-To: References: List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-VfR2kkLFssw@public.gmane.org Sender: "dev" Currently, VFIO only checks for being able to access the /dev/vfio directory when initializing VFIO, deferring actual VFIO container initialization to VFIO binding code. This doesn't bode well for when VFIO container cannot be initialized for whatever reason, because it results in unrecoverable error even if the user didn't set up VFIO and didn't even want to use it in the first place. This patch fixes this by moving container initialization into the code that checks if VFIO is available at runtime. Therefore, any issues with the container will be known at initialization stage and VFIO will simply be turned off if container could not be set up. Signed-off-by: Anatoly Burakov --- lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c index 4de6061..9eb5dcd 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c @@ -523,17 +523,6 @@ pci_vfio_map_resource(struct rte_pci_device *dev) rte_snprintf(pci_addr, sizeof(pci_addr), PCI_PRI_FMT, loc->domain, loc->bus, loc->devid, loc->function); - /* get container fd (needs to be done only once per initialization) */ - if (vfio_cfg.vfio_container_fd == -1) { - int vfio_container_fd = pci_vfio_get_container_fd(); - if (vfio_container_fd < 0) { - RTE_LOG(ERR, EAL, " %s cannot open VFIO container!\n", pci_addr); - return -1; - } - - vfio_cfg.vfio_container_fd = vfio_container_fd; - } - /* get group number */ iommu_group_no = pci_vfio_get_group_no(pci_addr); @@ -770,10 +759,10 @@ pci_vfio_enable(void) vfio_cfg.vfio_groups[i].fd = -1; vfio_cfg.vfio_groups[i].group_no = -1; } - vfio_cfg.vfio_container_fd = -1; + vfio_cfg.vfio_container_fd = pci_vfio_get_container_fd(); /* check if we have VFIO driver enabled */ - if (access(VFIO_DIR, F_OK) == 0) + if (vfio_cfg.vfio_container_fd != -1) vfio_cfg.vfio_enabled = 1; else RTE_LOG(INFO, EAL, "VFIO driver not loaded or wrong permissions\n"); -- 1.8.1.4