[dpdk-stable] [PATCH 20.11] config/arm: replace native machine args

Juraj Linkeš juraj.linkes at pantheon.tech
Wed Feb 24 13:51:58 CET 2021



> -----Original Message-----
> From: Luca Boccassi <bluca at debian.org>
> Sent: Friday, February 19, 2021 2:04 PM
> To: Juraj Linkeš <juraj.linkes at pantheon.tech>; stable at dpdk.org
> Cc: jerinj at marvell.com; ruifeng.wang at arm.com; david.marchand at redhat.com
> Subject: Re: [dpdk-stable] [PATCH 20.11] config/arm: replace native machine
> args
> 
> On Fri, 2021-02-19 at 12:10 +0000, Juraj Linkeš wrote:
> > > -----Original Message-----
> > > From: Luca Boccassi <bluca at debian.org>
> > > Sent: Friday, February 19, 2021 12:33 PM
> > > To: Juraj Linkeš <juraj.linkes at pantheon.tech>; stable at dpdk.org
> > > Cc: jerinj at marvell.com; ruifeng.wang at arm.com;
> > > david.marchand at redhat.com
> > > Subject: Re: [PATCH 20.11] config/arm: replace native machine args
> > >
> > > On Fri, 2021-02-19 at 11:06 +0000, Juraj Linkeš wrote:
> > > > > -----Original Message-----
> > > > > From: luca.boccassi at gmail.com <luca.boccassi at gmail.com>
> > > > > Sent: Friday, February 19, 2021 11:58 AM
> > > > > To: stable at dpdk.org
> > > > > Cc: Juraj Linkeš <juraj.linkes at pantheon.tech>;
> > > > > jerinj at marvell.com; ruifeng.wang at arm.com;
> > > > > david.marchand at redhat.com
> > > > > Subject: [PATCH 20.11] config/arm: replace native machine args
> > > > >
> > > > > From: Juraj Linkeš <juraj.linkes at pantheon.tech>
> > > > >
> > > > > [ backported from upstream commit
> > > > > 9186e5a07f35ae74a1f7fa2d89671b5f77eae407 ]
> > > > >
> > > > > There are compiler issues when building with -mcpu=native with
> > > > > popular compilers, such as GCC-8.4:
> > > > > In file included from ../lib/librte_eal/arm/include/rte_vect.h:11,
> > > > >                  from ../lib/librte_net/net_crc_neon.c:10:
> > > > > ../lib/librte_net/net_crc_neon.c: In function ‘crcr32_folding_round’:
> > > > > /usr/lib/gcc/aarch64-linux-gnu/8/include/arm_neon.h:26094:1: error:
> > > > > inlining failed in call to always_inline ‘vmull_p64’:
> > > > > target specific option mismatch
> > > > >  vmull_p64 (poly64_t a, poly64_t b)
> > > > > ../lib/librte_net/net_crc_neon.c:50:20: note: called from here
> > > > >   uint64x2_t tmp1 = vreinterpretq_u64_p128(vmull_p64(
> > > > >     vgetq_lane_p64(vreinterpretq_p64_u64(fold), 0),
> > > > >     vgetq_lane_p64(vreinterpretq_p64_u64(precomp), 1)));
> > > > >
> > > > > and clang:
> > > > > gcc -E -dM -mcpu="native" - < /dev/null | grep
> > > > > __ARM_FEATURE_ATOMICS
> > > > > clang-9 -E -dM -mcpu="native" - < /dev/null | grep
> > > > > __ARM_FEATURE_ATOMICS <no output> # no clang support
> > > > >
> > > > > Fix this by always specifying the proper machine args and never
> > > > > using the native flags.
> > > > >
> > > > > Fixes: 78ac8eac7e8a ("config/arm: use native machine build
> > > > > arguments")
> > > > >
> > > > > Signed-off-by: Juraj Linkeš <juraj.linkes at pantheon.tech>
> > > > > Signed-off-by: Luca Boccassi <luca.boccassi at microsoft.com>
> > > > > ---
> > > > > This is a crude backport, but it fixes the build for arm64. It's
> > > > > a release blocker for 20.11.1, so I would appreciate a quick review.
> > > > > Thanks!
> > > >
> > > > What does this fix? With or without the below change, the native
> > > > machine
> > > args are not used. The patch shoudn't actually change the
> > > configuration of the build at all, so I'm a bit confused.
> > >
> > > It fixes the build on some build workers with thunderx hardware -
> > > without this I get failures like:
> > >
> > > arm_neon.h:26647:1: error: inlining failed in call to 'always_inline'
> > > 'vmull_p64': target specific option mismatch
> > >
> >
> > I tried the patch and I'm seeing the same errors on a ThunderX server (with and
> without the patch). Is this actually the right patch?
> >
> > One of the four failures looks like this:
> > In file included from ../lib/librte_eal/arm/include/rte_vect.h:11,
> >                  from ../lib/librte_net/net_crc_neon.c:10:
> > ../lib/librte_net/net_crc_neon.c: In function 'crcr32_folding_round':
> > /usr/lib/gcc/aarch64-linux-gnu/8/include/arm_neon.h:26094:1: error:
> > inlining failed in call to always_inline 'vmull_p64': target specific
> > option mismatch
> >  vmull_p64 (poly64_t a, poly64_t b)
> >  ^~~~~~~~~
> > ../lib/librte_net/net_crc_neon.c:50:20: note: called from here
> >   uint64x2_t tmp1 = vreinterpretq_u64_p128(vmull_p64(
> >                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >     vgetq_lane_p64(vreinterpretq_p64_u64(fold), 0),
> >     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >     vgetq_lane_p64(vreinterpretq_p64_u64(precomp), 1)));
> >     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >
> > Ruifeng, any ideas on how to fix this?
> 
> Strange, I got from 100% repro rate to 0%.

Is this when testing in OBS? If so, the situation could be explained if they're scheduling different hardware for these tests.

Do the machine args meson messages change when you use the patch? E.g.:
Message: Implementer : Cavium
Compiler for C supports arguments -mcpu=thunderxt88: YES
Message: ['-mcpu=thunderxt88']

> Anyway, please send a better fix is
> this is not the appropriate one - this is a release blocker for 20.11.1. Thanks!
> 
> --
> Kind regards,
> Luca Boccassi



More information about the stable mailing list