net/sfc: fix mark support in EF100 native Rx datapath

Message ID 20210428141702.2172676-1-andrew.rybchenko@oktetlabs.ru (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series net/sfc: fix mark support in EF100 native Rx datapath |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/github-robot success github build: passed
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-abi-testing success Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS

Commit Message

Andrew Rybchenko April 28, 2021, 2:17 p.m. UTC
  Decouple user mark from user flag. Usage of mark does not require to
use flag as well. Flag is not actually supported yet.

Fixes: 1aacc3d388d3 ("net/sfc: support user mark and flag Rx for EF100")
Cc: stabledpdk.org

Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
Reviewed-by: Ivan Malov <ivan.malov@oktetlabs.ru>
---
 drivers/net/sfc/sfc_ef100_rx.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)
  

Comments

Ferruh Yigit April 30, 2021, 4:07 p.m. UTC | #1
On 4/28/2021 3:17 PM, Andrew Rybchenko wrote:
> Decouple user mark from user flag. Usage of mark does not require to
> use flag as well. Flag is not actually supported yet.
> 
> Fixes: 1aacc3d388d3 ("net/sfc: support user mark and flag Rx for EF100")
> Cc: stabledpdk.org

    Cc: stable@dpdk.org

> 
> Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> Reviewed-by: Andy Moreton <amoreton@xilinx.com>
> Reviewed-by: Ivan Malov <ivan.malov@oktetlabs.ru>

Applied to dpdk-next-net/main, thanks.
  

Patch

diff --git a/drivers/net/sfc/sfc_ef100_rx.c b/drivers/net/sfc/sfc_ef100_rx.c
index 07b37ff47f..8cde24c585 100644
--- a/drivers/net/sfc/sfc_ef100_rx.c
+++ b/drivers/net/sfc/sfc_ef100_rx.c
@@ -46,6 +46,9 @@ 
 	((_ndesc) - 1 /* head must not step on tail */ - \
 	 1 /* Rx error */ - 1 /* flush */)
 
+/** Invalid user mark value when the mark should be treated as unset */
+#define SFC_EF100_USER_MARK_INVALID	0
+
 struct sfc_ef100_rx_sw_desc {
 	struct rte_mbuf			*mbuf;
 };
@@ -365,7 +368,6 @@  static const efx_rx_prefix_layout_t sfc_ef100_rx_prefix_layout = {
 
 		SFC_EF100_RX_PREFIX_FIELD(LENGTH, B_FALSE),
 		SFC_EF100_RX_PREFIX_FIELD(RSS_HASH_VALID, B_FALSE),
-		SFC_EF100_RX_PREFIX_FIELD(USER_FLAG, B_FALSE),
 		SFC_EF100_RX_PREFIX_FIELD(CLASS, B_FALSE),
 		SFC_EF100_RX_PREFIX_FIELD(RSS_HASH, B_FALSE),
 		SFC_EF100_RX_PREFIX_FIELD(USER_MARK, B_FALSE),
@@ -404,12 +406,16 @@  sfc_ef100_rx_prefix_to_offloads(const struct sfc_ef100_rxq *rxq,
 					      ESF_GZ_RX_PREFIX_RSS_HASH);
 	}
 
-	if ((rxq->flags & SFC_EF100_RXQ_USER_MARK) &&
-	    EFX_TEST_OWORD_BIT(rx_prefix[0], ESF_GZ_RX_PREFIX_USER_FLAG_LBN)) {
-		ol_flags |= PKT_RX_FDIR_ID;
+	if (rxq->flags & SFC_EF100_RXQ_USER_MARK) {
+		uint32_t user_mark;
+
 		/* EFX_OWORD_FIELD converts little-endian to CPU */
-		m->hash.fdir.hi = EFX_OWORD_FIELD(rx_prefix[0],
-						  ESF_GZ_RX_PREFIX_USER_MARK);
+		user_mark = EFX_OWORD_FIELD(rx_prefix[0],
+					    ESF_GZ_RX_PREFIX_USER_MARK);
+		if (user_mark != SFC_EF100_USER_MARK_INVALID) {
+			ol_flags |= PKT_RX_FDIR_ID;
+			m->hash.fdir.hi = user_mark;
+		}
 	}
 
 	m->ol_flags = ol_flags;
@@ -794,8 +800,7 @@  sfc_ef100_rx_qstart(struct sfc_dp_rxq *dp_rxq, unsigned int evq_read_ptr,
 		rxq->flags &= ~SFC_EF100_RXQ_RSS_HASH;
 
 	if ((unsup_rx_prefix_fields &
-	     ((1U << EFX_RX_PREFIX_FIELD_USER_FLAG) |
-	      (1U << EFX_RX_PREFIX_FIELD_USER_MARK))) == 0)
+	     (1U << EFX_RX_PREFIX_FIELD_USER_MARK)) == 0)
 		rxq->flags |= SFC_EF100_RXQ_USER_MARK;
 	else
 		rxq->flags &= ~SFC_EF100_RXQ_USER_MARK;