env_dpdk: use public function to check VFIO status

DPDK 17.11 added a public API, rte_vfio_is_enabled(), that we can use
instead of declaring and using pci_vfio_is_enabled().  This removes one
of the remaining non-public DPDK symbols we are currently using, getting
us closer to building against the shared library version of DPDK.

Change-Id: Idf4ee66d4868cf542521fa2896ed8c609d42ee29
Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-on: https://review.gerrithub.io/405921
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Daniel Verkamp 2018-03-30 13:04:08 -07:00 committed by Jim Harris
parent 60e8667261
commit 75ed184a79

View File

@ -49,12 +49,23 @@
#define SPDK_VFIO_ENABLED 0 #define SPDK_VFIO_ENABLED 0
#else #else
#include <linux/version.h> #include <linux/version.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) /*
* DPDK versions before 17.11 don't provide a way to get VFIO information in the public API,
* and we can't link to internal symbols when built against shared library DPDK,
* so disable VFIO entirely in that case.
*/
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) && \
(RTE_VERSION >= RTE_VERSION_NUM(17, 11, 0, 3) || !defined(RTE_BUILD_SHARED_LIB))
#define SPDK_VFIO_ENABLED 1 #define SPDK_VFIO_ENABLED 1
#include <linux/vfio.h> #include <linux/vfio.h>
#if RTE_VERSION >= RTE_VERSION_NUM(17, 11, 0, 3)
#include <rte_vfio.h>
#else
/* Internal DPDK function forward declaration */ /* Internal DPDK function forward declaration */
int pci_vfio_is_enabled(void); int pci_vfio_is_enabled(void);
#endif
struct spdk_vfio_dma_map { struct spdk_vfio_dma_map {
struct vfio_iommu_type1_dma_map map; struct vfio_iommu_type1_dma_map map;
@ -372,6 +383,17 @@ spdk_vtophys_notify(void *cb_ctx, struct spdk_mem_map *map,
} }
#if SPDK_VFIO_ENABLED #if SPDK_VFIO_ENABLED
static bool
spdk_vfio_enabled(void)
{
#if RTE_VERSION >= RTE_VERSION_NUM(17, 11, 0, 3)
return rte_vfio_is_enabled("vfio_pci");
#else
return pci_vfio_is_enabled();
#endif
}
static void static void
spdk_vtophys_iommu_init(void) spdk_vtophys_iommu_init(void)
{ {
@ -381,7 +403,7 @@ spdk_vtophys_iommu_init(void)
DIR *dir; DIR *dir;
struct dirent *d; struct dirent *d;
if (!pci_vfio_is_enabled()) { if (!spdk_vfio_enabled()) {
return; return;
} }