All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: Reshma Pattan <reshma.pattan@intel.com>,
	Ray Kinsella <mdr@ashroe.eu>, Neil Horman <nhorman@tuxdriver.com>
Subject: [dpdk-dev] [PATCH v2 4/9] reorder: switch sequence number to dynamic mbuf field
Date: Wed, 28 Oct 2020 13:20:08 +0100	[thread overview]
Message-ID: <20201028122013.31104-5-david.marchand@redhat.com> (raw)
In-Reply-To: <20201028122013.31104-1-david.marchand@redhat.com>

The reorder library used sequence numbers stored in the deprecated field
seqn.
It is moved to a dynamic mbuf field in order to allow removal of seqn.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 app/test/test_reorder.c          |  8 ++++----
 examples/packet_ordering/main.c  |  2 +-
 lib/librte_reorder/rte_reorder.c | 23 ++++++++++++++++++++---
 lib/librte_reorder/rte_reorder.h | 21 +++++++++++++++++++++
 lib/librte_reorder/version.map   |  6 ++++++
 5 files changed, 52 insertions(+), 8 deletions(-)

diff --git a/app/test/test_reorder.c b/app/test/test_reorder.c
index 58fa9c71b5..1c4226da65 100644
--- a/app/test/test_reorder.c
+++ b/app/test/test_reorder.c
@@ -149,7 +149,7 @@ test_reorder_insert(void)
 	for (i = 0; i < num_bufs; i++) {
 		bufs[i] = rte_pktmbuf_alloc(p);
 		TEST_ASSERT_NOT_NULL(bufs[i], "Packet allocation failed\n");
-		bufs[i]->seqn = i;
+		*rte_reorder_seqn(bufs[i]) = i;
 	}
 
 	/* This should fill up order buffer:
@@ -183,7 +183,7 @@ test_reorder_insert(void)
 	bufs[4] = NULL;
 
 	/* early packet from current sequence window - full ready buffer */
