[dpdk-dev] [PATCH v2 2/3] test/distributor: replace sync builtins with atomic builtins

Honnappa Nagarahalli Honnappa.Nagarahalli at arm.com
Mon Apr 1 18:24:01 CEST 2019


> 
> diff --git a/app/test/test_distributor.c b/app/test/test_distributor.c index
> 98919ec..ddab08d 100644
> --- a/app/test/test_distributor.c
> +++ b/app/test/test_distributor.c
> @@ -62,9 +62,14 @@ handle_work(void *arg)
>  	struct worker_params *wp = arg;
>  	struct rte_distributor *db = wp->dist;
>  	unsigned int count = 0, num = 0;
> -	unsigned int id = __sync_fetch_and_add(&worker_idx, 1);
>  	int i;
> 
> +#ifdef RTE_USE_C11_MEM_MODEL
> +	unsigned int id = __atomic_fetch_add(&worker_idx, 1,
> +__ATOMIC_RELAXED); #else
> +	unsigned int id = __sync_fetch_and_add(&worker_idx, 1); #endif
> +
I suggest we remove the conditional compilation and just keep the __atomic_xxx calls as this is test code. More over the distributor library does not have a C11 version of the library (assuming that using __atomic_xxx does not impact performance on other platforms negatively). This applies to other instances in this patch.

>  	for (i = 0; i < 8; i++)
>  		buf[i] = NULL;
>  	num = rte_distributor_get_pkt(db, id, buf, buf, num); @@ -270,7
> +275,12 @@ handle_work_with_free_mbufs(void *arg)
>  	unsigned int count = 0;
>  	unsigned int i;
>  	unsigned int num = 0;
> +
> +#ifdef RTE_USE_C11_MEM_MODEL
> +	unsigned int id = __atomic_fetch_add(&worker_idx, 1,
> +__ATOMIC_RELAXED); #else
>  	unsigned int id = __sync_fetch_and_add(&worker_idx, 1);
> +#endif
> 
>  	for (i = 0; i < 8; i++)
>  		buf[i] = NULL;
> @@ -343,7 +353,13 @@ handle_work_for_shutdown_test(void *arg)
>  	unsigned int total = 0;
>  	unsigned int i;
>  	unsigned int returned = 0;
> +
> +#ifdef RTE_USE_C11_MEM_MODEL
> +	const unsigned int id = __atomic_fetch_add(&worker_idx, 1,
> +			__ATOMIC_RELAXED);
> +#else
>  	const unsigned int id = __sync_fetch_and_add(&worker_idx, 1);
> +#endif
> 
>  	num = rte_distributor_get_pkt(d, id, buf, buf, num);
> 
> diff --git a/app/test/test_distributor_perf.c b/app/test/test_distributor_perf.c
> index edf1998..9367460 100644
> --- a/app/test/test_distributor_perf.c
> +++ b/app/test/test_distributor_perf.c
> @@ -111,9 +111,14 @@ handle_work(void *arg)
>  	unsigned int count = 0;
>  	unsigned int num = 0;
>  	int i;
> -	unsigned int id = __sync_fetch_and_add(&worker_idx, 1);
>  	struct rte_mbuf *buf[8] __rte_cache_aligned;
> 
> +#ifdef RTE_USE_C11_MEM_MODEL
> +	unsigned int id = __atomic_fetch_add(&worker_idx, 1,
> +__ATOMIC_RELAXED); #else
> +	unsigned int id = __sync_fetch_and_add(&worker_idx, 1); #endif
> +
>  	for (i = 0; i < 8; i++)
>  		buf[i] = NULL;
> 
> --
> 2.7.4



More information about the dev mailing list