patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH 1/2] build: fix meson binutils workaround
@ 2019-04-10 14:00 Ferruh Yigit
  2019-04-10 14:00 ` [dpdk-stable] [PATCH 2/2] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
  2019-04-16 15:39 ` [dpdk-stable] [PATCH v2 1/2] build: fix meson binutils workaround Ferruh Yigit
  0 siblings, 2 replies; 10+ messages in thread
From: Ferruh Yigit @ 2019-04-10 14:00 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev, stable, harry.van.haaren

The '-mno-avx512f' compiler flag is not passed to the compiler,
detection of the binutils and setting flags works fine, but the flag
itself not used by compiler.

Removing the interim 'march_opt' variable and using directly
'machine_args' and setting '-mno-avx512f' to 'machine_args'

Fixes: 566b4d7a968f ("build: fix meson check for binutils 2.30")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: harry.van.haaren@intel.com
---
 config/x86/meson.build | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/config/x86/meson.build b/config/x86/meson.build
index 558edfda9..692aebe7a 100644
--- a/config/x86/meson.build
+++ b/config/x86/meson.build
@@ -1,15 +1,12 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017-2019 Intel Corporation
 
-# for checking defines we need to use the correct compiler flags
-march_opt = ['-march=@0@'.format(machine)]
-
 # get binutils version for the workaround of Bug 97
 if host_machine.system() != 'windows'
 	ldver = run_command('ld', '-v').stdout().strip()
 	if ldver.contains('2.30')
 		if cc.has_argument('-mno-avx512f')
-			march_opt += '-mno-avx512f'
+			machine_args += '-mno-avx512f'
 			message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
 		endif
 	endif
@@ -19,7 +16,7 @@ endif
 sse_errormsg = '''SSE4.2 instruction set is required for DPDK.
 Please set the machine type to "nehalem" or "corei7" or higher value'''
 
-if cc.get_define('__SSE4_2__', args: march_opt) == ''
+if cc.get_define('__SSE4_2__', args: machine_args) == ''
 	error(sse_errormsg)
 endif
 
@@ -38,23 +35,23 @@ else
 	dpdk_conf.set('RTE_ARCH', 'i686')
 endif
 
