[dpdk-dev] [PATCH v3 15/29] crypto/qat: use eal I/O device memory read/write API

Ferruh Yigit ferruh.yigit at intel.com
Fri Jan 13 12:40:06 CET 2017


On 1/13/2017 8:17 AM, Jerin Jacob wrote:
> On Thu, Jan 12, 2017 at 07:09:22PM +0000, Ferruh Yigit wrote:
>> Hi Jerin,
>>
>> On 1/12/2017 9:17 AM, Jerin Jacob wrote:
>> <...>
>>
>>> +#include <rte_io.h>
>>> +
>>>  /* CSR write macro */
>>> -#define ADF_CSR_WR(csrAddr, csrOffset, val) \
>>> -	(void)((*((volatile uint32_t *)(((uint8_t *)csrAddr) + csrOffset)) \
>>> -			= (val)))
>>> +#define ADF_CSR_WR(csrAddr, csrOffset, val)		\
>>> +	rte_write32(val, (((uint8_t *)csrAddr) + csrOffset))
>>
>> For IA, this update introduces an extra compiler barrier (rte_io_wmb()),
>> which is indeed not a must, is this correct?
> 
> AFAIK, Compiler barrier is required for IA. I am not an IA expert, if
> someone thinks it needs to changed then I can fix it in following commit
> in this patch series by making rte_io_wmb() and rte_io_rmb() as empty.
> 
> Let me know.

I don't know, but what I know is this was working for IA without
compiler barrier before.

Bruce or Konstantin can help here.

> 
> AFAIK, Linux kernel code has a barrier in readl/writel for IA.
> 
> Typically we don't use any non relaxed versions in fast path.In fast
> typically all the drivers has explicit write barrier for doorbell write
> and followed by a relaxed version of write. IMO, In any event, it won't
> generate performance regression.
> 
> [dpdk-master] $ git show
> 70c343bdc8c33a51a9db23cd58122bdfc120a58f
> commit 70c343bdc8c33a51a9db23cd58122bdfc120a58f
> Author: Jerin Jacob <jerin.jacob at caviumnetworks.com>
> Date:   Mon Dec 5 06:36:49 2016 +0530
> 
>     eal/x86: define I/O device memory barriers for IA
> 
>     The patch does not provide any functional change for IA.
>     I/O barriers are mapped to existing smp barriers.
> 
>     CC: Bruce Richardson <bruce.richardson at intel.com>
>     CC: Konstantin Ananyev <konstantin.ananyev at intel.com>
>     Signed-off-by: Jerin Jacob <jerin.jacob at caviumnetworks.com>
> 
> diff --git a/lib/librte_eal/common/include/arch/x86/rte_atomic.h
> b/lib/librte_eal/common/include/arch/x86/rte_atomic.h
> index 00b1cdf..4eac666 100644
> --- a/lib/librte_eal/common/include/arch/x86/rte_atomic.h
> +++ b/lib/librte_eal/common/include/arch/x86/rte_atomic.h
> @@ -61,6 +61,12 @@ extern "C" {
>  
>  #define rte_smp_rmb() rte_compiler_barrier()
>  
> +#define rte_io_mb() rte_mb()
> +
> +#define rte_io_wmb() rte_compiler_barrier()
> +
> +#define rte_io_rmb() rte_compiler_barrier()
> +
>  /*------------------------- 16 bit atomic operations
>  * -------------------------*/
>  
>  #ifndef RTE_FORCE_INTRINSICS
> 
<...>



More information about the dev mailing list