On 11/28/2014 10:56 PM, Neil Horman wrote: > On Fri, Nov 28, 2014 at 02:09:40AM +0000, Qiu, Michael wrote: >> Hi all, >> >> I have no comments on this issue, but I indeed see many places do have >> this kernel issue(before/now/future), so can solve this issue globally? >> >> Thus, we do not need to fix this case by case. >> >> One solution(not sure if it works or not): >> >> 1. features and kernel version required list. >> 2. When config DPDK before build, automatically check this list and if >> not mach, just disable this feature in config file even though user set >> it manually. >> > Instead of enumerating a kernel version, this should be designed as an > enumeration of feature sets. That way you can enable DPDK features based on > kernel feature availability (i.e. kernel version doesn't necessecarily imply > feature set, like when a distribution backports a given feature to an older > kernel.
Yes, you are right, I haven't consider about this situation before. Actually, for kernel version based static available list, DPDK at least could run without risk. > What would really make the most sense I think is to convert the configuration > system to autoconf/automake, so that these tests can be preformed at config > time. Agree, Another choice is would be like the linux kernel, type 'make config' or 'make menuconfig' and post the feature list to user, this is more friendly for cross-compile in my option. Thanks, Michael > Neil > >> Thus main code may not need to change. >> >> Does this works? >> >> Thanks, >> Michael >> >> On 11/28/2014 1:16 AM, Sujith Sankar wrote: >>> Inclusion of vfio.h was giving compilation errors if kernel version is less >>> than 3.6.0 and if RTE_EAL_VFIO was on in config. >>> >>> Replaced inclusion of vfio.h with eal_vfio.h and replaced RTE_EAL_VFIO with >>> VFIO_PRESENT in enicpmd code. >>> >>> Signed-off-by: Sujith Sankar <ssujith at cisco.com> >>> --- >>> lib/librte_pmd_enic/Makefile | 1 + >>> lib/librte_pmd_enic/enic_main.c | 13 +++++-------- >>> 2 files changed, 6 insertions(+), 8 deletions(-) >>> >>> diff --git a/lib/librte_pmd_enic/Makefile b/lib/librte_pmd_enic/Makefile >>> index d4c2f66..befc552 100644 >>> --- a/lib/librte_pmd_enic/Makefile >>> +++ b/lib/librte_pmd_enic/Makefile >>> @@ -39,6 +39,7 @@ LIB = librte_pmd_enic.a >>> >>> CFLAGS += -I$(RTE_SDK)/lib/librte_hash/ >>> -I$(RTE_SDK)/lib/librte_pmd_enic/vnic/ >>> CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_enic/ >>> +CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal/ >>> CFLAGS += -O3 -Wno-deprecated >>> >>> VPATH += $(RTE_SDK)/lib/librte_pmd_enic/src >>> diff --git a/lib/librte_pmd_enic/enic_main.c >>> b/lib/librte_pmd_enic/enic_main.c >>> index 4b857bb..f6f00d3 100644 >>> --- a/lib/librte_pmd_enic/enic_main.c >>> +++ b/lib/librte_pmd_enic/enic_main.c >>> @@ -39,9 +39,6 @@ >>> #include <sys/mman.h> >>> #include <fcntl.h> >>> #include <libgen.h> >>> -#ifdef RTE_EAL_VFIO >>> -#include <linux/vfio.h> >>> -#endif >>> >>> #include <rte_pci.h> >>> #include <rte_memzone.h> >>> @@ -631,7 +628,7 @@ int enic_enable(struct enic *enic) >>> >>> vnic_dev_enable_wait(enic->vdev); >>> >>> -#ifndef RTE_EAL_VFIO >>> +#ifndef VFIO_PRESENT >>> /* Register and enable error interrupt */ >>> rte_intr_callback_register(&(enic->pdev->intr_handle), >>> enic_intr_handler, (void *)enic->rte_dev); >>> @@ -995,7 +992,7 @@ int enic_setup_finish(struct enic *enic) >>> return 0; >>> } >>> >>> -#ifdef RTE_EAL_VFIO >>> +#ifdef VFIO_PRESENT >>> static void enic_eventfd_init(struct enic *enic) >>> { >>> enic->eventfd = enic->pdev->intr_handle.fd; >>> @@ -1033,7 +1030,7 @@ int enic_get_link_status(struct enic *enic) >>> } >>> >>> >>> -#ifdef RTE_EAL_VFIO >>> +#ifdef VFIO_PRESENT >>> static int enic_create_err_intr_thread(struct enic *enic) >>> { >>> pthread_attr_t intr_attr; >>> @@ -1111,7 +1108,7 @@ static void enic_dev_deinit(struct enic *enic) >>> if (eth_dev->data->mac_addrs) >>> rte_free(eth_dev->data->mac_addrs); >>> >>> -#ifdef RTE_EAL_VFIO >>> +#ifdef VFIO_PRESENT >>> enic_clear_intr_mode(enic); >>> #endif >>> } >>> @@ -1167,7 +1164,7 @@ static int enic_dev_init(struct enic *enic) >>> */ >>> enic_get_res_counts(enic); >>> >>> -#ifdef RTE_EAL_VFIO >>> +#ifdef VFIO_PRESENT >>> /* Set interrupt mode based on resource counts and system >>> * capabilities >>> */ >>