-if cc.get_define('__AES__', args: march_opt) != ''
+if cc.get_define('__AES__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AES', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AES']
 endif
-if cc.get_define('__PCLMUL__', args: march_opt) != ''
+if cc.get_define('__PCLMUL__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_PCLMULQDQ', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_PCLMULQDQ']
 endif
-if cc.get_define('__AVX__', args: march_opt) != ''
+if cc.get_define('__AVX__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AVX', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AVX']
 endif
-if cc.get_define('__AVX2__', args: march_opt) != ''
+if cc.get_define('__AVX2__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AVX2', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AVX2']
 endif
-if cc.get_define('__AVX512F__', args: march_opt) != ''
+if cc.get_define('__AVX512F__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AVX512F', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AVX512F']
 endif
-- 
2.20.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-stable] [PATCH 2/2] build: fix crash by disabling AVX512 with binutils 2.31
  2019-04-10 14:00 [dpdk-stable] [PATCH 1/2] build: fix meson binutils workaround Ferruh Yigit
@ 2019-04-10 14:00 ` Ferruh Yigit
  2019-04-16 15:39 ` [dpdk-stable] [PATCH v2 1/2] build: fix meson binutils workaround Ferruh Yigit
  1 sibling, 0 replies; 10+ messages in thread
From: Ferruh Yigit @ 2019-04-10 14:00 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev, stable

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>
---
 config/x86/meson.build                   | 6 ++++++
 mk/toolchain/gcc/rte.toolchain-compat.mk | 9 ++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/config/x86/meson.build b/config/x86/meson.build
index 692aebe7a..9e9d5dc8c 100644
--- a/config/x86/meson.build
+++ b/config/x86/meson.build
@@ -10,6 +10,12 @@ if host_machine.system() != 'windows'
 			message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
 		endif
 	endif
+	if ldver.contains('2.31')
+		if cc.has_argument('-mno-avx512f')
+			machine_args += '-mno-avx512f'
+			message('Binutils 2.31 detected, disabling AVX512 support as workaround for bug #249')
+		endif
+	endif
 endif
 
 # we require SSE4.2 for DPDK
diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk b/mk/toolchain/gcc/rte.toolchain-compat.mk
index df71e4a8b..ea40a11c0 100644
--- a/mk/toolchain/gcc/rte.toolchain-compat.mk
+++ b/mk/toolchain/gcc/rte.toolchain-compat.mk
@@ -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
-- 
2.20.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-stable] [PATCH v2 1/2] build: fix meson binutils workaround
  2019-04-10 14:00 [dpdk-stable] [PATCH 1/2] build: fix meson binutils workaround Ferruh Yigit
  2019-04-10 14:00 ` [dpdk-stable] [PATCH 2/2] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
@ 2019-04-16 15:39 ` Ferruh Yigit
  2019-04-16 15:39   ` [dpdk-stable] [PATCH v2 2/2] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
                     ` (2 more replies)
  1 sibling, 3 replies; 10+ messages in thread
From: Ferruh Yigit @ 2019-04-16 15:39 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev, stable, harry.van.haaren

The '-mno-avx512f' compiler flag is not passed to the compiler,
detection of the binutils and setting flags works fine, but the flag
itself not used by compiler.

Removing the interim 'march_opt' variable and using directly
'machine_args' and setting '-mno-avx512f' to 'machine_args'

Fixes: 566b4d7a968f ("build: fix meson check for binutils 2.30")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: harry.van.haaren@intel.com
---
 config/x86/meson.build | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/config/x86/meson.build b/config/x86/meson.build
index 558edfda9..692aebe7a 100644
--- a/config/x86/meson.build
+++ b/config/x86/meson.build
@@ -1,15 +1,12 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017-2019 Intel Corporation
 
-# for checking defines we need to use the correct compiler flags
-march_opt = ['-march=@0@'.format(machine)]
-
 # get binutils version for the workaround of Bug 97
 if host_machine.system() != 'windows'
 	ldver = run_command('ld', '-v').stdout().strip()
 	if ldver.contains('2.30')
 		if cc.has_argument('-mno-avx512f')
-			march_opt += '-mno-avx512f'
+			machine_args += '-mno-avx512f'
 			message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
 		endif
 	endif
@@ -19,7 +16,7 @@ endif
 sse_errormsg = '''SSE4.2 instruction set is required for DPDK.
 Please set the machine type to "nehalem" or "corei7" or higher value'''
 
-if cc.get_define('__SSE4_2__', args: march_opt) == ''
+if cc.get_define('__SSE4_2__', args: machine_args) == ''
 	error(sse_errormsg)
 endif
 
@@ -38,23 +35,23 @@ else
 	dpdk_conf.set('RTE_ARCH', 'i686')
 endif
 
-if cc.get_define('__AES__', args: march_opt) != ''
+if cc.get_define('__AES__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AES', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AES']
 endif
-if cc.get_define('__PCLMUL__', args: march_opt) != ''
+if cc.get_define('__PCLMUL__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_PCLMULQDQ', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_PCLMULQDQ']
 endif
-if cc.get_define('__AVX__', args: march_opt) != ''
+if cc.get_define('__AVX__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AVX', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AVX']
 endif
-if cc.get_define('__AVX2__', args: march_opt) != ''
+if cc.get_define('__AVX2__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AVX2', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AVX2']
 endif
-if cc.get_define('__AVX512F__', args: march_opt) != ''
+if cc.get_define('__AVX512F__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AVX512F', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AVX512F']
 endif
-- 
2.20.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-stable] [PATCH v2 2/2] build: fix crash by disabling AVX512 with binutils 2.31
  2019-04-16 15:39 ` [dpdk-stable] [PATCH v2 1/2] build: fix meson binutils workaround Ferruh Yigit
@ 2019-04-16 15:39   ` Ferruh Yigit
  2019-04-16 15:47     ` [dpdk-stable] [dpdk-dev] " Bruce Richardson
  2019-04-16 15:47   ` [dpdk-stable] [dpdk-dev] [PATCH v2 1/2] build: fix meson binutils workaround Bruce Richardson
  2019-05-02 13:35   ` [dpdk-stable] [PATCH v3 1/3] " Ferruh Yigit
  2 siblings, 1 reply; 10+ messages in thread
From: Ferruh Yigit @ 2019-04-16 15:39 UTC (permalink / raw)
  To: Thomas Monjalon, John McNamara, Marko Kovacevic; +Cc: dev, stable

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>
---
v2:
* Release notes "Known Issues" section updated
---
 config/x86/meson.build                   | 6 ++++++
 doc/guides/rel_notes/release_19_05.rst   | 6 ++++++
 mk/toolchain/gcc/rte.toolchain-compat.mk | 9 ++++++++-
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/config/x86/meson.build b/config/x86/meson.build
index 692aebe7a..9e9d5dc8c 100644
--- a/config/x86/meson.build
+++ b/config/x86/meson.build
@@ -10,6 +10,12 @@ if host_machine.system() != 'windows'
 			message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
 		endif
 	endif
+	if ldver.contains('2.31')
+		if cc.has_argument('-mno-avx512f')
+			machine_args += '-mno-avx512f'
+			message('Binutils 2.31 detected, disabling AVX512 support as workaround for bug #249')
+		endif
+	endif
 endif
 
 # we require SSE4.2 for DPDK
diff --git a/doc/guides/rel_notes/release_19_05.rst b/doc/guides/rel_notes/release_19_05.rst
index 25cd61ca2..cf04b9b26 100644
--- a/doc/guides/rel_notes/release_19_05.rst
+++ b/doc/guides/rel_notes/release_19_05.rst
@@ -338,6 +338,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
diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk b/mk/toolchain/gcc/rte.toolchain-compat.mk
index df71e4a8b..ea40a11c0 100644
--- a/mk/toolchain/gcc/rte.toolchain-compat.mk
+++ b/mk/toolchain/gcc/rte.toolchain-compat.mk
@@ -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
-- 
2.20.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH v2 2/2] build: fix crash by disabling AVX512 with binutils 2.31
  2019-04-16 15:39   ` [dpdk-stable] [PATCH v2 2/2] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
@ 2019-04-16 15:47     ` Bruce Richardson
  0 siblings, 0 replies; 10+ messages in thread
From: Bruce Richardson @ 2019-04-16 15:47 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: Thomas Monjalon, John McNamara, Marko Kovacevic, dev, stable

On Tue, Apr 16, 2019 at 04:39:32PM +0100, Ferruh Yigit wrote:
> 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>
> ---
> v2:
> * Release notes "Known Issues" section updated
> ---
>  config/x86/meson.build                   | 6 ++++++
>  doc/guides/rel_notes/release_19_05.rst   | 6 ++++++
>  mk/toolchain/gcc/rte.toolchain-compat.mk | 9 ++++++++-
>  3 files changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/config/x86/meson.build b/config/x86/meson.build
> index 692aebe7a..9e9d5dc8c 100644
> --- a/config/x86/meson.build
> +++ b/config/x86/meson.build
> @@ -10,6 +10,12 @@ if host_machine.system() != 'windows'
>  			message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
>  		endif
>  	endif
> +	if ldver.contains('2.31')
> +		if cc.has_argument('-mno-avx512f')
> +			machine_args += '-mno-avx512f'
> +			message('Binutils 2.31 detected, disabling AVX512 support as workaround for bug #249')
> +		endif
> +	endif

Is this not the same as the previous block just with a slightly different
error message? Should we merge the two, and print out both bug numbers?

If not merging, we can reduce the indentation by putting the second
cc.has_argument() condition on the same line as the previous check, i.e.
	"if ldver.contains(...) and cc.has_argument(...)"

Apart from this nit:

Acked-by: Bruce Richardson <bruce.richardson@intel.com>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH v2 1/2] build: fix meson binutils workaround
  2019-04-16 15:39 ` [dpdk-stable] [PATCH v2 1/2] build: fix meson binutils workaround Ferruh Yigit
  2019-04-16 15:39   ` [dpdk-stable] [PATCH v2 2/2] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
@ 2019-04-16 15:47   ` Bruce Richardson
  2019-05-02 13:35   ` [dpdk-stable] [PATCH v3 1/3] " Ferruh Yigit
  2 siblings, 0 replies; 10+ messages in thread
From: Bruce Richardson @ 2019-04-16 15:47 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: Thomas Monjalon, dev, stable, harry.van.haaren

On Tue, Apr 16, 2019 at 04:39:31PM +0100, Ferruh Yigit wrote:
> The '-mno-avx512f' compiler flag is not passed to the compiler,
> detection of the binutils and setting flags works fine, but the flag
> itself not used by compiler.
> 
> Removing the interim 'march_opt' variable and using directly
> 'machine_args' and setting '-mno-avx512f' to 'machine_args'
> 
> Fixes: 566b4d7a968f ("build: fix meson check for binutils 2.30")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: harry.van.haaren@intel.com
> ---
Acked-by: Bruce Richardson <bruce.richardson@intel.com>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-stable] [PATCH v3 1/3] build: fix meson binutils workaround
  2019-04-16 15:39 ` [dpdk-stable] [PATCH v2 1/2] build: fix meson binutils workaround Ferruh Yigit
  2019-04-16 15:39   ` [dpdk-stable] [PATCH v2 2/2] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
  2019-04-16 15:47   ` [dpdk-stable] [dpdk-dev] [PATCH v2 1/2] build: fix meson binutils workaround Bruce Richardson
@ 2019-05-02 13:35   ` Ferruh Yigit
  2019-05-02 13:35     ` [dpdk-stable] [PATCH v3 2/3] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
  2019-05-02 13:44     ` [dpdk-stable] [PATCH v3 1/3] build: fix meson binutils workaround Ferruh Yigit
  2 siblings, 2 replies; 10+ messages in thread
From: Ferruh Yigit @ 2019-05-02 13:35 UTC (permalink / raw)
  To: dev, Thomas Monjalon; +Cc: stable, harry.van.haaren

The '-mno-avx512f' compiler flag is not passed to the compiler,
detection of the binutils and setting flags works fine, but the flag
itself not used by compiler.

Removing the interim 'march_opt' variable and using directly
'machine_args' and setting '-mno-avx512f' to 'machine_args'

Fixes: 566b4d7a968f ("build: fix meson check for binutils 2.30")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: harry.van.haaren@intel.com
---
 config/x86/meson.build | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/config/x86/meson.build b/config/x86/meson.build
index 2b2d06281..ca4d12506 100644
--- a/config/x86/meson.build
+++ b/config/x86/meson.build
@@ -1,15 +1,12 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017-2019 Intel Corporation
 
-# for checking defines we need to use the correct compiler flags
-march_opt = ['-march=@0@'.format(machine)]
-
 # get binutils version for the workaround of Bug 97
 if not is_windows
 	ldver = run_command('ld', '-v').stdout().strip()
 	if ldver.contains('2.30')
 		if cc.has_argument('-mno-avx512f')
-			march_opt += '-mno-avx512f'
+			machine_args += '-mno-avx512f'
 			message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
 		endif
 	endif
@@ -19,7 +16,7 @@ endif
 sse_errormsg = '''SSE4.2 instruction set is required for DPDK.
 Please set the machine type to "nehalem" or "corei7" or higher value'''
 
-if cc.get_define('__SSE4_2__', args: march_opt) == ''
+if cc.get_define('__SSE4_2__', args: machine_args) == ''
 	error(sse_errormsg)
 endif
 
@@ -38,23 +35,23 @@ else
 	dpdk_conf.set('RTE_ARCH', 'i686')
 endif
 
-if cc.get_define('__AES__', args: march_opt) != ''
+if cc.get_define('__AES__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AES', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AES']
 endif
-if cc.get_define('__PCLMUL__', args: march_opt) != ''
+if cc.get_define('__PCLMUL__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_PCLMULQDQ', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_PCLMULQDQ']
 endif
-if cc.get_define('__AVX__', args: march_opt) != ''
+if cc.get_define('__AVX__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AVX', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AVX']
 endif
-if cc.get_define('__AVX2__', args: march_opt) != ''
+if cc.get_define('__AVX2__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AVX2', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AVX2']
 endif
-if cc.get_define('__AVX512F__', args: march_opt) != ''
+if cc.get_define('__AVX512F__', args: machine_args) != ''
 	dpdk_conf.set('RTE_MACHINE_CPUFLAG_AVX512F', 1)
 	compile_time_cpuflags += ['RTE_CPUFLAG_AVX512F']
 endif
-- 
2.20.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-stable] [PATCH v3 2/3] build: fix crash by disabling AVX512 with binutils 2.31
  2019-05-02 13:35   ` [dpdk-stable] [PATCH v3 1/3] " Ferruh Yigit
@ 2019-05-02 13:35     ` Ferruh Yigit
  2019-05-02 13:44     ` [dpdk-stable] [PATCH v3 1/3] build: fix meson binutils workaround Ferruh Yigit
  1 sibling, 0 replies; 10+ messages in thread
From: Ferruh Yigit @ 2019-05-02 13:35 UTC (permalink / raw)
  To: dev, Thomas Monjalon, John McNamara, Marko Kovacevic
  Cc: stable, Bruce Richardson

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>
---
v3:
* merge if conditions in meson

v2:
* Release notes "Known Issues" section updated
---
 config/x86/meson.build                   | 4 ++++
 doc/guides/rel_notes/release_19_05.rst   | 6 ++++++
 mk/toolchain/gcc/rte.toolchain-compat.mk | 9 ++++++++-
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/config/x86/meson.build b/config/x86/meson.build
index ca4d12506..0a7bed75e 100644
--- a/config/x86/meson.build
+++ b/config/x86/meson.build
@@ -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
diff --git a/doc/guides/rel_notes/release_19_05.rst b/doc/guides/rel_notes/release_19_05.rst
index 439725c8a..468e32539 100644
--- a/doc/guides/rel_notes/release_19_05.rst
+++ b/doc/guides/rel_notes/release_19_05.rst
@@ -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
diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk b/mk/toolchain/gcc/rte.toolchain-compat.mk
index df71e4a8b..ea40a11c0 100644
--- a/mk/toolchain/gcc/rte.toolchain-compat.mk
+++ b/mk/toolchain/gcc/rte.toolchain-compat.mk
@@ -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
-- 
2.20.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-stable] [PATCH v3 1/3] build: fix meson binutils workaround
  2019-05-02 13:35   ` [dpdk-stable] [PATCH v3 1/3] " Ferruh Yigit
  2019-05-02 13:35     ` [dpdk-stable] [PATCH v3 2/3] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
@ 2019-05-02 13:44     ` Ferruh Yigit
  2019-05-02 15:48       ` [dpdk-stable] [dpdk-dev] " Thomas Monjalon
  1 sibling, 1 reply; 10+ messages in thread
From: Ferruh Yigit @ 2019-05-02 13:44 UTC (permalink / raw)
  To: dev, Thomas Monjalon; +Cc: stable, harry.van.haaren, Bruce Richardson

On 5/2/2019 2:35 PM, Ferruh Yigit wrote:
> The '-mno-avx512f' compiler flag is not passed to the compiler,
> detection of the binutils and setting flags works fine, but the flag
> itself not used by compiler.
> 
> Removing the interim 'march_opt' variable and using directly
> 'machine_args' and setting '-mno-avx512f' to 'machine_args'
> 
> Fixes: 566b4d7a968f ("build: fix meson check for binutils 2.30")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>

I forgot to carry over the ack from previous version, here it is:

Acked-by: Bruce Richardson <bruce.richardson@intel.com>


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH v3 1/3] build: fix meson binutils workaround
  2019-05-02 13:44     ` [dpdk-stable] [PATCH v3 1/3] build: fix meson binutils workaround Ferruh Yigit
@ 2019-05-02 15:48       ` Thomas Monjalon
  0 siblings, 0 replies; 10+ messages in thread
From: Thomas Monjalon @ 2019-05-02 15:48 UTC (permalink / raw)
  To: Ferruh Yigit; +Cc: dev, stable, harry.van.haaren, Bruce Richardson

02/05/2019 15:44, Ferruh Yigit:
> On 5/2/2019 2:35 PM, Ferruh Yigit wrote:
> > The '-mno-avx512f' compiler flag is not passed to the compiler,
> > detection of the binutils and setting flags works fine, but the flag
> > itself not used by compiler.
> > 
> > Removing the interim 'march_opt' variable and using directly
> > 'machine_args' and setting '-mno-avx512f' to 'machine_args'
> > 
> > Fixes: 566b4d7a968f ("build: fix meson check for binutils 2.30")
> > Cc: stable@dpdk.org
> > 
> > Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> 
> I forgot to carry over the ack from previous version, here it is:
> 
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>

Series applied, thanks



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-05-02 15:48 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-10 14:00 [dpdk-stable] [PATCH 1/2] build: fix meson binutils workaround Ferruh Yigit
2019-04-10 14:00 ` [dpdk-stable] [PATCH 2/2] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
2019-04-16 15:39 ` [dpdk-stable] [PATCH v2 1/2] build: fix meson binutils workaround Ferruh Yigit
2019-04-16 15:39   ` [dpdk-stable] [PATCH v2 2/2] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
2019-04-16 15:47     ` [dpdk-stable] [dpdk-dev] " Bruce Richardson
2019-04-16 15:47   ` [dpdk-stable] [dpdk-dev] [PATCH v2 1/2] build: fix meson binutils workaround Bruce Richardson
2019-05-02 13:35   ` [dpdk-stable] [PATCH v3 1/3] " Ferruh Yigit
2019-05-02 13:35     ` [dpdk-stable] [PATCH v3 2/3] build: fix crash by disabling AVX512 with binutils 2.31 Ferruh Yigit
2019-05-02 13:44     ` [dpdk-stable] [PATCH v3 1/3] build: fix meson binutils workaround Ferruh Yigit
2019-05-02 15:48       ` [dpdk-stable] [dpdk-dev] " Thomas Monjalon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).