DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 1/2] net/sfc: use eal I/O device memory read/write API
@ 2017-01-20 13:53 Andrew Rybchenko
  2017-01-20 13:53 ` [dpdk-dev] [PATCH 2/2] net/sfc: use eal I/O device memory barriers API Andrew Rybchenko
  2017-01-23 10:02 ` [dpdk-dev] [PATCH 1/2] net/sfc: use eal I/O device memory read/write API Ferruh Yigit
  0 siblings, 2 replies; 3+ messages in thread
From: Andrew Rybchenko @ 2017-01-20 13:53 UTC (permalink / raw)
  To: dev; +Cc: Jerin Jacob

Use relaxed version of these functions to guarantee no changes on
the step.

Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
Due to late stage when the API appears and small time for testing,
I prefer conservative way: use relaxed version right now and
cleanup neighbour rte_*mb() calls later with switching to non-relaxed
versions.

 drivers/net/sfc/efsys.h | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/sfc/efsys.h b/drivers/net/sfc/efsys.h
index fb2f3b5..a024b6c 100644
--- a/drivers/net/sfc/efsys.h
+++ b/drivers/net/sfc/efsys.h
@@ -43,6 +43,7 @@
 #include <rte_common.h>
 #include <rte_malloc.h>
 #include <rte_log.h>
+#include <rte_io.h>
 
 #include "sfc_debug.h"
 
@@ -440,7 +441,7 @@
 									\
 		_addr = (volatile uint32_t *)(_base + (_offset));	\
 		rte_rmb();						\
-		(_edp)->ed_u32[0] = _addr[0];				\
+		(_edp)->ed_u32[0] = rte_read32_relaxed(_addr);		\
 									\
 		EFSYS_PROBE2(bar_readd, unsigned int, (_offset),	\
 					 uint32_t, (_edp)->ed_u32[0]);	\
@@ -463,7 +464,7 @@
 									\
 		_addr = (volatile uint64_t *)(_base + (_offset));	\
 		rte_rmb();						\
-		(_eqp)->eq_u64[0] = _addr[0];				\
+		(_eqp)->eq_u64[0] = rte_read64_relaxed(_addr);		\
 									\
 		EFSYS_PROBE3(bar_readq, unsigned int, (_offset),	\
 					 uint32_t, (_eqp)->eq_u32[1],	\
@@ -487,6 +488,7 @@
 									\
 		_addr = (volatile __m128i *)(_base + (_offset));	\
 		rte_rmb();						\
+		/* There is no rte_read128_relaxed() yet */		\
 		(_eop)->eo_u128[0] = _addr[0];				\
 									\
 		EFSYS_PROBE5(bar_reado, unsigned int, (_offset),	\
@@ -518,7 +520,7 @@
 					 uint32_t, (_edp)->ed_u32[0]);	\
 									\
 		_addr = (volatile uint32_t *)(_base + (_offset));	\
-		_addr[0] = (_edp)->ed_u32[0];				\
+		rte_write32_relaxed((_edp)->ed_u32[0], _addr);		\
 		rte_wmb();						\
 									\
 		_NOTE(CONSTANTCONDITION);				\
@@ -542,7 +544,7 @@
 					 uint32_t, (_eqp)->eq_u32[0]);	\
 									\
 		_addr = (volatile uint64_t *)(_base + (_offset));	\
-		_addr[0] = (_eqp)->eq_u64[0];				\
+		rte_write64_relaxed((_eqp)->eq_u64[0], _addr);		\
 		rte_wmb();						\
 									\
 		SFC_BAR_UNLOCK(_esbp);					\
@@ -580,6 +582,7 @@
 					 uint32_t, (_eop)->eo_u32[0]);	\
 									\
 		_addr = (volatile __m128i *)(_base + (_offset));	\
+		/* There is no rte_write128_relaxed() yet */		\
 		_addr[0] = (_eop)->eo_u128[0];				\
 		rte_wmb();						\
 									\
-- 
1.8.2.3

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [dpdk-dev] [PATCH 2/2] net/sfc: use eal I/O device memory barriers API
  2017-01-20 13:53 [dpdk-dev] [PATCH 1/2] net/sfc: use eal I/O device memory read/write API Andrew Rybchenko
@ 2017-01-20 13:53 ` Andrew Rybchenko
  2017-01-23 10:02 ` [dpdk-dev] [PATCH 1/2] net/sfc: use eal I/O device memory read/write API Ferruh Yigit
  1 sibling, 0 replies; 3+ messages in thread
From: Andrew Rybchenko @ 2017-01-20 13:53 UTC (permalink / raw)
  To: dev; +Cc: Jerin Jacob

The previous version relied on the fact that DMA sync for device and
PIO write barrier in pair. Now each does its job.

Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
 drivers/net/sfc/efsys.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/sfc/efsys.h b/drivers/net/sfc/efsys.h
index a024b6c..60829be 100644
--- a/drivers/net/sfc/efsys.h
+++ b/drivers/net/sfc/efsys.h
@@ -612,7 +612,7 @@
 /* BARRIERS */
 
 #define EFSYS_MEM_READ_BARRIER()	rte_rmb()
-#define EFSYS_PIO_WRITE_BARRIER()	rte_wmb()
+#define EFSYS_PIO_WRITE_BARRIER()	rte_io_wmb()
 
 /* DMA SYNC */
 
@@ -623,7 +623,9 @@
  */
 
 #define EFSYS_DMA_SYNC_FOR_KERNEL(_esmp, _offset, _size)	((void)0)
-#define EFSYS_DMA_SYNC_FOR_DEVICE(_esmp, _offset, _size)	((void)0)
+
+/* Just avoid store and compiler (impliciltly) reordering */
+#define EFSYS_DMA_SYNC_FOR_DEVICE(_esmp, _offset, _size)	rte_wmb()
 
 /* TIMESTAMP */
 
-- 
1.8.2.3

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-dev] [PATCH 1/2] net/sfc: use eal I/O device memory read/write API
  2017-01-20 13:53 [dpdk-dev] [PATCH 1/2] net/sfc: use eal I/O device memory read/write API Andrew Rybchenko
  2017-01-20 13:53 ` [dpdk-dev] [PATCH 2/2] net/sfc: use eal I/O device memory barriers API Andrew Rybchenko
@ 2017-01-23 10:02 ` Ferruh Yigit
  1 sibling, 0 replies; 3+ messages in thread
From: Ferruh Yigit @ 2017-01-23 10:02 UTC (permalink / raw)
  To: Andrew Rybchenko, dev; +Cc: Jerin Jacob

On 1/20/2017 1:53 PM, Andrew Rybchenko wrote:
> Use relaxed version of these functions to guarantee no changes on
> the step.
> 
> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>

Series applied to dpdk-next-net/master, thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-01-23 10:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-20 13:53 [dpdk-dev] [PATCH 1/2] net/sfc: use eal I/O device memory read/write API Andrew Rybchenko
2017-01-20 13:53 ` [dpdk-dev] [PATCH 2/2] net/sfc: use eal I/O device memory barriers API Andrew Rybchenko
2017-01-23 10:02 ` [dpdk-dev] [PATCH 1/2] net/sfc: use eal I/O device memory read/write API Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).