From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ferruh Yigit Subject: [PATCH v4] bus/pci: fix vfio mode Date: Mon, 30 Oct 2017 22:32:27 +0000 Message-ID: <20171030223227.8852-1-ferruh.yigit@intel.com> References: <8492fe4cf1a8d6f15d389c9148e4942f1d060a40.1509381300.git.gaetan.rivet@6wind.com> Cc: dev@dpdk.org, Ferruh Yigit , Jerin Jacob , Gaetan Rivet To: Anatoly Burakov Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 194CF1B266 for ; Mon, 30 Oct 2017 23:32:32 +0100 (CET) In-Reply-To: <8492fe4cf1a8d6f15d389c9148e4942f1d060a40.1509381300.git.gaetan.rivet@6wind.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 --- v4: * Alternative to v3, not superseding it, need to decide which one to get. This one: * fixes vfio for new kernels * fixes build for old kernels for vfio enabled in config case * print warning if vfio enabled in config but not supported by kernel * Independent from this patch, following may need fixing later * Kernel version check for vfio is broken for RTE_KERNELDIR * Kernel VFIO support check can be improved --- 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 99d7a2e86..f342c47de 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 360eed380..13d52a8b1 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 a9b705741..d5934cdd3 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 cdd74ee10..0bebf004b 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 766d0042d..ba7892b72 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.13.6