On Mon, Oct 22, 2018 at 11:22:03PM -0500, Honnappa Nagarahalli wrote:
> Add lock-free read-write concurrency. This is achieved by the
> following changes.
>
> 1) Add memory ordering to avoid race conditions. The only race
> condition that can occur is - using the key store element
> before the key write is completed. Hence, while inserting the element
> the release memory order is used. Any other race condition is caught
> by the key comparison. Memory orderings are added only where needed.
> For ex: reads in the writer's context do not need memory ordering
> as there is a single writer.
>
> key_idx in the bucket entry and pdata in the key store element are
> used for synchronisation. key_idx is used to release an inserted
> entry in the bucket to the reader. Use of pdata for synchronisation
> is required due to updation of an existing entry where-in only
> the pdata is updated without updating key_idx.
>
> 2) Reader-writer concurrency issue, caused by moving the keys
> to their alternative locations during key insert, is solved
> by introducing a global counter(tbl_chng_cnt) indicating a
> change in table.
>
> 3) Add the flag to enable reader-writer concurrency during
> run time.
>
> Signed-off-by: Honnappa Nagarahalli <[email protected]>
> Reviewed-by: Gavin Hu <[email protected]>
> Reviewed-by: Ola Liljedahl <[email protected]>
> Reviewed-by: Steve Capper <[email protected]>
> Reviewed-by: Yipeng Wang <[email protected]>
> ---
Acked-by: Bruce Richardson <[email protected]>