DPDK-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
	Thomas Monjalon <thomas@monjalon.net>,
	Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
	Ori Kam <orika@nvidia.com>
Subject: [PATCH 09/61] ethdev: replace use of rte_memcpy
Date: Wed, 19 Aug 2026 22:11:59 -0700	[thread overview]
Message-ID: <20260820052251.1453273-10-stephen@networkplumber.org> (raw)
In-Reply-To: <20260820052251.1453273-1-stephen@networkplumber.org>

The management of flows is better done using memcpy() or
structure assignment where compiler can do more bounds checks.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 lib/ethdev/rte_ethdev.c |   3 +-
 lib/ethdev/rte_flow.c   | 104 ++++++++++++++++++----------------------
 2 files changed, 47 insertions(+), 60 deletions(-)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 9efeaf77cb..faeb516093 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -16,7 +16,6 @@
 #include <rte_log.h>
 #include <rte_interrupts.h>
 #include <rte_kvargs.h>
-#include <rte_memcpy.h>
 #include <rte_common.h>
 #include <rte_mempool.h>
 #include <rte_malloc.h>
@@ -637,7 +636,7 @@ rte_eth_dev_owner_get(const uint16_t port_id, struct rte_eth_dev_owner *owner)
 	rte_spinlock_lock(rte_mcfg_ethdev_get_lock());
 
 	if (eth_dev_shared_data_prepare() != NULL) {
-		rte_memcpy(owner, &ethdev->data->owner, sizeof(*owner));
+		*owner = ethdev->data->owner;
 		ret = 0;
 	} else {
 		ret = -ENOMEM;
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index 60c9a3d06f..5b62a44052 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -66,7 +66,7 @@ rte_flow_conv_copy(void *buf, const void *data, const size_t size,
 	if (data == NULL)
 		return 0;
 	if (buf != NULL)
-		rte_memcpy(buf, data, (size > sz ? sz : size));
+		memcpy(buf, data, RTE_MIN(size, sz));
 	if (rte_type && desc[type].desc_fn)
 		sz += desc[type].desc_fn(size > 0 ? buf : NULL, data,
 					 size > sz ? size - sz : 0);
@@ -78,11 +78,8 @@ rte_flow_item_flex_conv(void *buf, const void *data, size_t size)
 {
 	struct rte_flow_item_flex *dst = buf;
 	const struct rte_flow_item_flex *src = data;
-	if (buf && size >= src->length) {
-		dst->pattern = rte_memcpy
-			((void *)((uintptr_t)(dst + 1)), src->pattern,
-			 src->length);
-	}
+	if (buf && size >= src->length)
+		dst->pattern = memcpy((void *)((uintptr_t)(dst + 1)), src->pattern, src->length);
 	return src->length;
 }
 
@@ -662,16 +659,16 @@ rte_flow_conv_item_spec(void *buf, const size_t size,
 		mask.raw = item->mask ? item->mask : &rte_flow_item_raw_mask;
 		src.raw = data;
 		dst.raw = buf;
-		rte_memcpy(dst.raw,
-			   (&(struct rte_flow_item_raw){
-				.relative = src.raw->relative,
-				.search = src.raw->search,
-				.reserved = src.raw->reserved,
-				.offset = src.raw->offset,
-				.limit = src.raw->limit,
-				.length = src.raw->length,
-			   }),
-			   size > sizeof(*dst.raw) ? sizeof(*dst.raw) : size);
+		memcpy(dst.raw,
+		       (&(struct rte_flow_item_raw){
+			       .relative = src.raw->relative,
+			       .search = src.raw->search,
+			       .reserved = src.raw->reserved,
+			       .offset = src.raw->offset,
+			       .limit = src.raw->limit,
+			       .length = src.raw->length,
+		       }),
+		       RTE_MIN(size, sizeof(*dst.raw)));
 		off = sizeof(*dst.raw);
 		if (type == RTE_FLOW_CONV_ITEM_SPEC && spec.raw)
 			tmp = spec.raw->length & mask.raw->length;
@@ -688,9 +685,7 @@ rte_flow_conv_item_spec(void *buf, const size_t size,
 			off = RTE_ALIGN_CEIL(off, sizeof(*dst.raw->pattern));
 			if (size >= off + tmp) {
 				deep_src = (void *)((uintptr_t)dst.raw + off);
-				dst.raw->pattern = rte_memcpy(deep_src,
-							      src.raw->pattern,
-							      tmp);
+				dst.raw->pattern = memcpy(deep_src, src.raw->pattern, tmp);
 			}
 			off += tmp;
 		}
@@ -704,9 +699,7 @@ rte_flow_conv_item_spec(void *buf, const size_t size,
 		tmp = spec.geneve_opt ? (spec.geneve_opt->option_len << 2) : 0;
 		if (size >= off + tmp && tmp > 0 && src.geneve_opt->data) {
 			deep_src = (void *)((uintptr_t)(dst.geneve_opt + 1));
-			dst.geneve_opt->data = rte_memcpy(deep_src,
-							  src.geneve_opt->data,
-							  tmp);
+			dst.geneve_opt->data = memcpy(deep_src, src.geneve_opt->data, tmp);
 		}
 		off += tmp;
 		break;
@@ -756,32 +749,30 @@ rte_flow_conv_action_conf(void *buf, const size_t size,
 	case RTE_FLOW_ACTION_TYPE_RSS:
 		src.rss = action->conf;
 		dst.rss = buf;
-		rte_memcpy(dst.rss,
-			   (&(struct rte_flow_action_rss){
-				.func = src.rss->func,
-				.level = src.rss->level,
-				.types = src.rss->types,
-				.key_len = src.rss->key_len,
-				.queue_num = src.rss->queue_num,
-			   }),
-			   size > sizeof(*dst.rss) ? sizeof(*dst.rss) : size);
+		memcpy(dst.rss,
+		       (&(struct rte_flow_action_rss){
+			       .func = src.rss->func,
+			       .level = src.rss->level,
+			       .types = src.rss->types,
+			       .key_len = src.rss->key_len,
+			       .queue_num = src.rss->queue_num,
+		       }),
+		       RTE_MIN(size, sizeof(*dst.rss)));
 		off = sizeof(*dst.rss);
 		if (src.rss->key_len && src.rss->key) {
 			off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->key));
 			tmp = sizeof(*src.rss->key) * src.rss->key_len;
 			if (size >= (uint64_t)off + (uint64_t)tmp)
-				dst.rss->key = rte_memcpy
-					((void *)((uintptr_t)dst.rss + off),
-					 src.rss->key, tmp);
+				dst.rss->key = memcpy((void *)((uintptr_t)dst.rss + off),
+						      src.rss->key, tmp);
 			off += tmp;
 		}
 		if (src.rss->queue_num) {
 			off = RTE_ALIGN_CEIL(off, sizeof(*dst.rss->queue));
 			tmp = sizeof(*src.rss->queue) * src.rss->queue_num;
 			if (size >= (uint64_t)off + (uint64_t)tmp)
-				dst.rss->queue = rte_memcpy
-					((void *)((uintptr_t)dst.rss + off),
-					 src.rss->queue, tmp);
+				dst.rss->queue = memcpy((void *)((uintptr_t)dst.rss + off),
+							src.rss->queue, tmp);
 			off += tmp;
 		}
 		break;
@@ -1023,20 +1014,19 @@ rte_flow_conv_rule(struct rte_flow_conv_rule *dst,
 	size_t off;
 	int ret;
 
-	rte_memcpy(dst,
-		   (&(struct rte_flow_conv_rule){
-			.attr = NULL,
-			.pattern = NULL,
-			.actions = NULL,
-		   }),
-		   size > sizeof(*dst) ? sizeof(*dst) : size);
+	memcpy(dst,
+	       (&(struct rte_flow_conv_rule){
+		       .attr = NULL,
+		       .pattern = NULL,
+		       .actions = NULL,
+	       }),
+	       RTE_MIN(size, sizeof(*dst)));
 	off = sizeof(*dst);
 	if (src->attr_ro) {
 		off = RTE_ALIGN_CEIL(off, sizeof(double));
 		if (size && size >= off + sizeof(*dst->attr))
-			dst->attr = rte_memcpy
-				((void *)((uintptr_t)dst + off),
-				 src->attr_ro, sizeof(*dst->attr));
+			dst->attr = memcpy((void *)((uintptr_t)dst + off),
+					   src->attr_ro, sizeof(*dst->attr));
 		off += sizeof(*dst->attr);
 	}
 	if (src->pattern_ro) {
@@ -1138,9 +1128,7 @@ rte_flow_conv(enum rte_flow_conv_op op,
 		break;
 	case RTE_FLOW_CONV_OP_ATTR:
 		attr = src;
-		if (size > sizeof(*attr))
-			size = sizeof(*attr);
-		rte_memcpy(dst, attr, size);
+		memcpy(dst, attr, RTE_MIN(size, sizeof(*attr)));
 		ret = sizeof(*attr);
 		break;
 	case RTE_FLOW_CONV_OP_ITEM:
@@ -1232,14 +1220,14 @@ rte_flow_copy(struct rte_flow_desc *desc, size_t len,
 	if (ret < 0)
 		return 0;
 	ret += sizeof(*desc) - sizeof(*dst);
-	rte_memcpy(desc,
-		   (&(struct rte_flow_desc){
-			.size = ret,
-			.attr = *attr,
-			.items = dst_size ? dst->pattern : NULL,
-			.actions = dst_size ? dst->actions : NULL,
-		   }),
-		   len > sizeof(*desc) ? sizeof(*desc) : len);
+	memcpy(desc,
+	       (&(struct rte_flow_desc){
+		       .size = ret,
+		       .attr = *attr,
+		       .items = dst_size ? dst->pattern : NULL,
+		       .actions = dst_size ? dst->actions : NULL,
+	       }),
+	       RTE_MIN(len, sizeof(*desc)));
 
 	rte_flow_trace_copy(desc, len, attr, items, actions, ret);
 
-- 
2.53.0


  parent reply	other threads:[~2026-08-20  5:23 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-20  5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
2026-08-20  5:11 ` [PATCH 01/61] devtools/cocci: add script to replace fixed size rte_memcpy Stephen Hemminger
2026-08-20  5:11 ` [PATCH 02/61] app/testpmd: replace rte_memcpy with memcpy Stephen Hemminger
2026-08-20  5:11 ` [PATCH 03/61] test: use memcpy instead of rte_memcpy Stephen Hemminger
2026-08-20  6:22   ` Morten Brørup
2026-08-20  5:11 ` [PATCH 04/61] app/graph: replace rte_memcpy with memcpy Stephen Hemminger
2026-08-20  5:11 ` [PATCH 05/61] lpm: remove unnecessary include of rte_memcpy.h Stephen Hemminger
2026-08-20  5:11 ` [PATCH 06/61] acl: " Stephen Hemminger
2026-08-20  5:11 ` [PATCH 07/61] drivers/bus: " Stephen Hemminger
2026-08-20  5:11 ` [PATCH 08/61] security: replace fixed size rte_memcpy Stephen Hemminger
2026-08-20  5:11 ` Stephen Hemminger [this message]
2026-08-20  5:12 ` [PATCH 10/61] net: replace use of rte_memcpy Stephen Hemminger
2026-08-20  5:12 ` [PATCH 11/61] pdcp: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 12/61] eventdev: replace fixed size rte_memcpy Stephen Hemminger
2026-08-20  5:12 ` [PATCH 13/61] eal: replace rte_memcpy of cpuset Stephen Hemminger
2026-08-20  5:12 ` [PATCH 14/61] cryptodev: replace use of rte_memcpy Stephen Hemminger
2026-08-20  5:12 ` [PATCH 15/61] drivers/raw: use memcpy for fixed size data Stephen Hemminger
2026-08-20  5:12 ` [PATCH 16/61] test-pipeline: replace use of rte_memcpy Stephen Hemminger
2026-08-20  5:12 ` [PATCH 17/61] net/af_xdp: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 18/61] net/avp: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 19/61] net/axgbe: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 20/61] net/bnx2x: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 21/61] net/bnxt: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 22/61] net/bonding: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 23/61] net/cnxk: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 24/61] net/cxgbe: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 25/61] net/dpaa2: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 26/61] net/enic: " Stephen Hemminger
2026-08-20  9:05   ` Hyong Youb Kim (hyonkim)
2026-08-20  5:12 ` [PATCH 27/61] net/failsafe: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 28/61] net/gve: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 29/61] net/hinic: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 30/61] net/hns3: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 31/61] net/mlx5: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 32/61] net/mvpp2: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 33/61] net/netvsc: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 34/61] net/nfp: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 35/61] net/ngbe: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 36/61] net/ntnic: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 37/61] net/null: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 38/61] net/qede: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 39/61] net/ring: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 40/61] net/sfc: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 41/61] net/txgbe: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 42/61] net/vhost: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 43/61] net/virtio: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 44/61] net/sxe2: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 45/61] net/zxdh: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 46/61] net/memif: use memcpy for fixed size data Stephen Hemminger
2026-08-20  5:12 ` [PATCH 47/61] net/ice: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 48/61] test-bbdev: remove unnecessary include rte_memcpy.h Stephen Hemminger
2026-08-20  5:12 ` [PATCH 49/61] drivers/mempool: use memcpy for fixed size data Stephen Hemminger
2026-08-20  5:12 ` [PATCH 50/61] ml/cnxk: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 51/61] drivers/event: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 52/61] baseband/la12xx: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 53/61] baseband/acc: replace use of rte_memcpy Stephen Hemminger
2026-08-20  5:12 ` [PATCH 54/61] drivers/*/qat: use memcpy for fixed size data Stephen Hemminger
2026-08-20  5:12 ` [PATCH 55/61] hash: replace use of rte_memcpy Stephen Hemminger
2026-08-20  5:12 ` [PATCH 56/61] rib: remove rte_memcpy include Stephen Hemminger
2026-08-20  5:12 ` [PATCH 57/61] pcapng: replace use of rte_memcpy Stephen Hemminger
2026-08-20  5:12 ` [PATCH 58/61] efd: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 59/61] net/xsc: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 60/61] net/pcap: " Stephen Hemminger
2026-08-20  5:12 ` [PATCH 61/61] power: " Stephen Hemminger
2026-08-20  7:31 ` [PATCH 00/61] reduce " Morten Brørup
2026-08-20  8:16   ` Bruce Richardson
2026-08-20  8:46   ` Konstantin Ananyev
2026-08-20  9:03     ` Morten Brørup

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=20260820052251.1453273-10-stephen@networkplumber.org \
    --to=stephen@networkplumber.org \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=orika@nvidia.com \
    --cc=thomas@monjalon.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox