From: Anatoly Burakov Date: Mon, 16 Apr 2018 12:13:56 +0000 (+0100) Subject: vfio: export functions even when disabled X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=6e8a721044c6ef677e67991f3f2a9bd0870eecc2 vfio: export functions even when disabled Previously, VFIO functions were not compiled in and exported if VFIO compilation was disabled. Fix this by actually compiling all of the functions unconditionally, and provide missing prototypes on Linux. Fixes: 279b581c897d ("vfio: expose functions") Fixes: 73a639085938 ("vfio: allow to map other memory regions") Fixes: 964b2f3bfb07 ("vfio: export some internal functions") Signed-off-by: Anatoly Burakov --- diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index bfbec0d7f0..d996190feb 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -756,20 +757,6 @@ rte_eal_vfio_intr_mode(void) return RTE_INTR_MODE_NONE; } -/* dummy forward declaration. */ -struct vfio_device_info; - -/* dummy prototypes. */ -int rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr, - int *vfio_dev_fd, struct vfio_device_info *device_info); -int rte_vfio_release_device(const char *sysfs_base, const char *dev_addr, int fd); -int rte_vfio_enable(const char *modname); -int rte_vfio_is_enabled(const char *modname); -int rte_vfio_noiommu_is_enabled(void); -int rte_vfio_clear_group(int vfio_group_fd); -int rte_vfio_dma_map(uint64_t vaddr, uint64_t iova, uint64_t len); -int rte_vfio_dma_unmap(uint64_t vaddr, uint64_t iova, uint64_t len); - int rte_vfio_setup_device(__rte_unused const char *sysfs_base, __rte_unused const char *dev_addr, __rte_unused int *vfio_dev_fd, diff --git a/lib/librte_eal/common/include/rte_vfio.h b/lib/librte_eal/common/include/rte_vfio.h index c4a2e606fb..8900064844 100644 --- a/lib/librte_eal/common/include/rte_vfio.h +++ b/lib/librte_eal/common/include/rte_vfio.h @@ -10,6 +10,10 @@ * RTE VFIO. This library provides various VFIO related utility functions. */ +#ifdef __cplusplus +extern "C" { +#endif + /* * determine if VFIO is present on the system */ @@ -33,10 +37,6 @@ #define VFIO_NOIOMMU_MODE \ "/sys/module/vfio/parameters/enable_unsafe_noiommu_mode" -#ifdef __cplusplus -extern "C" { -#endif - /* NOIOMMU is defined from kernel version 4.5 onwards */ #ifdef VFIO_NOIOMMU_IOMMU #define RTE_VFIO_NOIOMMU VFIO_NOIOMMU_IOMMU @@ -44,6 +44,13 @@ extern "C" { #define RTE_VFIO_NOIOMMU 8 #endif +#else /* not VFIO_PRESENT */ + +/* we don't need an actual definition, only pointer is used */ +struct vfio_device_info; + +#endif /* VFIO_PRESENT */ + /** * Setup vfio_cfg for the device identified by its address. * It discovers the configured I/O MMU groups or sets a new one for the device. @@ -249,6 +256,4 @@ rte_vfio_get_group_fd(int iommu_group_num); } #endif -#endif /* VFIO_PRESENT */ - #endif /* _RTE_VFIO_H_ */ diff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.c b/lib/librte_eal/linuxapp/eal/eal_vfio.c index 16ee7302ae..def71a6685 100644 --- a/lib/librte_eal/linuxapp/eal/eal_vfio.c +++ b/lib/librte_eal/linuxapp/eal/eal_vfio.c @@ -1547,4 +1547,64 @@ rte_vfio_dma_unmap(uint64_t __rte_unused vaddr, uint64_t __rte_unused iova, return -1; } -#endif +int +rte_vfio_setup_device(__rte_unused const char *sysfs_base, + __rte_unused const char *dev_addr, + __rte_unused int *vfio_dev_fd, + __rte_unused struct vfio_device_info *device_info) +{ + return -1; +} + +int +rte_vfio_release_device(__rte_unused const char *sysfs_base, + __rte_unused const char *dev_addr, __rte_unused int fd) +{ + return -1; +} + +int +rte_vfio_enable(__rte_unused const char *modname) +{ + return -1; +} + +int +rte_vfio_is_enabled(__rte_unused const char *modname) +{ + return -1; +} + +int +rte_vfio_noiommu_is_enabled(void) +{ + return -1; +} + +int +rte_vfio_clear_group(__rte_unused int vfio_group_fd) +{ + return -1; +} + +int __rte_experimental +rte_vfio_get_group_num(__rte_unused const char *sysfs_base, + __rte_unused const char *dev_addr, + __rte_unused int *iommu_group_num) +{ + return -1; +} + +int __rte_experimental +rte_vfio_get_container_fd(void) +{ + return -1; +} + +int __rte_experimental +rte_vfio_get_group_fd(__rte_unused int iommu_group_num) +{ + return -1; +} + +#endif /* VFIO_PRESENT */