From bc104bb853bddc048464e4d7b340cdedc3ad561f Mon Sep 17 00:00:00 2001 From: Ferruh Yigit Date: Mon, 30 Oct 2017 22:32:27 +0000 Subject: [PATCH] bus/pci: fix VFIO mode Revert back to using VFIO_PRESENT as a marker to enable compilation of VFIO-related segments. VFIO_PRESENT is the combination of user configuration RTE_EAL_VFIO and kernel version support check. eal_vfio.h VFIO_PRESENT related check ordered to be compatible with rte_vfio.h one, no functional modification. Fixes: 279b581c897d ("vfio: expose functions") Signed-off-by: Jerin Jacob Signed-off-by: Gaetan Rivet Signed-off-by: Ferruh Yigit Tested-by: Bruce Richardson --- drivers/bus/pci/linux/pci_init.h | 2 +- drivers/bus/pci/linux/pci_vfio.c | 2 +- lib/librte_eal/common/include/rte_vfio.h | 14 ++++++++++++++ lib/librte_eal/linuxapp/eal/eal_interrupts.c | 1 - lib/librte_eal/linuxapp/eal/eal_vfio.h | 14 ++++++++++---- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/bus/pci/linux/pci_init.h b/drivers/bus/pci/linux/pci_init.h index 99d7a2e86a..f342c47dee 100644 --- a/drivers/bus/pci/linux/pci_init.h +++ b/drivers/bus/pci/linux/pci_init.h @@ -74,7 +74,7 @@ void pci_uio_ioport_write(struct rte_pci_ioport *p, const void *data, size_t len, off_t offset); int pci_uio_ioport_unmap(struct rte_pci_ioport *p); -#ifdef RTE_EAL_VFIO +#ifdef VFIO_PRESENT #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) #define RTE_PCI_MSIX_TABLE_BIR 0x7 diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index 360eed3800..13d52a8b17 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -62,7 +62,7 @@ * This file is only compiled if CONFIG_RTE_EAL_VFIO is set to "y". */ -#ifdef RTE_EAL_VFIO +#ifdef VFIO_PRESENT #define PAGE_SIZE (sysconf(_SC_PAGESIZE)) #define PAGE_MASK (~(PAGE_SIZE - 1)) diff --git a/lib/librte_eal/common/include/rte_vfio.h b/lib/librte_eal/common/include/rte_vfio.h index a9b7057418..d5934cdd36 100644 --- a/lib/librte_eal/common/include/rte_vfio.h +++ b/lib/librte_eal/common/include/rte_vfio.h @@ -34,6 +34,18 @@ #ifndef _RTE_VFIO_H_ #define _RTE_VFIO_H_ +/* + * determine if VFIO is present on the system + */ +#if !defined(VFIO_PRESENT) && defined(RTE_EAL_VFIO) +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) +#define VFIO_PRESENT +#endif /* kernel version >= 3.6.0 */ +#endif /* RTE_EAL_VFIO */ + +#ifdef VFIO_PRESENT + #include #define VFIO_DIR "/dev/vfio" @@ -136,4 +148,6 @@ int vfio_is_enabled(const char *modname); */ int vfio_noiommu_is_enabled(void); +#endif /* VFIO_PRESENT */ + #endif /* _RTE_VFIO_H_ */ diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c index cdd74ee101..0bebf004b5 100644 --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c @@ -64,7 +64,6 @@ #include #include #include -#include #include "eal_private.h" #include "eal_vfio.h" diff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.h b/lib/librte_eal/linuxapp/eal/eal_vfio.h index 766d0042de..ba7892b726 100644 --- a/lib/librte_eal/linuxapp/eal/eal_vfio.h +++ b/lib/librte_eal/linuxapp/eal/eal_vfio.h @@ -37,9 +37,17 @@ /* * determine if VFIO is present on the system */ -#ifdef RTE_EAL_VFIO +#if !defined(VFIO_PRESENT) && defined(RTE_EAL_VFIO) #include #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) +#define VFIO_PRESENT +#else +#pragma message("VFIO configured but not supported by this kernel, disabling.") +#endif /* kernel version >= 3.6.0 */ +#endif /* RTE_EAL_VFIO */ + +#ifdef VFIO_PRESENT + #include #define RTE_VFIO_TYPE1 VFIO_TYPE1_IOMMU @@ -182,8 +190,6 @@ int vfio_mp_sync_setup(void); #define SOCKET_NO_FD 0x1 #define SOCKET_ERR 0xFF -#define VFIO_PRESENT -#endif /* kernel version */ -#endif /* RTE_EAL_VFIO */ +#endif /* VFIO_PRESENT */ #endif /* EAL_VFIO_H_ */ -- 2.20.1