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>
We need similar check for meson which is missing right now.
---
mk/rte.cpuflags.mk | 2 ++
mk/toolchain/gcc/rte.toolchain-compat.mk | 2 ++
2 files changed, 4 insertions(+)
Comments
19/12/2018 20:29, Ferruh Yigit:
> 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.
[...]
> # disable AVX512F support of gcc as a workaround for Bug 97
> ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
> +ifneq ($(filter 2.30%,$(LD_VERSION)),)
> MACHINE_CFLAGS += -mno-avx512f
I think we should print a warning here.
There is a function $(warning) or $(info) for such case.
On 12/19/2018 7:58 PM, Thomas Monjalon wrote:
> 19/12/2018 20:29, Ferruh Yigit:
>> 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.
> [...]
>> # disable AVX512F support of gcc as a workaround for Bug 97
>> ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
>> +ifneq ($(filter 2.30%,$(LD_VERSION)),)
>> MACHINE_CFLAGS += -mno-avx512f
>
> I think we should print a warning here.
> There is a function $(warning) or $(info) for such case.
I can add but it prints warning per component, so it prints a lot.
19/12/2018 21:20, Ferruh Yigit:
> On 12/19/2018 7:58 PM, Thomas Monjalon wrote:
> > 19/12/2018 20:29, Ferruh Yigit:
> >> 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.
> > [...]
> >> # disable AVX512F support of gcc as a workaround for Bug 97
> >> ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
> >> +ifneq ($(filter 2.30%,$(LD_VERSION)),)
> >> MACHINE_CFLAGS += -mno-avx512f
> >
> > I think we should print a warning here.
> > There is a function $(warning) or $(info) for such case.
>
> I can add but it prints warning per component, so it prints a lot.
I think we can choose to print only when compiling EAL
by checking $(findstring eal,$(lastword $(MAKEFILE_LIST)))
One more comment: it would be good to have this fix with meson too.
On 12/19/2018 8:28 PM, Thomas Monjalon wrote:
> 19/12/2018 21:20, Ferruh Yigit:
>> On 12/19/2018 7:58 PM, Thomas Monjalon wrote:
>>> 19/12/2018 20:29, Ferruh Yigit:
>>>> 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.
>>> [...]
>>>> # disable AVX512F support of gcc as a workaround for Bug 97
>>>> ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
>>>> +ifneq ($(filter 2.30%,$(LD_VERSION)),)
>>>> MACHINE_CFLAGS += -mno-avx512f
>>>
>>> I think we should print a warning here.
>>> There is a function $(warning) or $(info) for such case.
>>
>> I can add but it prints warning per component, so it prints a lot.
>
> I think we can choose to print only when compiling EAL
> by checking $(findstring eal,$(lastword $(MAKEFILE_LIST)))
Thanks for hint, I will use it.
>
> One more comment: it would be good to have this fix with meson too.
Agreed, only I am not quite sure how to fix it in meson.
On Wed, Dec 19, 2018 at 08:53:34PM +0000, Ferruh Yigit wrote:
> On 12/19/2018 8:28 PM, Thomas Monjalon wrote:
> > 19/12/2018 21:20, Ferruh Yigit:
> >> On 12/19/2018 7:58 PM, Thomas Monjalon wrote:
> >>> 19/12/2018 20:29, Ferruh Yigit:
> >>>> 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.
> >>> [...]
> >>>> # disable AVX512F support of gcc as a workaround for Bug 97
> >>>> ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
> >>>> +ifneq ($(filter 2.30%,$(LD_VERSION)),)
> >>>> MACHINE_CFLAGS += -mno-avx512f
> >>>
> >>> I think we should print a warning here.
> >>> There is a function $(warning) or $(info) for such case.
> >>
> >> I can add but it prints warning per component, so it prints a lot.
> >
> > I think we can choose to print only when compiling EAL
> > by checking $(findstring eal,$(lastword $(MAKEFILE_LIST)))
>
> Thanks for hint, I will use it.
>
> >
> > One more comment: it would be good to have this fix with meson too.
>
> Agreed, only I am not quite sure how to fix it in meson.
One suggestion, but the snippet below in main meson.build file, and put the
printing of a message in one of the EAL meson.build files.
/Bruce
ldver = run_command('ld', '-v').stdout().strip()
if ldver.contains('2.30')
# take action here
endif
@@ -71,10 +71,12 @@ CPUFLAGS += AVX512F
else
# disable AVX512F support of gcc as a workaround for Bug 97
ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
+ifneq ($(filter 2.30%,$(LD_VERSION)),)
MACHINE_CFLAGS += -mno-avx512f
endif
endif
endif
+endif
# IBM Power CPU flags
ifneq ($(filter $(AUTO_CPUFLAGS),__PPC64__),)
@@ -20,6 +20,8 @@ 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)
+
# if GCC is older than 4.x
ifeq ($(shell test $(GCC_VERSION) -lt 40 && echo 1), 1)
MACHINE_CFLAGS =