build: fix crash by disabling AVX512 with binutils 2.31
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>
This commit is contained in:
parent
6e625189f2
commit
e19c6de3f2
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user