[dpdk-dev] 1.7.0 release failed to compile on linux

Qiaobing Xie qiaobing.xie at gmail.com
Fri Aug 15 01:27:40 CEST 2014


OK, I made the following 3 changes and the v1.7.0 release tarball got 
built cleanly on my older machine (Ubuntu 12.04/kernel 
3.13.0-32-generic, Intel C2D E6550 without SSE4.x, gcc 4.6.3):

1) kcompat.h change version check from 3.14.0 -> 3.13.8, as Roger suggested.

2) disable RTE_IXGBE_INC_VECTOR:
-CONFIG_RTE_IXGBE_INC_VECTOR=y
+CONFIG_RTE_IXGBE_INC_VECTOR=n

3) disable CONFIG_RTE_LIBRTE_ACL:
-CONFIG_RTE_LIBRTE_ACL=y
+CONFIG_RTE_LIBRTE_ACL=n

I haven't tried to test run anything yet... What would be the 
implication without LIBRTE_ACL and IXGBE_INC_VECTOR built?

-Q

On 8/14/14 5:24 PM, Aws Ismail wrote:
>
>
> On 08/14/2014 05:55 PM, Wiles, Roger Keith wrote:
>> For the SKB function change I had to change the ifdef in the 
>> kcompat.h file around line 3848 (I think) to:
>>
>> /* #### Changed the next line to use (3,13,8) instead of (3,14,0) 
>> KeithW */
>> #if ( LINUX_VERSION_CODE < KERNEL_VERSION(3,13,8) )
>> #if (!(RHEL_RELEASE_CODE && RHEL_RELEASE_CODE >= 
>> RHEL_RELEASE_VERSION(7,0)))
>> #ifdef NETIF_F_RXHASH
>> #define PKT_HASH_TYPE_L3 0
>> static inline void
>> skb_set_hash(struct sk_buff *skb, __u32 hash, __always_unused int type)
>> {
>>      skb->rxhash = hash;
>> }
>> #endif /* NETIF_F_RXHASH */
>> #endif /* < RHEL7 */
>> #endif /* < 3.14.0 */
>>
>>
>> Keith Wiles, Principal Technologist with CTO office, Wind River 
>> mobile 972-213-5533
>>
>> On Aug 14, 2014, at 4:44 PM, Qiaobing Xie 
>> <qiaobing.xie at gmail.com<mailto:qiaobing.xie at gmail.com>> wrote:
>>
>> Hi,
>>
>> I got the following error when I tried to compile 1.7.0 release 
>> tarball on a Linux box (Ubuntu 12.04/kernel=3.13.0-32-generic, 
>> gcc=4.6.3):
>>
>> ============
>> In file included from 
>> /home/qxie/dpdk-1.7.0/lib/librte_eal/linuxapp/kni/ethtool/igb/e1000_osdep.h:41:0,
>> from 
>> /home/qxie/dpdk-1.7.0/lib/librte_eal/linuxapp/kni/ethtool/igb/e1000_hw.h:31,
>> from 
>> /home/qxie/dpdk-1.7.0/lib/librte_eal/linuxapp/kni/ethtool/igb/e1000_api.h:31,
>> from 
>> /home/qxie/dpdk-1.7.0/build/build/lib/librte_eal/linuxapp/kni/e1000_82575.c:38:
>> /home/qxie/dpdk-1.7.0/lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h:3853:1: 
>> error: conflicting types for ‘skb_set_hash’
>> /usr/src/linux-headers-3.13.0-32-generic/include/linux/skbuff.h:740:1: note: 
>> previous definition of ‘skb_set_hash’ was here
> Last time I checked, I overcame this error by not using the tarball 
> but by simply cloning the dpdk git repo and checking out the 
> v1.7.0-rc4 tag. For example:
>
> git clone git://dpdk.org/dpdk
> git checkout v1.7.0-rc4
> git checkout -b dpdk1.7.0-rc4  <---- the branch name is just an 
> example, you could decide on any other name as you see fit.
>
> My machine info:
>
> 3.11.0-20 kernel, ubuntu 12.04, gcc 4.6.3
>
> From the v1.7.0-rc4 tag, viewing 
> lib/librte_eal/linuxapp/kni/ethtool/igb/kcompat.h:3848, you could see:
>
> <snip>
> #if ( LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0) )
> #if (!(RHEL_RELEASE_CODE && RHEL_RELEASE_CODE >= 
> RHEL_RELEASE_VERSION(7,0)))
> #ifdef NETIF_F_RXHASH
> #define PKT_HASH_TYPE_L3 0
> static inline void
> skb_set_hash(struct sk_buff *skb, __u32 hash, __always_unused int type)
> {
>     skb->rxhash = hash;
> }
> #endif /* NETIF_F_RXHASH */
> #endif /* < RHEL7 */
> #endif /* < 3.14.0 */
> <snip>
>
>> make[8]: *** 
>> [/home/qxie/dpdk-1.7.0/build/build/lib/librte_eal/linuxapp/kni/e1000_82575.o] 
>> Error 1
>> ============
>>
>> Apparently the version check around 'skb_set_hash' in kcompat.h 
>> failed for some reason. To work around it, I temporarily commented 
>> out that 'skb_set_hash' definition code and rte_kni complied fine. 
>> But it failed again in librte_pmd_ixgbe:
>>
>> =============
>> In file included from 
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:41:0:
>> /usr/lib/gcc/x86_64-linux-gnu/4.6/include/nmmintrin.h:31:3: error: 
>> #error "SSE4.2 instruction set not enabled"
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c: In 
>> function ‘ixgbe_recv_pkts_vec’:
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:297:3: 
>> error: implicit declaration of function ‘_mm_shuffle_epi8’ 
>> [-Werror=implicit-function-declaration]
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:297:3: 
>> error: nested extern declaration of ‘_mm_shuffle_epi8’ 
>> [-Werror=nested-externs]
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:297:11: 
>> error: incompatible types when assigning to type ‘__m128i’ from type 
>> ‘int’
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:298:11: 
>> error: incompatible types when assigning to type ‘__m128i’ from type 
>> ‘int’
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:313:11: 
>> error: incompatible types when assigning to type ‘__m128i’ from type 
>> ‘int’
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:314:11: 
>> error: incompatible types when assigning to type ‘__m128i’ from type 
>> ‘int’
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:341:3: 
>> error: implicit declaration of function ‘_mm_popcnt_u64’ 
>> [-Werror=implicit-function-declaration]
>> /home/qxie/dpdk-1.7.0/lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c:341:3: 
>> error: nested extern declaration of ‘_mm_popcnt_u64’ 
>> [-Werror=nested-externs]
>> cc1: all warnings being treated as errors
>> make[3]: *** [ixgbe_rxtx_vec.o] Error 1
>> ==============
>>
>> My CPU is the older Intel C2D E6550 which does not have sse4.2/sse4.1 
>> support. Is there a way to work around this?
>>
>> -Q
>>
>>
>>
>>
>>
>>
>



More information about the dev mailing list