Skip to content

Commit

Permalink
build: fix crash by disabling AVX512 with binutils 2.31
Browse files Browse the repository at this point in the history
On Skylake platform, with native build, KNI kernel module crashes
because of the corrupted values passed to kernel module.

The corruption occurs because the userspace kni library works
unexpectedly. Compiler [1] is using AVX512 instructions and generated
binary is wrong [2].

It turned around gcc does its job correct, but gas is generating binary
wrong. And expected binutils 2.30, 2.31 & 2.31.1 are affected. Issue has
been fixed in binutils 2.32 with:
Commit x86: don't mistakenly scale non-8-bit displacements

AVX512 was already disabled with bintuils 2.30 [3], extending it to
2.31 & 2.31.1 too.

[1] gcc (GCC) 8.3.1 20190223 (Red Hat 8.3.1-2)

[2] gcc bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90028

[3] Bugzilla ID 97 has the details.

Bugzilla ID: 249
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
  • Loading branch information
Ferruh Yigit authored and tmonjalo committed May 2, 2019
1 parent 6e62518 commit e19c6de
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 1 deletion.
4 changes: 4 additions & 0 deletions config/x86/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ if not is_windows
message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
endif
endif
if ldver.contains('2.31') and cc.has_argument('-mno-avx512f')
machine_args += '-mno-avx512f'
message('Binutils 2.31 detected, disabling AVX512 support as workaround for bug #249')
endif
endif

# we require SSE4.2 for DPDK
Expand Down
6 changes: 6 additions & 0 deletions doc/guides/rel_notes/release_19_05.rst
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,12 @@ Known Issues
Also, make sure to start the actual text at the margin.
=========================================================
* **On x86 platforms, AVX512 support is disabled with binutils 2.31**

Because a defect in binutils 2.31 AVX512 support is disabled.
DPDK defect: https://bugs.dpdk.org/show_bug.cgi?id=249
GCC defect: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90028

* **No software AES-XTS implementation.**

There are currently no cryptodev software PMDs available which implement
Expand Down
9 changes: 8 additions & 1 deletion mk/toolchain/gcc/rte.toolchain-compat.mk
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,14 @@ ifneq ($(filter 2.30%,$(LD_VERSION)),)
FORCE_DISABLE_AVX512 := y
# print warning only once for librte_eal
ifneq ($(filter %librte_eal,$(CURDIR)),)
$(warning AVX512 support disabled because of ld 2.30. See Bug 97)
$(warning AVX512 support disabled because of binutils 2.30. See Bug 97)
endif
endif
ifneq ($(filter 2.31%,$(LD_VERSION)),)
FORCE_DISABLE_AVX512 := y
# print warning only once for librte_eal
ifneq ($(filter %librte_eal,$(CURDIR)),)
$(warning AVX512 support disabled because of binutils 2.31. See Bug 249)
endif
endif
endif
Expand Down

0 comments on commit e19c6de

Please sign in to comment.