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;
  

Reply via email to