1.7.0 release failed to compile on linux
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 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
A message that is not in the archive (sent off-list or not yet received): [email protected]
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 voidskb_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 <[email protected]<mailto:[email protected]>> 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 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
A message that is not in the archive (sent off-list or not yet received): 4B613BEE-2D07-417D-ACA3-6C228FADB14E-CWA4WttNNZF54TAoqtyWWQ@public.gmane.org
Quoted 25 lines · Roger Keith
For the SKB function change I had to change the ifdef in the
kcompat.hfile 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))) #ifdefNETIF_F_RXHASH
#definePKT_HASH_TYPE_L30
static inline voidskb_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 <[email protected]<mailto:[email protected]>> 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):
Quoted 7 lines
============
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 voidskb_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>
Quoted 30 lines
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' inkcompat.hfailed for some reason. To work around it, I temporarily commented out that 'skb_set_hash' definition code andrte_knicomplied fine. But it failed again inlibrte_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
A message that is not in the archive (sent off-list or not yet received): [email protected]
Aws,
Thanks, I will move to v1.7.0-rc4 and get it a try...
-Q
Quoted 93 lines · Aws Ismail
Quoted 25 lines · Roger Keith
For the SKB function change I had to change the ifdef in the
kcompat.hfile 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))) #ifdefNETIF_F_RXHASH
#definePKT_HASH_TYPE_L30
static inline voidskb_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 <[email protected]<mailto:[email protected]>> 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):
Quoted 7 lines
============
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 hereLast 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))) #ifdefNETIF_F_RXHASH
#definePKT_HASH_TYPE_L30
static inline voidskb_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>Quoted 30 lines
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' inkcompat.hfailed for some reason. To work around it, I temporarily commented out that 'skb_set_hash' definition code andrte_knicomplied fine. But it failed again inlibrte_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
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
Quoted 93 lines · Aws Ismail
Quoted 25 lines · Roger Keith
For the SKB function change I had to change the ifdef in the
kcompat.hfile 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))) #ifdefNETIF_F_RXHASH
#definePKT_HASH_TYPE_L30
static inline voidskb_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 <[email protected]<mailto:[email protected]>> 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):
Quoted 7 lines
============
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 hereLast 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))) #ifdefNETIF_F_RXHASH
#definePKT_HASH_TYPE_L30
static inline voidskb_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>Quoted 30 lines
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' inkcompat.hfailed for some reason. To work around it, I temporarily commented out that 'skb_set_hash' definition code andrte_knicomplied fine. But it failed again inlibrte_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
Hi Keith,
2014-08-14 21:55, Wiles, Roger Keith:
Quoted 7 lines
/* #### 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))) #ifdefNETIF_F_RXHASH
#definePKT_HASH_TYPE_L30
static inline voidskb_set_hash(struct sk_buff *skb, __u32 hash, __always_unused int type)
Quoted 6 lines
{ skb->rxhash = hash; }#endif /*
NETIF_F_RXHASH*/
#endif /* < RHEL7 */
#endif /* < 3.14.0 */
I really don't understand why changing condition from
< 3.14.0 to < 3.13.8
would be better?
This function appeared in 3.14.0. Maybe that Ubuntu backported it for their 12.04 version, so it must be handled with a specific Ubuntu check as it was already done for Ubuntu 14.04:
#if (!(UBUNTU_RELEASE_CODE == UBUNTU_RELEASE_VERSION(14,4) && UBUNTU_KERNEL_CODE >= UBUNTU_KERNEL_VERSION(3,13,0,30,54)))
Please help to improve what is done in master branch by providing patches.
Note: please do not top post and try to use cite mark '>'
Thanks
Signature · 1 line
Thomas
Re: [please ignore this test email]
Test 1
Quoted 17 lines · Thomas Monjalon
Hi Keith,
2014-08-14 21:55, Wiles, Roger Keith:
Quoted 13 lines
/* #### 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))) #ifdefNETIF_F_RXHASH
#definePKT_HASH_TYPE_L30
static inline voidskb_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 */
Test 2
Test 3
Quoted 4 lines
I really don't understand why changing condition from
< 3.14.0 to < 3.13.8
Quoted 9 lines
would be better?
This function appeared in 3.14.0. Maybe that Ubuntu backported it for their 12.04 version, so it must be handled with a specific Ubuntu check as it was already done for Ubuntu 14.04:#if (!(UBUNTU_RELEASE_CODE == UBUNTU_RELEASE_VERSION(14,4) && UBUNTU_KERNEL_CODE >= UBUNTU_KERNEL_VERSION(3,13,0,30,54)))Please help to improve what is done in master branch by providing patches.
Test 4
Quoted 5 lines
Note: please do not top post and try to use cite mark '>'
Thanks
Signature · 1 line
Thomas
Thanks
++Keith
Keith Wiles, Principal Technologist with CTO office, Wind River mobile 972-213-5533
Quoted 14 lines · Qiaobing Xie
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 make[8]: *** [/home/qxie/dpdk-1.7.0/build/build/lib/librte_eal/linuxapp/kni/e1000_82575.o] Error 1
============
Quoted 5 lines
Apparently the version check around '
skb_set_hash' inkcompat.hfailed for some reason. To work around it, I temporarily commented out that 'skb_set_hash' definition code andrte_knicomplied fine. But it failed again inlibrte_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"
From the error, nmmintrin.h contains built-in CPU calls that depend on the CPU having SSE4.2 extensions. You need to hunt down the call that is being executed and see which file is including nmmintrin.h. For example, I have encountered similar error on a CPU that does not have SSE4.1 and 4.2 extension and it was trying to call the built-in HW crc hashing call. instead I switched with rte_jhash.h, the alternative SW implementation of the hashing call.
Looking below, nmmintrin.h is being included by the lib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c, from the looks of it. This means that your defconfig (did you use the default one?) has CONFIG_RTE_IXGBE_INC_VECTOR value set to "y". try setting it to "n" and see where the build would stop next looking for another SSE4.x based builtin call.
My ultimate recommendation is to update you CPU to a newer one or perform the build/run on a separate newer CPU.
Aws\
Quoted 21 lines
/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
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 39 lines · Aws Ismail
Quoted 24 lines · Qiaobing Xie
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
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' inkcompat.hfailed for some reason. To work around it, I temporarily commented out that 'skb_set_hash' definition code andrte_knicomplied fine. But it failed again inlibrte_pmd_ixgbe:Quoted 5 lines
=============
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"From the error,
nmmintrin.hcontains built-in CPU calls that depend on the CPU having SSE4.2 extensions. You need to hunt down the call that is being executed and see which file is includingnmmintrin.h. For example, I have encountered similar error on a CPU that does not have SSE4.1 and 4.2 extension and it was trying to call the built-in HW crc hashing call. instead I switched withrte_jhash.h, the alternative SW implementation of the hashing call.
Quoted 7 lines
Looking below,
nmmintrin.his being included by thelib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c, from the looks of it. This means that your defconfig (did you use the default one?) hasCONFIG_RTE_IXGBE_INC_VECTORvalue set to "y". try setting it to "n" and see where the build would stop next looking for another SSE4.x based builtin call.
This is fixed at the head of the dpdk git tree. The vector rx code has been converted to use builtin intrinsics that can work without sse support in the cpu. The ACL library has a simmilar problem, but we are working at enabling it for all cpus, with runtime updates to faster paths when the executing cpu supports it.
Quoted 3 lines
My ultimate recommendation is to update you CPU to a newer one or perform the build/run on a separate newer CPU.
Building on a newer cpu won't help if you intend to run it on an older cpu.
Neil
A message that is not in the archive (sent off-list or not yet received): 20140815001651.GA11038-bi+AKbBUZKY6gyzm1THtWbp2dZbC/[email protected]
Nail,
Thanks for the info... I got v1.7.0 tarball compile after configuring out both IXGBE_INC_VECTOR and ACL. I will take a look at the head.
-Q
Quoted 59 lines · Neil Horman
Quoted 38 lines · Aws Ismail
Quoted 24 lines · Qiaobing Xie
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
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' inkcompat.hfailed for some reason. To work around it, I temporarily commented out that 'skb_set_hash' definition code andrte_knicomplied fine. But it failed again inlibrte_pmd_ixgbe:Quoted 5 lines
=============
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"From the error,
nmmintrin.hcontains built-in CPU calls that depend on the
CPU having SSE4.2 extensions. You need to hunt down the call that is being executed and see which file is includingnmmintrin.h. For example, I have encountered similar error on a CPU that does not have SSE4.1 and 4.2 extension and it was trying to call the built-in HW crc hashing call. instead I switched withrte_jhash.h, the alternative SW implementation of the hashing call.Quoted 7 lines
Looking below,
nmmintrin.his being included by thelib/librte_pmd_ixgbe/ixgbe_rxtx_vec.c, from the looks of it. This means that your defconfig (did you use the default one?) hasCONFIG_RTE_IXGBE_INC_VECTORvalue set to "y". try setting it to "n" and see where the build would stop next looking for another SSE4.x based builtin call.This is fixed at the head of the dpdk git tree. The vector rx code has been converted to use builtin intrinsics that can work without sse support in the cpu. The ACL library has a simmilar problem, but we are working at enabling it for all cpus, with runtime updates to faster paths when the executing cpu supports it.
Quoted 3 lines
My ultimate recommendation is to update you CPU to a newer one or perform the build/run on a separate newer CPU.
Building on a newer cpu won't help if you intend to run it on an older cpu.
Neil