[dpdk-dev] [PATCH] enicpmd: compilation error during inclusion of vfio.h

Qiu, Michael michael.qiu at intel.com
Tue Dec 2 08:24:38 CET 2014


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
>>>  	 */
>>



More information about the dev mailing list