Hi all, I need to install DPDK on 64-bit Linux machines whose processors might or might not support AVX instructions. In my current configuration file, defconfig_x86-64-native-linuxapp-gcc, the parameter CONFIG_RTE_MACHINE is set to native. If I compile DPDK on a machine that supports AVX and then I install it (along with openvswitch) on a machine that does *not* support AVX, openvswitch won't start and will output an "illegal instruction" error.
I'm proposing the following patch to fix this issue: diff -r ac0f646132b8 src/lib/librte_net/rte_net_crc.c --- a/src/lib/librte_net/rte_net_crc.c Thu Apr 26 17:25:01 2018 +0200 +++ b/src/lib/librte_net/rte_net_crc.c Thu Apr 26 17:25:04 2018 +0200 @@ -212,8 +212,10 @@ rte_net_crc_scalar_init(); #ifdef X86_64_SSE42_PCLMULQDQ - alg = RTE_NET_CRC_SSE42; - rte_net_crc_sse42_init(); + if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_AVX)) { + alg = RTE_NET_CRC_SSE42; + rte_net_crc_sse42_init(); + } #elif defined ARM64_NEON_PMULL if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_PMULL)) { alg = RTE_NET_CRC_NEON; The original check above is for SSE4, not for AVX, but the chosen function rte_net_crc_sse42_init does run AVX instructions. So I suggest making the check for AVX explicit, as outlined above. I tested this on a machine with an Intel Atom C3000 processor and openvswitch seems to function correctly. Are there any potential side effects? Thanks! Riccardo