> -----Original Message-----
> From: Akhil Goyal <gak...@marvell.com>
> Sent: Wednesday, March 13, 2024 7:22 PM
> To: Kusztal, ArkadiuszX <arkadiuszx.kusz...@intel.com>; dev@dpdk.org
> Cc: Power, Ciara <ciara.po...@intel.com>
> Subject: RE: [EXTERNAL] [PATCH] app/crypto-perf-test: fix unset crc algorithm
>
> > Because net crc api is not thread-safe, setting crc algorithm by the
> > application will prevent race condition in the calc function.
> > Race condition still may occur when any of the threads will call this
> > function again. Function is called with the highest possible SIMD
> > extension, which is AVX512, but if this is not found, CRC API will
> > pick the other highest possible extension, or scalar if no SIMD
> > available.
> >
> > Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test
> > application")
> >
> > Signed-off-by: Arkadiusz Kusztal <arkadiuszx.kusz...@intel.com>
> > ---
> > app/test-crypto-perf/main.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c
> > index 40c0b4b54f..58496797d7 100644
> > --- a/app/test-crypto-perf/main.c
> > +++ b/app/test-crypto-perf/main.c
> > @@ -11,6 +11,7 @@
> > #include <rte_eal.h>
> > #include <rte_errno.h>
> > #include <rte_cryptodev.h>
> > +#include <rte_net_crc.h>
> > #ifdef RTE_CRYPTO_SCHEDULER
> > #include <rte_cryptodev_scheduler.h>
> > #endif
> > @@ -599,6 +600,8 @@ main(int argc, char **argv)
> > goto err;
> > }
> >
> > + rte_net_crc_set_alg(RTE_NET_CRC_AVX512);
> > +
> > ret = cperf_verify_devices_capabilities(&opts, enabled_cdevs,
> > nb_cryptodevs);
> > if (ret) {
> > --
> Not sure what is the use of this API here.
> Which calc function is it fixing.
Yes, this deserves some explanation, rte_net_crc_calc function, when alg not
set, will first try to set it during the first run.
Yet it is done in thread-unsafe manner, causing perf-test to most likely
segfault because of that, when more than one thread used.
>
> Also will it ever pick neon handler?
No, it won't, currently only qat is using this api though.
This api needs to be fixed, so eventually this will look different, but for
now, not many choices available.