[dpdk-dev] [PATCH v4 2/4] ring: read tail using atomic load
Jerin Jacob
jerin.jacob at caviumnetworks.com
Thu Sep 20 08:41:26 CEST 2018
-----Original Message-----
> Date: Mon, 17 Sep 2018 16:11:17 +0800
> From: Gavin Hu <gavin.hu at arm.com>
> To: dev at dpdk.org
> CC: gavin.hu at arm.com, Honnappa.Nagarahalli at arm.com, steve.capper at arm.com,
> Ola.Liljedahl at arm.com, jerin.jacob at caviumnetworks.com, nd at arm.com,
> stable at dpdk.org
> Subject: [PATCH v4 2/4] ring: read tail using atomic load
> X-Mailer: git-send-email 2.7.4
>
>
> In update_tail, read ht->tail using __atomic_load.Although the
> compiler currently seems to be doing the right thing even without
> _atomic_load, we don't want to give the compiler freedom to optimise
> what should be an atomic load, it should not be arbitarily moved
> around.
>
> Fixes: 39368ebfc6 ("ring: introduce C11 memory model barrier option")
> Cc: stable at dpdk.org
+ Jia He <jia.he at hxt-semitech.com>
>
> Signed-off-by: Gavin Hu <gavin.hu at arm.com>
> Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli at arm.com>
> Reviewed-by: Steve Capper <steve.capper at arm.com>
> Reviewed-by: Ola Liljedahl <Ola.Liljedahl at arm.com>
> ---
> lib/librte_ring/rte_ring_c11_mem.h | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/lib/librte_ring/rte_ring_c11_mem.h b/lib/librte_ring/rte_ring_c11_mem.h
> index 94df3c4..234fea0 100644
> --- a/lib/librte_ring/rte_ring_c11_mem.h
> +++ b/lib/librte_ring/rte_ring_c11_mem.h
> @@ -21,7 +21,8 @@ update_tail(struct rte_ring_headtail *ht, uint32_t old_val, uint32_t new_val,
> * we need to wait for them to complete
> */
> if (!single)
> - while (unlikely(ht->tail != old_val))
> + while (unlikely(old_val != __atomic_load_n(&ht->tail,
> + __ATOMIC_RELAXED)))
> rte_pause();
>
> __atomic_store_n(&ht->tail, new_val, __ATOMIC_RELEASE);
> --
> 2.7.4
>
More information about the dev
mailing list