* [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).