Thread (1 message) 1 message, 1 author, 2014-08-15

Re: 1.7.0 release failed to compile on linux

From: Qiaobing Xie <hidden>
Date: 2014-08-15 00:31:29

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

On 8/14/14 7:16 PM, Neil Horman wrote:
On Thu, Aug 14, 2014 at 06:15:24PM -0400, Aws Ismail wrote:
quoted
On 08/14/2014 05:44 PM, Qiaobing Xie wrote:
quoted
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"
 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.
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
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help