[v3] mk: fix scope of disabling AVX512F support
Checks
Commit Message
AVX512 was disabled for GCC because of Bugzilla issue 97 [1],
the GCC defect submitted for the issue [2] highlighted that this is
a known binutils version 2.30 issue.
Narrowed the scope of no-avx512 to the this specific binutils version.
[1]
https://bugs.dpdk.org/show_bug.cgi?id=97
[2]
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88096
Fixes: 8d07c82b239f ("mk: disable gcc AVX512F support")
Cc: stable@dpdk.org
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: Tom Barbette <barbette@kth.se>
Cc: Thomas Monjalon <thomas@monjalon.net>
Cc: Yongseok Koh <yskoh@mellanox.com>
Cc: Konstantin Ananyev <konstantin.ananyev@intel.com>
Cc: Bruce Richardson <bruce.richardson@intel.com>
v2:
* Added warning message (print only once for eal)
* Moved decision details to compat file, kept execution in cpuflags
v3:
* replace 'ld' with '$(LD)' for cross build
* added meson support
---
config/meson.build | 8 ++++++++
mk/rte.cpuflags.mk | 4 ++--
mk/toolchain/gcc/rte.toolchain-compat.mk | 10 ++++++++++
3 files changed, 20 insertions(+), 2 deletions(-)
Comments
> On Jan 3, 2019, at 8:23 AM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>
> AVX512 was disabled for GCC because of Bugzilla issue 97 [1],
> the GCC defect submitted for the issue [2] highlighted that this is
> a known binutils version 2.30 issue.
>
> Narrowed the scope of no-avx512 to the this specific binutils version.
>
> [1]
> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.dpdk.org%2Fshow_bug.cgi%3Fid%3D97&data=02%7C01%7Cyskoh%40mellanox.com%7C9e8d0eb500ca4cb74c1508d67197c6b0%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636821294022213177&sdata=Rxj7HxBWfp4hMzfRkiGtnSYt8N0TG9xnAL0ZYBpYYa0%3D&reserved=0
>
> [2]
> https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgcc.gnu.org%2Fbugzilla%2Fshow_bug.cgi%3Fid%3D88096&data=02%7C01%7Cyskoh%40mellanox.com%7C9e8d0eb500ca4cb74c1508d67197c6b0%7Ca652971c7d2e4d9ba6a4d149256f461b%7C0%7C0%7C636821294022213177&sdata=EqzsamoYfFve5JAsgyWw51JOBhhiKTOCrnfZoYTGN28%3D&reserved=0
>
> Fixes: 8d07c82b239f ("mk: disable gcc AVX512F support")
> Cc: stable@dpdk.org
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
Acked-by: Yongseok Koh <yskoh@mellanox.com>
Thanks
> Cc: Tom Barbette <barbette@kth.se>
> Cc: Thomas Monjalon <thomas@monjalon.net>
> Cc: Yongseok Koh <yskoh@mellanox.com>
> Cc: Konstantin Ananyev <konstantin.ananyev@intel.com>
> Cc: Bruce Richardson <bruce.richardson@intel.com>
>
> v2:
> * Added warning message (print only once for eal)
> * Moved decision details to compat file, kept execution in cpuflags
>
> v3:
> * replace 'ld' with '$(LD)' for cross build
> * added meson support
> ---
> config/meson.build | 8 ++++++++
> mk/rte.cpuflags.mk | 4 ++--
> mk/toolchain/gcc/rte.toolchain-compat.mk | 10 ++++++++++
> 3 files changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/config/meson.build b/config/meson.build
> index db32499b3..40802fc88 100644
> --- a/config/meson.build
> +++ b/config/meson.build
> @@ -43,6 +43,14 @@ toolchain = cc.get_id()
> dpdk_conf.set_quoted('RTE_TOOLCHAIN', toolchain)
> dpdk_conf.set('RTE_TOOLCHAIN_' + toolchain.to_upper(), 1)
>
> +# get binutils version for the workaround of Bug 97
> +ldver = run_command('ld', '-v').stdout().strip()
> +if ldver.contains('2.30')
> + if cc.has_argument('-mno-avx512f')
> + machine_args += '-mno-avx512f'
> + endif
> +endif
> +
> add_project_link_arguments('-Wl,--no-as-needed', language: 'c')
> dpdk_extra_ldflags += '-Wl,--no-as-needed'
>
> diff --git a/mk/rte.cpuflags.mk b/mk/rte.cpuflags.mk
> index c3291b17a..541211c61 100644
> --- a/mk/rte.cpuflags.mk
> +++ b/mk/rte.cpuflags.mk
> @@ -69,8 +69,8 @@ ifneq ($(filter $(AUTO_CPUFLAGS),__AVX512F__),)
> ifeq ($(CONFIG_RTE_ENABLE_AVX512),y)
> CPUFLAGS += AVX512F
> else
> -# disable AVX512F support of gcc as a workaround for Bug 97
> -ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
> +# disable AVX512F support for GCC & binutils 2.30 as a workaround for Bug 97
> +ifeq ($(FORCE_DISABLE_AVX512),y)
> MACHINE_CFLAGS += -mno-avx512f
> endif
> endif
> diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk b/mk/toolchain/gcc/rte.toolchain-compat.mk
> index 44904295c..33ea3f03a 100644
> --- a/mk/toolchain/gcc/rte.toolchain-compat.mk
> +++ b/mk/toolchain/gcc/rte.toolchain-compat.mk
> @@ -20,6 +20,16 @@ HOST_GCC_MINOR = $(shell echo __GNUC_MINOR__ | $(HOSTCC) -E -x c - | tail -n 1)
> HOST_GCC_PATCHLEVEL = $(shell echo __GNUC_PATCHLEVEL__ | $(HOSTCC) -E -x c - | tail -n 1)
> HOST_GCC_VERSION = $(HOST_GCC_MAJOR)$(HOST_GCC_MINOR)
>
> +LD_VERSION = $(shell $(LD) -v)
> +# disable AVX512F support for GCC & binutils 2.30 as a workaround for Bug 97
> +ifneq ($(filter 2.30%,$(LD_VERSION)),)
> +FORCE_DISABLE_AVX512 := y
> +# print warning only once for librte_eal
> +ifneq ($(filter %librte_eal,$(lastword $(CURDIR))),)
> +$(warning AVX512 support disabled because of ld 2.30. See Bug 97)
> +endif
> +endif
> +
> # if GCC is older than 4.x
> ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1)
> MACHINE_CFLAGS =
> --
> 2.17.2
>
Hi Ferruh,
Should not be there a documentation update in 'Known Issues and Limitations in Legacy Releases' for the limitation. If it is already added can you please add the patchwork link for the same.
Thanks
Vipin Varghese
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Yongseok Koh
> Sent: Friday, January 4, 2019 4:17 AM
> To: Yigit, Ferruh <ferruh.yigit@intel.com>
> Cc: Thomas Monjalon <thomas@monjalon.net>; dev <dev@dpdk.org>; dpdk
> stable <stable@dpdk.org>; Tom Barbette <barbette@kth.se>; Ananyev,
> Konstantin <konstantin.ananyev@intel.com>; Richardson, Bruce
> <bruce.richardson@intel.com>
> Subject: Re: [dpdk-dev] [PATCH v3] mk: fix scope of disabling AVX512F support
>
>
> > On Jan 3, 2019, at 8:23 AM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> >
> > AVX512 was disabled for GCC because of Bugzilla issue 97 [1], the GCC
> > defect submitted for the issue [2] highlighted that this is a known
> > binutils version 2.30 issue.
> >
> > Narrowed the scope of no-avx512 to the this specific binutils version.
> >
> > [1]
> > https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbug
> >
> s.dpdk.org%2Fshow_bug.cgi%3Fid%3D97&data=02%7C01%7Cyskoh%40
> mellano
> >
> x.com%7C9e8d0eb500ca4cb74c1508d67197c6b0%7Ca652971c7d2e4d9ba6a4
> d149256
> >
> f461b%7C0%7C0%7C636821294022213177&sdata=Rxj7HxBWfp4hMzfRki
> GtnSYt8
> > N0TG9xnAL0ZYBpYYa0%3D&reserved=0
> >
> > [2]
> > https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgcc
> >
> .gnu.org%2Fbugzilla%2Fshow_bug.cgi%3Fid%3D88096&data=02%7C01%
> 7Cysk
> >
> oh%40mellanox.com%7C9e8d0eb500ca4cb74c1508d67197c6b0%7Ca652971c
> 7d2e4d9
> >
> ba6a4d149256f461b%7C0%7C0%7C636821294022213177&sdata=Eqzsa
> moYfFve5
> > JAsgyWw51JOBhhiKTOCrnfZoYTGN28%3D&reserved=0
> >
> > Fixes: 8d07c82b239f ("mk: disable gcc AVX512F support")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> > ---
> Acked-by: Yongseok Koh <yskoh@mellanox.com>
>
> Thanks
>
> > Cc: Tom Barbette <barbette@kth.se>
> > Cc: Thomas Monjalon <thomas@monjalon.net>
> > Cc: Yongseok Koh <yskoh@mellanox.com>
> > Cc: Konstantin Ananyev <konstantin.ananyev@intel.com>
> > Cc: Bruce Richardson <bruce.richardson@intel.com>
> >
> > v2:
> > * Added warning message (print only once for eal)
> > * Moved decision details to compat file, kept execution in cpuflags
> >
> > v3:
> > * replace 'ld' with '$(LD)' for cross build
> > * added meson support
> > ---
> > config/meson.build | 8 ++++++++
> > mk/rte.cpuflags.mk | 4 ++--
> > mk/toolchain/gcc/rte.toolchain-compat.mk | 10 ++++++++++
> > 3 files changed, 20 insertions(+), 2 deletions(-)
> >
> > diff --git a/config/meson.build b/config/meson.build index
> > db32499b3..40802fc88 100644
> > --- a/config/meson.build
> > +++ b/config/meson.build
> > @@ -43,6 +43,14 @@ toolchain = cc.get_id()
> > dpdk_conf.set_quoted('RTE_TOOLCHAIN', toolchain)
> > dpdk_conf.set('RTE_TOOLCHAIN_' + toolchain.to_upper(), 1)
> >
> > +# get binutils version for the workaround of Bug 97 ldver =
> > +run_command('ld', '-v').stdout().strip() if ldver.contains('2.30')
> > + if cc.has_argument('-mno-avx512f')
> > + machine_args += '-mno-avx512f'
> > + endif
> > +endif
> > +
> > add_project_link_arguments('-Wl,--no-as-needed', language: 'c')
> > dpdk_extra_ldflags += '-Wl,--no-as-needed'
> >
> > diff --git a/mk/rte.cpuflags.mk b/mk/rte.cpuflags.mk index
> > c3291b17a..541211c61 100644
> > --- a/mk/rte.cpuflags.mk
> > +++ b/mk/rte.cpuflags.mk
> > @@ -69,8 +69,8 @@ ifneq ($(filter $(AUTO_CPUFLAGS),__AVX512F__),) ifeq
> > ($(CONFIG_RTE_ENABLE_AVX512),y) CPUFLAGS += AVX512F else -# disable
> > AVX512F support of gcc as a workaround for Bug 97 -ifeq
> > ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
> > +# disable AVX512F support for GCC & binutils 2.30 as a workaround for
> > +Bug 97 ifeq ($(FORCE_DISABLE_AVX512),y)
> > MACHINE_CFLAGS += -mno-avx512f
> > endif
> > endif
> > diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk
> > b/mk/toolchain/gcc/rte.toolchain-compat.mk
> > index 44904295c..33ea3f03a 100644
> > --- a/mk/toolchain/gcc/rte.toolchain-compat.mk
> > +++ b/mk/toolchain/gcc/rte.toolchain-compat.mk
> > @@ -20,6 +20,16 @@ HOST_GCC_MINOR = $(shell echo __GNUC_MINOR__
> |
> > $(HOSTCC) -E -x c - | tail -n 1) HOST_GCC_PATCHLEVEL = $(shell echo
> > __GNUC_PATCHLEVEL__ | $(HOSTCC) -E -x c - | tail -n 1)
> > HOST_GCC_VERSION = $(HOST_GCC_MAJOR)$(HOST_GCC_MINOR)
> >
> > +LD_VERSION = $(shell $(LD) -v)
> > +# disable AVX512F support for GCC & binutils 2.30 as a workaround for
> > +Bug 97 ifneq ($(filter 2.30%,$(LD_VERSION)),)
> > +FORCE_DISABLE_AVX512 := y
> > +# print warning only once for librte_eal ifneq ($(filter
> > +%librte_eal,$(lastword $(CURDIR))),) $(warning AVX512 support
> > +disabled because of ld 2.30. See Bug 97) endif endif
> > +
> > # if GCC is older than 4.x
> > ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1)
> > MACHINE_CFLAGS =
> > --
> > 2.17.2
> >
On 1/4/2019 2:40 AM, Varghese, Vipin wrote:
> Hi Ferruh,
>
> Should not be there a documentation update in 'Known Issues and Limitations in Legacy Releases' for the limitation. If it is already added can you please add the patchwork link for the same.
It is good idea to document this limitation.
Previous limitation was documented in 18.11 release notes, I can move it into
known_issues.rst, and put updated limitation into 19.02 release notes.
>
> Thanks
> Vipin Varghese
> -----Original Message-----
> From: Yigit, Ferruh
> Sent: Friday, January 4, 2019 3:58 PM
> To: Varghese, Vipin <vipin.varghese@intel.com>; Yongseok Koh
> <yskoh@mellanox.com>
> Cc: Thomas Monjalon <thomas@monjalon.net>; dev <dev@dpdk.org>; dpdk
> stable <stable@dpdk.org>; Tom Barbette <barbette@kth.se>; Ananyev,
> Konstantin <konstantin.ananyev@intel.com>; Richardson, Bruce
> <bruce.richardson@intel.com>
> Subject: Re: [PATCH v3] mk: fix scope of disabling AVX512F support
>
> On 1/4/2019 2:40 AM, Varghese, Vipin wrote:
> > Hi Ferruh,
> >
> > Should not be there a documentation update in 'Known Issues and
> Limitations in Legacy Releases' for the limitation. If it is already added can you
> please add the patchwork link for the same.
>
> It is good idea to document this limitation.
> Previous limitation was documented in 18.11 release notes, I can move it into
> known_issues.rst, and put updated limitation into 19.02 release notes.
Thanks Ferruh for understanding
>
> >
> > Thanks
> > Vipin Varghese
>
@@ -43,6 +43,14 @@ toolchain = cc.get_id()
dpdk_conf.set_quoted('RTE_TOOLCHAIN', toolchain)
dpdk_conf.set('RTE_TOOLCHAIN_' + toolchain.to_upper(), 1)
+# get binutils version for the workaround of Bug 97
+ldver = run_command('ld', '-v').stdout().strip()
+if ldver.contains('2.30')
+ if cc.has_argument('-mno-avx512f')
+ machine_args += '-mno-avx512f'
+ endif
+endif
+
add_project_link_arguments('-Wl,--no-as-needed', language: 'c')
dpdk_extra_ldflags += '-Wl,--no-as-needed'
@@ -69,8 +69,8 @@ ifneq ($(filter $(AUTO_CPUFLAGS),__AVX512F__),)
ifeq ($(CONFIG_RTE_ENABLE_AVX512),y)
CPUFLAGS += AVX512F
else
-# disable AVX512F support of gcc as a workaround for Bug 97
-ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
+# disable AVX512F support for GCC & binutils 2.30 as a workaround for Bug 97
+ifeq ($(FORCE_DISABLE_AVX512),y)
MACHINE_CFLAGS += -mno-avx512f
endif
endif
@@ -20,6 +20,16 @@ HOST_GCC_MINOR = $(shell echo __GNUC_MINOR__ | $(HOSTCC) -E -x c - | tail -n 1)
HOST_GCC_PATCHLEVEL = $(shell echo __GNUC_PATCHLEVEL__ | $(HOSTCC) -E -x c - | tail -n 1)
HOST_GCC_VERSION = $(HOST_GCC_MAJOR)$(HOST_GCC_MINOR)
+LD_VERSION = $(shell $(LD) -v)
+# disable AVX512F support for GCC & binutils 2.30 as a workaround for Bug 97
+ifneq ($(filter 2.30%,$(LD_VERSION)),)
+FORCE_DISABLE_AVX512 := y
+# print warning only once for librte_eal
+ifneq ($(filter %librte_eal,$(lastword $(CURDIR))),)
+$(warning AVX512 support disabled because of ld 2.30. See Bug 97)
+endif
+endif
+
# if GCC is older than 4.x
ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1)
MACHINE_CFLAGS =