-	bufs[5]->seqn = 2 * size;
+	*rte_reorder_seqn(bufs[5]) = 2 * size;
 	ret = rte_reorder_insert(b, bufs[5]);
 	if (!((ret == -1) && (rte_errno == ENOSPC))) {
 		printf("%s:%d: No error inserting early packet with full ready buffer\n",
@@ -194,7 +194,7 @@ test_reorder_insert(void)
 	bufs[5] = NULL;
 
 	/* late packet */
-	bufs[6]->seqn = 3 * size;
+	*rte_reorder_seqn(bufs[6]) = 3 * size;
 	ret = rte_reorder_insert(b, bufs[6]);
 	if (!((ret == -1) && (rte_errno == ERANGE))) {
 		printf("%s:%d: No error inserting late packet with seqn:"
@@ -250,7 +250,7 @@ test_reorder_drain(void)
 	for (i = 0; i < num_bufs; i++) {
 		bufs[i] = rte_pktmbuf_alloc(p);
 		TEST_ASSERT_NOT_NULL(bufs[i], "Packet allocation failed\n");
-		bufs[i]->seqn = i;
+		*rte_reorder_seqn(bufs[i]) = i;
 	}
 
 	/* Insert packet with seqn 1:
diff --git a/examples/packet_ordering/main.c b/examples/packet_ordering/main.c
index a79d77a321..4bea1982d5 100644
--- a/examples/packet_ordering/main.c
+++ b/examples/packet_ordering/main.c
@@ -451,7 +451,7 @@ rx_thread(struct rte_ring *ring_out)
 
 				/* mark sequence number */
 				for (i = 0; i < nb_rx_pkts; )
-					pkts[i++]->seqn = seqn++;
+					*rte_reorder_seqn(pkts[i++]) = seqn++;
 
 				/* enqueue to rx_to_workers ring */
 				ret = rte_ring_enqueue_burst(ring_out,
diff --git a/lib/librte_reorder/rte_reorder.c b/lib/librte_reorder/rte_reorder.c
index 3c9f0e2d08..9445853b79 100644
--- a/lib/librte_reorder/rte_reorder.c
+++ b/lib/librte_reorder/rte_reorder.c
@@ -8,6 +8,7 @@
 #include <rte_string_fns.h>
 #include <rte_log.h>
 #include <rte_mbuf.h>
+#include <rte_mbuf_dyn.h>
 #include <rte_eal_memconfig.h>
 #include <rte_errno.h>
 #include <rte_malloc.h>
@@ -29,6 +30,9 @@ EAL_REGISTER_TAILQ(rte_reorder_tailq)
 /* Macros for printing using RTE_LOG */
 #define RTE_LOGTYPE_REORDER	RTE_LOGTYPE_USER1
 
+#define RTE_REORDER_SEQN_DYNFIELD_NAME "rte_reorder_seqn_dynfield"
+int rte_reorder_seqn_dynfield_offset = -1;
+
 /* A generic circular buffer */
 struct cir_buffer {
 	unsigned int size;   /**< Number of entries that can be stored */
@@ -103,6 +107,11 @@ rte_reorder_create(const char *name, unsigned socket_id, unsigned int size)
 	struct rte_reorder_list *reorder_list;
 	const unsigned int bufsize = sizeof(struct rte_reorder_buffer) +
 					(2 * size * sizeof(struct rte_mbuf *));
+	static const struct rte_mbuf_dynfield reorder_seqn_dynfield_desc = {
+		.name = RTE_REORDER_SEQN_DYNFIELD_NAME,
+		.size = sizeof(rte_reorder_seqn_t),
+		.align = __alignof__(rte_reorder_seqn_t),
+	};
 
 	reorder_list = RTE_TAILQ_CAST(rte_reorder_tailq.head, rte_reorder_list);
 
@@ -120,6 +129,14 @@ rte_reorder_create(const char *name, unsigned socket_id, unsigned int size)
 		return NULL;
 	}
 
+	rte_reorder_seqn_dynfield_offset =
+		rte_mbuf_dynfield_register(&reorder_seqn_dynfield_desc);
+	if (rte_reorder_seqn_dynfield_offset < 0) {
+		RTE_LOG(ERR, REORDER, "Failed to register mbuf field for reorder sequence number\n");
+		rte_errno = ENOMEM;
+		return NULL;
+	}
+
 	rte_mcfg_tailq_write_lock();
 
 	/* guarantee there's no existing */
@@ -310,7 +327,7 @@ rte_reorder_insert(struct rte_reorder_buffer *b, struct rte_mbuf *mbuf)
 
 	order_buf = &b->order_buf;
 	if (!b->is_initialized) {
-		b->min_seqn = mbuf->seqn;
+		b->min_seqn = *rte_reorder_seqn(mbuf);
 		b->is_initialized = 1;
 	}
 
@@ -322,7 +339,7 @@ rte_reorder_insert(struct rte_reorder_buffer *b, struct rte_mbuf *mbuf)
 	 *	mbuf_seqn = 0x0010
 	 *	offset    = 0x0010 - 0xFFFD = 0x13
 	 */
-	offset = mbuf->seqn - b->min_seqn;
+	offset = *rte_reorder_seqn(mbuf) - b->min_seqn;
 
 	/*
 	 * action to take depends on offset.
@@ -352,7 +369,7 @@ rte_reorder_insert(struct rte_reorder_buffer *b, struct rte_mbuf *mbuf)
 			rte_errno = ENOSPC;
 			return -1;
 		}
-		offset = mbuf->seqn - b->min_seqn;
+		offset = *rte_reorder_seqn(mbuf) - b->min_seqn;
 		position = (order_buf->head + offset) & order_buf->mask;
 		order_buf->entries[position] = mbuf;
 	} else {
diff --git a/lib/librte_reorder/rte_reorder.h b/lib/librte_reorder/rte_reorder.h
index 6d39710088..9de0240374 100644
--- a/lib/librte_reorder/rte_reorder.h
+++ b/lib/librte_reorder/rte_reorder.h
@@ -16,6 +16,7 @@
  */
 
 #include <rte_mbuf.h>
+#include <rte_mbuf_dyn.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -23,6 +24,26 @@ extern "C" {
 
 struct rte_reorder_buffer;
 
+typedef uint32_t rte_reorder_seqn_t;
+extern int rte_reorder_seqn_dynfield_offset;
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * Read reorder sequence number from mbuf.
+ *
+ * @param mbuf Structure to read from.
+ * @return pointer to reorder sequence number.
+ */
+__rte_experimental
+static inline rte_reorder_seqn_t *
+rte_reorder_seqn(struct rte_mbuf *mbuf)
+{
+	return RTE_MBUF_DYNFIELD(mbuf, rte_reorder_seqn_dynfield_offset,
+		rte_reorder_seqn_t *);
+}
+
 /**
  * Create a new reorder buffer instance
  *
diff --git a/lib/librte_reorder/version.map b/lib/librte_reorder/version.map
index 8c0220d324..d902a7fa12 100644
--- a/lib/librte_reorder/version.map
+++ b/lib/librte_reorder/version.map
@@ -11,3 +11,9 @@ DPDK_21 {
 
 	local: *;
 };
+
+EXPERIMENTAL {
+	global:
+
+	rte_reorder_seqn_dynfield_offset;
+};
-- 
2.23.0


  parent reply	other threads:[~2020-10-28 12:21 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-27 22:13 [dpdk-dev] [PATCH 0/8] remove mbuf seqn David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 1/8] event/dpaa2: remove dead code David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 2/8] crypto/scheduler: remove unused internal seqn David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 3/8] net/ark: remove use of seqn for debug David Marchand
2020-10-28 12:19   ` Ed Czeck
2020-10-27 22:13 ` [dpdk-dev] [PATCH 4/8] reorder: switch sequence number to dynamic mbuf field David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 5/8] dpaa: switch sequence number to dynamic field David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 6/8] fslmc: " David Marchand
2020-10-27 22:13 ` [dpdk-dev] [PATCH 7/8] event: " David Marchand
2020-10-27 22:18   ` David Marchand
2020-10-28  7:27   ` Jerin Jacob
2020-10-28  8:55     ` David Marchand
2020-10-28  9:09       ` Jerin Jacob
2020-10-27 22:13 ` [dpdk-dev] [PATCH 8/8] mbuf: remove seqn field David Marchand
2020-10-28 10:27   ` Andrew Rybchenko
2020-10-28 12:20 ` [dpdk-dev] [PATCH v2 0/9] remove mbuf seqn David Marchand
2020-10-28 12:20   ` [dpdk-dev] [PATCH v2 1/9] event/dpaa2: remove dead code David Marchand
2020-10-31 18:28     ` Nipun Gupta
2020-10-28 12:20   ` [dpdk-dev] [PATCH v2 2/9] crypto/scheduler: remove unused internal seqn David Marchand
2020-10-28 12:20   ` [dpdk-dev] [PATCH v2 3/9] net/ark: remove use of seqn for debug David Marchand
2020-10-28 12:20   ` David Marchand [this message]
2020-10-28 12:54     ` [dpdk-dev] [PATCH v2 4/9] reorder: switch sequence number to dynamic mbuf field Andrew Rybchenko
2020-10-28 12:20   ` [dpdk-dev] [PATCH v2 5/9] dpaa: " David Marchand
2020-10-28 12:20   ` [dpdk-dev] [PATCH v2 6/9] fslmc: " David Marchand
2020-10-28 12:20   ` [dpdk-dev] [PATCH v2 7/9] eventdev: " David Marchand
2020-10-28 12:20   ` [dpdk-dev] [PATCH v2 8/9] app/eventdev: " David Marchand
2020-10-28 12:20   ` [dpdk-dev] [PATCH v2 9/9] mbuf: remove seqn field David Marchand
2020-10-31 21:09     ` Thomas Monjalon
2020-10-31 21:11   ` [dpdk-dev] [PATCH v2 0/9] remove mbuf seqn Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201028122013.31104-5-david.marchand@redhat.com \
    --to=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=mdr@ashroe.eu \
    --cc=nhorman@tuxdriver.com \
    --cc=reshma.pattan@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.