On Wed, 30 Apr 2025 15:48:36 +0200 Oleksandr Kolomeiets <okl-...@napatech.com> wrote:
> From: Danylo Vodopianov <dvo-...@napatech.com> > > Sometimes during high flow learn performance two threads > could cause deadlock using queue and mutex. > > learn_ignored variable sets when flow learn and gets > when flow removes. Hence, learn_ignore should not be protected > as far as two thread could not access to the same flow > at the same time. > > Signed-off-by: Danylo Vodopianov <dvo-...@napatech.com> If you are going to do this, then you need to use rte_atomic_store/fetch. If two threads read/write same variable outside of lock, need the CPU to use special instructions on weakly ordered platforms like ARM. > --- a/drivers/net/ntnic/include/flow_api_engine.h > +++ b/drivers/net/ntnic/include/flow_api_engine.h > @@ -297,7 +297,7 @@ struct flow_handle { > enum flow_handle_type type; > uint32_t flm_id; > uint16_t caller_id; > - uint16_t learn_ignored; > + RTE_ATOMIC(uint16_t)learn_ignored; The preferred spacing would be: RTE_ATOMIC(uint16_t) learn_ignored;