* [PATCH 01/61] devtools/cocci: add script to replace fixed size rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
@ 2026-08-20 5:11 ` Stephen Hemminger
2026-08-20 5:11 ` [PATCH 02/61] app/testpmd: replace rte_memcpy with memcpy Stephen Hemminger
` (60 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:11 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
Rte_memcpy need not be used for the simple case of copying
a fix sized because it is not faster and will hide problems
from code analysis tools. Static and dynamic analyzers
special case memcpy() and can find issues that rte_memcpy()
will hide.
Note: many platforms use memcpy instead of rte_memcpy already.
The only reason rte_memcpy() was added in original DPDK was that
the older Gcc was doing slower on x86 than the special rte_memcpy()
when handling larger size copies.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
devtools/cocci/rte_memcpy_fixed.cocci | 15 +++++++++++++++
1 file changed, 15 insertions(+)
create mode 100644 devtools/cocci/rte_memcpy_fixed.cocci
diff --git a/devtools/cocci/rte_memcpy_fixed.cocci b/devtools/cocci/rte_memcpy_fixed.cocci
new file mode 100644
index 0000000000..1f264711eb
--- /dev/null
+++ b/devtools/cocci/rte_memcpy_fixed.cocci
@@ -0,0 +1,15 @@
+//
+// rte_memcpy should not be used for simple fixed size structure
+// because compiler's are smart enough to inline these.
+//
+@@
+expression src, dst, E;
+constant size;
+@@
+(
+- rte_memcpy(dst, src, sizeof(E))
++ memcpy(dst, src, sizeof(E))
+|
+- rte_memcpy(dst, src, size)
++ memcpy(dst, src, size)
+)
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 02/61] app/testpmd: replace rte_memcpy with memcpy
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 ` Stephen Hemminger
2026-08-20 5:11 ` [PATCH 03/61] test: use memcpy instead of rte_memcpy Stephen Hemminger
` (59 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:11 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Aman Singh, Ori Kam
The standard C library memcpy is as fast and has more
checking by analysis tools than DPDK rte_memcpy.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-pmd/cmdline.c | 28 ++++++++++++++--------------
app/test-pmd/cmdline_flow.c | 34 +++++++++++++++++-----------------
app/test-pmd/config.c | 13 ++++++-------
app/test-pmd/csumonly.c | 1 -
app/test-pmd/flowgen.c | 1 -
app/test-pmd/iofwd.c | 1 -
app/test-pmd/macfwd.c | 1 -
app/test-pmd/macswap.c | 1 -
app/test-pmd/noisy_vnf.c | 1 -
app/test-pmd/rxonly.c | 1 -
app/test-pmd/testpmd.c | 1 -
app/test-pmd/txonly.c | 7 +++----
12 files changed, 40 insertions(+), 50 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 10ee7c5179..40aad7effa 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -10516,7 +10516,7 @@ static void cmd_set_vxlan_parsed(void *parsed_result,
vxlan_encap_conf.select_ipv4 = 0;
else
return;
- rte_memcpy(vxlan_encap_conf.vni, &id.vni[1], 3);
+ memcpy(vxlan_encap_conf.vni, &id.vni[1], 3);
vxlan_encap_conf.udp_src = rte_cpu_to_be_16(res->udp_src);
vxlan_encap_conf.udp_dst = rte_cpu_to_be_16(res->udp_dst);
vxlan_encap_conf.ip_tos = res->tos;
@@ -10530,9 +10530,9 @@ static void cmd_set_vxlan_parsed(void *parsed_result,
}
if (vxlan_encap_conf.select_vlan)
vxlan_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci);
- rte_memcpy(vxlan_encap_conf.eth_src, res->eth_src.addr_bytes,
+ memcpy(vxlan_encap_conf.eth_src, res->eth_src.addr_bytes,
RTE_ETHER_ADDR_LEN);
- rte_memcpy(vxlan_encap_conf.eth_dst, res->eth_dst.addr_bytes,
+ memcpy(vxlan_encap_conf.eth_dst, res->eth_dst.addr_bytes,
RTE_ETHER_ADDR_LEN);
}
@@ -10711,7 +10711,7 @@ static void cmd_set_nvgre_parsed(void *parsed_result,
nvgre_encap_conf.select_ipv4 = 0;
else
return;
- rte_memcpy(nvgre_encap_conf.tni, &id.tni[1], 3);
+ memcpy(nvgre_encap_conf.tni, &id.tni[1], 3);
if (nvgre_encap_conf.select_ipv4) {
IPV4_ADDR_TO_UINT(res->ip_src, nvgre_encap_conf.ipv4_src);
IPV4_ADDR_TO_UINT(res->ip_dst, nvgre_encap_conf.ipv4_dst);
@@ -10721,9 +10721,9 @@ static void cmd_set_nvgre_parsed(void *parsed_result,
}
if (nvgre_encap_conf.select_vlan)
nvgre_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci);
- rte_memcpy(nvgre_encap_conf.eth_src, res->eth_src.addr_bytes,
+ memcpy(nvgre_encap_conf.eth_src, res->eth_src.addr_bytes,
RTE_ETHER_ADDR_LEN);
- rte_memcpy(nvgre_encap_conf.eth_dst, res->eth_dst.addr_bytes,
+ memcpy(nvgre_encap_conf.eth_dst, res->eth_dst.addr_bytes,
RTE_ETHER_ADDR_LEN);
}
@@ -10838,9 +10838,9 @@ static void cmd_set_l2_encap_parsed(void *parsed_result,
return;
if (l2_encap_conf.select_vlan)
l2_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci);
- rte_memcpy(l2_encap_conf.eth_src, res->eth_src.addr_bytes,
+ memcpy(l2_encap_conf.eth_src, res->eth_src.addr_bytes,
RTE_ETHER_ADDR_LEN);
- rte_memcpy(l2_encap_conf.eth_dst, res->eth_dst.addr_bytes,
+ memcpy(l2_encap_conf.eth_dst, res->eth_dst.addr_bytes,
RTE_ETHER_ADDR_LEN);
}
@@ -11020,7 +11020,7 @@ static void cmd_set_mplsogre_encap_parsed(void *parsed_result,
mplsogre_encap_conf.select_ipv4 = 0;
else
return;
- rte_memcpy(mplsogre_encap_conf.label, &id.label, 3);
+ memcpy(mplsogre_encap_conf.label, &id.label, 3);
if (mplsogre_encap_conf.select_ipv4) {
IPV4_ADDR_TO_UINT(res->ip_src, mplsogre_encap_conf.ipv4_src);
IPV4_ADDR_TO_UINT(res->ip_dst, mplsogre_encap_conf.ipv4_dst);
@@ -11030,9 +11030,9 @@ static void cmd_set_mplsogre_encap_parsed(void *parsed_result,
}
if (mplsogre_encap_conf.select_vlan)
mplsogre_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci);
- rte_memcpy(mplsogre_encap_conf.eth_src, res->eth_src.addr_bytes,
+ memcpy(mplsogre_encap_conf.eth_src, res->eth_src.addr_bytes,
RTE_ETHER_ADDR_LEN);
- rte_memcpy(mplsogre_encap_conf.eth_dst, res->eth_dst.addr_bytes,
+ memcpy(mplsogre_encap_conf.eth_dst, res->eth_dst.addr_bytes,
RTE_ETHER_ADDR_LEN);
}
@@ -11256,7 +11256,7 @@ static void cmd_set_mplsoudp_encap_parsed(void *parsed_result,
mplsoudp_encap_conf.select_ipv4 = 0;
else
return;
- rte_memcpy(mplsoudp_encap_conf.label, &id.label, 3);
+ memcpy(mplsoudp_encap_conf.label, &id.label, 3);
mplsoudp_encap_conf.udp_src = rte_cpu_to_be_16(res->udp_src);
mplsoudp_encap_conf.udp_dst = rte_cpu_to_be_16(res->udp_dst);
if (mplsoudp_encap_conf.select_ipv4) {
@@ -11268,9 +11268,9 @@ static void cmd_set_mplsoudp_encap_parsed(void *parsed_result,
}
if (mplsoudp_encap_conf.select_vlan)
mplsoudp_encap_conf.vlan_tci = rte_cpu_to_be_16(res->tci);
- rte_memcpy(mplsoudp_encap_conf.eth_src, res->eth_src.addr_bytes,
+ memcpy(mplsoudp_encap_conf.eth_src, res->eth_src.addr_bytes,
RTE_ETHER_ADDR_LEN);
- rte_memcpy(mplsoudp_encap_conf.eth_dst, res->eth_dst.addr_bytes,
+ memcpy(mplsoudp_encap_conf.eth_dst, res->eth_dst.addr_bytes,
RTE_ETHER_ADDR_LEN);
}
diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index fbbe36233b..fc98c42c61 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -13967,31 +13967,31 @@ cmd_set_raw_parsed_sample(const struct buffer *in)
switch (action->type) {
case RTE_FLOW_ACTION_TYPE_MARK:
size = sizeof(struct rte_flow_action_mark);
- rte_memcpy(&sample_mark[idx],
+ memcpy(&sample_mark[idx],
(const void *)action->conf, size);
action->conf = &sample_mark[idx];
break;
case RTE_FLOW_ACTION_TYPE_COUNT:
size = sizeof(struct rte_flow_action_count);
- rte_memcpy(&sample_count[idx],
+ memcpy(&sample_count[idx],
(const void *)action->conf, size);
action->conf = &sample_count[idx];
break;
case RTE_FLOW_ACTION_TYPE_QUEUE:
size = sizeof(struct rte_flow_action_queue);
- rte_memcpy(&sample_queue[idx],
+ memcpy(&sample_queue[idx],
(const void *)action->conf, size);
action->conf = &sample_queue[idx];
break;
case RTE_FLOW_ACTION_TYPE_RSS:
size = sizeof(struct rte_flow_action_rss);
rss = action->conf;
- rte_memcpy(&sample_rss_data[idx].conf,
+ memcpy(&sample_rss_data[idx].conf,
(const void *)rss, size);
if (rss->key_len && rss->key) {
sample_rss_data[idx].conf.key =
sample_rss_data[idx].key;
- rte_memcpy((void *)((uintptr_t)
+ memcpy((void *)((uintptr_t)
sample_rss_data[idx].conf.key),
(const void *)rss->key,
sizeof(uint8_t) * rss->key_len);
@@ -13999,7 +13999,7 @@ cmd_set_raw_parsed_sample(const struct buffer *in)
if (rss->queue_num && rss->queue) {
sample_rss_data[idx].conf.queue =
sample_rss_data[idx].queue;
- rte_memcpy((void *)((uintptr_t)
+ memcpy((void *)((uintptr_t)
sample_rss_data[idx].conf.queue),
(const void *)rss->queue,
sizeof(uint16_t) * rss->queue_num);
@@ -14008,13 +14008,13 @@ cmd_set_raw_parsed_sample(const struct buffer *in)
break;
case RTE_FLOW_ACTION_TYPE_RAW_ENCAP:
size = sizeof(struct rte_flow_action_raw_encap);
- rte_memcpy(&sample_encap[idx],
+ memcpy(&sample_encap[idx],
(const void *)action->conf, size);
action->conf = &sample_encap[idx];
break;
case RTE_FLOW_ACTION_TYPE_PORT_ID:
size = sizeof(struct rte_flow_action_port_id);
- rte_memcpy(&sample_port_id[idx],
+ memcpy(&sample_port_id[idx],
(const void *)action->conf, size);
action->conf = &sample_port_id[idx];
break;
@@ -14022,7 +14022,7 @@ cmd_set_raw_parsed_sample(const struct buffer *in)
break;
case RTE_FLOW_ACTION_TYPE_VF:
size = sizeof(struct rte_flow_action_vf);
- rte_memcpy(&sample_vf[idx],
+ memcpy(&sample_vf[idx],
(const void *)action->conf, size);
action->conf = &sample_vf[idx];
break;
@@ -14038,13 +14038,13 @@ cmd_set_raw_parsed_sample(const struct buffer *in)
break;
case RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR:
size = sizeof(struct rte_flow_action_ethdev);
- rte_memcpy(&sample_port_representor[idx],
+ memcpy(&sample_port_representor[idx],
(const void *)action->conf, size);
action->conf = &sample_port_representor[idx];
break;
case RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT:
size = sizeof(struct rte_flow_action_ethdev);
- rte_memcpy(&sample_represented_port[idx],
+ memcpy(&sample_represented_port[idx],
(const void *)action->conf, size);
action->conf = &sample_represented_port[idx];
break;
@@ -14177,7 +14177,7 @@ cmd_set_raw_parsed(const struct buffer *in)
if (geneve_opt->option_len && geneve_opt->data) {
*total_size += geneve_opt->option_len *
sizeof(uint32_t);
- rte_memcpy(data_tail - (*total_size),
+ memcpy(data_tail - (*total_size),
geneve_opt->data,
geneve_opt->option_len * sizeof(uint32_t));
}
@@ -14217,7 +14217,7 @@ cmd_set_raw_parsed(const struct buffer *in)
/* We have to add GTP header extra word. */
*total_size += sizeof(ext_word);
- rte_memcpy(data_tail - (*total_size),
+ memcpy(data_tail - (*total_size),
&ext_word, sizeof(ext_word));
}
size = sizeof(struct rte_gtp_hdr);
@@ -14263,19 +14263,19 @@ cmd_set_raw_parsed(const struct buffer *in)
if (gre_opt->checksum_rsvd.checksum) {
*total_size +=
sizeof(gre_opt->checksum_rsvd);
- rte_memcpy(data_tail - (*total_size),
+ memcpy(data_tail - (*total_size),
&gre_opt->checksum_rsvd,
sizeof(gre_opt->checksum_rsvd));
}
if (gre_opt->key.key) {
*total_size += sizeof(gre_opt->key.key);
- rte_memcpy(data_tail - (*total_size),
+ memcpy(data_tail - (*total_size),
&gre_opt->key.key,
sizeof(gre_opt->key.key));
}
if (gre_opt->sequence.sequence) {
*total_size += sizeof(gre_opt->sequence.sequence);
- rte_memcpy(data_tail - (*total_size),
+ memcpy(data_tail - (*total_size),
&gre_opt->sequence.sequence,
sizeof(gre_opt->sequence.sequence));
}
@@ -14288,7 +14288,7 @@ cmd_set_raw_parsed(const struct buffer *in)
}
if (size) {
*total_size += size;
- rte_memcpy(data_tail - (*total_size), src_spec, size);
+ memcpy(data_tail - (*total_size), src_spec, size);
/* update some fields which cannot be set by cmdline */
update_fields((data_tail - (*total_size)), item,
upper_layer);
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index aa03eb99cc..7810143383 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -24,7 +24,6 @@
#include <rte_debug.h>
#include <rte_log.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_memzone.h>
#include <rte_launch.h>
#include <rte_bus.h>
@@ -2263,9 +2262,9 @@ port_flow_tunnel_offload_cmd_prep(portid_t port_id,
pft->num_pmd_actions, &error);
return NULL;
}
- rte_memcpy(pft->actions, pft->pmd_actions,
+ memcpy(pft->actions, pft->pmd_actions,
pft->num_pmd_actions * sizeof(actions[0]));
- rte_memcpy(pft->actions + pft->num_pmd_actions, actions,
+ memcpy(pft->actions + pft->num_pmd_actions, actions,
num_actions * sizeof(actions[0]));
}
if (tunnel_ops->items) {
@@ -2291,9 +2290,9 @@ port_flow_tunnel_offload_cmd_prep(portid_t port_id,
pft->num_pmd_items, &error);
return NULL;
}
- rte_memcpy(pft->items, pft->pmd_items,
+ memcpy(pft->items, pft->pmd_items,
pft->num_pmd_items * sizeof(pattern[0]));
- rte_memcpy(pft->items + pft->num_pmd_items, pattern,
+ memcpy(pft->items + pft->num_pmd_items, pattern,
num_items * sizeof(pattern[0]));
}
@@ -2731,7 +2730,7 @@ port_flow_template_table_create(portid_t port_id, uint32_t id,
}
pt->nb_pattern_templates = nb_pattern_templates;
pt->nb_actions_templates = nb_actions_templates;
- rte_memcpy(&pt->attr, table_attr,
+ memcpy(&pt->attr, table_attr,
sizeof(struct rte_flow_template_table_attr));
printf("Template table #%u created\n", pt->id);
return 0;
@@ -3367,7 +3366,7 @@ port_queue_action_handle_update(portid_t port_id,
update = action->conf;
break;
case RTE_FLOW_ACTION_TYPE_METER_MARK:
- rte_memcpy(&mtr_update.meter_mark, action->conf,
+ memcpy(&mtr_update.meter_mark, action->conf,
sizeof(struct rte_flow_action_meter_mark));
if (mtr_update.meter_mark.profile)
mtr_update.profile_valid = 1;
diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index c841651756..7de2cf3b08 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -19,7 +19,6 @@
#include <rte_debug.h>
#include <rte_cycles.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
diff --git a/app/test-pmd/flowgen.c b/app/test-pmd/flowgen.c
index 8dac7b9209..1ec5b30071 100644
--- a/app/test-pmd/flowgen.c
+++ b/app/test-pmd/flowgen.c
@@ -19,7 +19,6 @@
#include <rte_debug.h>
#include <rte_cycles.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
diff --git a/app/test-pmd/iofwd.c b/app/test-pmd/iofwd.c
index ba06fae4a6..c9727d2856 100644
--- a/app/test-pmd/iofwd.c
+++ b/app/test-pmd/iofwd.c
@@ -24,7 +24,6 @@
#include <rte_per_lcore.h>
#include <rte_lcore.h>
#include <rte_branch_prediction.h>
-#include <rte_memcpy.h>
#include <rte_mempool.h>
#include <rte_mbuf.h>
#include <rte_interrupts.h>
diff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c
index d19ace7395..ba63aedd79 100644
--- a/app/test-pmd/macfwd.c
+++ b/app/test-pmd/macfwd.c
@@ -19,7 +19,6 @@
#include <rte_debug.h>
#include <rte_cycles.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
diff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c
index 57f77003fe..e1f9be4901 100644
--- a/app/test-pmd/macswap.c
+++ b/app/test-pmd/macswap.c
@@ -19,7 +19,6 @@
#include <rte_debug.h>
#include <rte_cycles.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
diff --git a/app/test-pmd/noisy_vnf.c b/app/test-pmd/noisy_vnf.c
index 81d1187cfe..cf951e9532 100644
--- a/app/test-pmd/noisy_vnf.c
+++ b/app/test-pmd/noisy_vnf.c
@@ -24,7 +24,6 @@
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_lcore.h>
-#include <rte_memcpy.h>
#include <rte_mempool.h>
#include <rte_mbuf.h>
#include <rte_ethdev.h>
diff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c
index 315f9286cd..cc73cf4ebf 100644
--- a/app/test-pmd/rxonly.c
+++ b/app/test-pmd/rxonly.c
@@ -19,7 +19,6 @@
#include <rte_debug.h>
#include <rte_cycles.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index cab2fa1556..138f167caf 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -30,7 +30,6 @@
#include <rte_debug.h>
#include <rte_cycles.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_bus.h>
#include <rte_eal.h>
diff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c
index a4acb85d29..5b8b3befa5 100644
--- a/app/test-pmd/txonly.c
+++ b/app/test-pmd/txonly.c
@@ -19,7 +19,6 @@
#include <rte_debug.h>
#include <rte_cycles.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
@@ -80,21 +79,21 @@ copy_buf_to_pkt_segs(void* buf, unsigned len, struct rte_mbuf *pkt,
copy_len = seg->data_len - offset;
seg_buf = rte_pktmbuf_mtod_offset(seg, char *, offset);
while (len > copy_len) {
- rte_memcpy(seg_buf, buf, (size_t) copy_len);
+ memcpy(seg_buf, buf, (size_t) copy_len);
len -= copy_len;
buf = ((char*) buf + copy_len);
seg = seg->next;
seg_buf = rte_pktmbuf_mtod(seg, char *);
copy_len = seg->data_len;
}
- rte_memcpy(seg_buf, buf, (size_t) len);
+ memcpy(seg_buf, buf, (size_t) len);
}
static inline void
copy_buf_to_pkt(void* buf, unsigned len, struct rte_mbuf *pkt, unsigned offset)
{
if (offset + len <= pkt->data_len) {
- rte_memcpy(rte_pktmbuf_mtod_offset(pkt, char *, offset),
+ memcpy(rte_pktmbuf_mtod_offset(pkt, char *, offset),
buf, (size_t) len);
return;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 03/61] test: use memcpy instead of rte_memcpy
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 ` 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
` (58 subsequent siblings)
61 siblings, 1 reply; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:11 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Konstantin Ananyev, Marat Khalili,
Jasvinder Singh, Akhil Goyal, Fan Zhang, Yipeng Wang,
Abhinandan Gujjar, Jerin Jacob, Chas Williams, Min Hu (Connor),
Morten Brørup, Sameh Gobriel, Sachin Saxena, Hemant Agrawal,
Wathsala Vithanage, Anoob Joseph, Bruce Richardson,
Vladimir Medvedkin
If size is constant, better to use C library memcpy
which has more coverage from ASAN and static analysis tools.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test/commands.c | 1 -
app/test/packet_burst_generator.c | 10 +++---
app/test/test_bpf.c | 1 +
app/test/test_crc.c | 7 ++---
app/test/test_cryptodev.c | 14 ++++-----
app/test/test_cryptodev.h | 1 +
app/test/test_cryptodev_asym.c | 1 -
app/test/test_cryptodev_security_pdcp.c | 1 -
app/test/test_efd.c | 1 -
app/test/test_efd_perf.c | 1 -
app/test/test_event_crypto_adapter.c | 12 +++----
app/test/test_eventdev.c | 1 -
app/test/test_link_bonding_mode4.c | 8 ++---
app/test/test_mbuf.c | 1 -
app/test/test_member.c | 1 -
app/test/test_member_perf.c | 1 -
app/test/test_rawdev.c | 1 -
app/test/test_ring.h | 17 +++++-----
app/test/test_security_inline_macsec.c | 2 +-
app/test/test_security_inline_proto.c | 42 ++++++++++++-------------
app/test/test_security_proto.c | 2 +-
app/test/test_service_cores.c | 1 -
app/test/test_thash.c | 4 +--
app/test/virtual_pmd.c | 5 +--
24 files changed, 62 insertions(+), 74 deletions(-)
diff --git a/app/test/commands.c b/app/test/commands.c
index 497d8e9952..74494a0ef4 100644
--- a/app/test/commands.c
+++ b/app/test/commands.c
@@ -16,7 +16,6 @@
#include <rte_log.h>
#include <rte_debug.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_memzone.h>
#include <rte_launch.h>
#include <rte_cycles.h>
diff --git a/app/test/packet_burst_generator.c b/app/test/packet_burst_generator.c
index 4c17737739..2f1d75c5bc 100644
--- a/app/test/packet_burst_generator.c
+++ b/app/test/packet_burst_generator.c
@@ -31,20 +31,20 @@ copy_buf_to_pkt_segs(void *buf, unsigned len, struct rte_mbuf *pkt,
copy_len = seg->data_len - offset;
seg_buf = rte_pktmbuf_mtod_offset(seg, char *, offset);
while (len > copy_len) {
- rte_memcpy(seg_buf, buf, (size_t) copy_len);
+ memcpy(seg_buf, buf, (size_t) copy_len);
len -= copy_len;
buf = ((char *) buf + copy_len);
seg = seg->next;
seg_buf = rte_pktmbuf_mtod(seg, void *);
}
- rte_memcpy(seg_buf, buf, (size_t) len);
+ memcpy(seg_buf, buf, (size_t) len);
}
static inline void
copy_buf_to_pkt(void *buf, unsigned len, struct rte_mbuf *pkt, unsigned offset)
{
if (offset + len <= pkt->data_len) {
- rte_memcpy(rte_pktmbuf_mtod_offset(pkt, char *, offset), buf,
+ memcpy(rte_pktmbuf_mtod_offset(pkt, char *, offset), buf,
(size_t) len);
return;
}
@@ -148,8 +148,8 @@ initialize_ipv6_header(struct rte_ipv6_hdr *ip_hdr, uint8_t *src_addr,
ip_hdr->proto = IPPROTO_UDP;
ip_hdr->hop_limits = IP_DEFTTL;
- rte_memcpy(&ip_hdr->src_addr, src_addr, sizeof(ip_hdr->src_addr));
- rte_memcpy(&ip_hdr->dst_addr, dst_addr, sizeof(ip_hdr->dst_addr));
+ memcpy(&ip_hdr->src_addr, src_addr, sizeof(ip_hdr->src_addr));
+ memcpy(&ip_hdr->dst_addr, dst_addr, sizeof(ip_hdr->dst_addr));
return (uint16_t) (pkt_data_len + sizeof(struct rte_ipv6_hdr));
}
diff --git a/app/test/test_bpf.c b/app/test/test_bpf.c
index 3205afaa63..bb5dc3015a 100644
--- a/app/test/test_bpf.c
+++ b/app/test/test_bpf.c
@@ -12,6 +12,7 @@
#include <rte_debug.h>
#include <rte_hexdump.h>
#include <rte_malloc.h>
+#include <rte_memcpy.h>
#include <rte_random.h>
#include <rte_byteorder.h>
#include <rte_errno.h>
diff --git a/app/test/test_crc.c b/app/test/test_crc.c
index 11645d323d..3494b88120 100644
--- a/app/test/test_crc.c
+++ b/app/test/test_crc.c
@@ -6,7 +6,6 @@
#include <rte_hexdump.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_net_crc.h>
#define CRC_VEC_LEN 32
@@ -116,14 +115,14 @@ crc_autotest(void)
if (test_data == NULL)
return -7;
for (i = 0; i < CRC32_VEC_LEN1; i += 12)
- rte_memcpy(&test_data[i], crc32_vec1, 12);
+ memcpy(&test_data[i], crc32_vec1, 12);
ret |= crc_all_algs("32-bit ethernet CRC: Test 2", RTE_NET_CRC32_ETH, test_data,
CRC32_VEC_LEN1, crc32_vec1_res);
/* 32-bit ethernet CRC: Test 3 */
memset(test_data, 0, CRC32_VEC_LEN1);
for (i = 0; i < CRC32_VEC_LEN2; i += 12)
- rte_memcpy(&test_data[i], crc32_vec1, 12);
+ memcpy(&test_data[i], crc32_vec1, 12);
ret |= crc_all_algs("32-bit ethernet CRC: Test 3", RTE_NET_CRC32_ETH, test_data,
CRC32_VEC_LEN2, crc32_vec2_res);
@@ -142,7 +141,7 @@ crc_autotest(void)
/* 16-bit CCITT CRC: Test 7 */
memset(test_data, 0, CRC32_VEC_LEN1);
for (i = 0; i < CRC16_VEC_LEN3; i += 12)
- rte_memcpy(&test_data[i], crc16_vec1, 12);
+ memcpy(&test_data[i], crc16_vec1, 12);
ret |= crc_all_algs("16-bit CCITT CRC: Test 7", RTE_NET_CRC16_CCITT, test_data,
CRC16_VEC_LEN3, crc16_vec3_res);
return ret;
diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index fd02107baf..ec1616aacc 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -2711,8 +2711,8 @@ test_AES_CBC_HMAC_SHA1_encrypt_digest(void)
sym_op->auth.data.length = QUOTE_512_BYTES;
/* Copy IV at the end of the crypto operation */
- rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
- aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);
+ memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
+ aes_cbc_iv, CIPHER_IV_LENGTH_AES_CBC);
/* Set crypto operation cipher parameters */
sym_op->cipher.data.offset = 0;
@@ -2846,9 +2846,7 @@ test_AES_CBC_HMAC_SHA512_decrypt_perform(void *sess,
DIGEST_BYTE_LENGTH_SHA512);
TEST_ASSERT_NOT_NULL(ut_params->digest, "no room to append digest");
- rte_memcpy(ut_params->digest,
- digest,
- DIGEST_BYTE_LENGTH_SHA512);
+ memcpy(ut_params->digest, digest, DIGEST_BYTE_LENGTH_SHA512);
/* Generate Crypto op data structure */
ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
@@ -2871,8 +2869,8 @@ test_AES_CBC_HMAC_SHA512_decrypt_perform(void *sess,
sym_op->auth.data.length = QUOTE_512_BYTES;
/* Copy IV at the end of the crypto operation */
- rte_memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
- iv, CIPHER_IV_LENGTH_AES_CBC);
+ memcpy(rte_crypto_op_ctod_offset(ut_params->op, uint8_t *, IV_OFFSET),
+ iv, CIPHER_IV_LENGTH_AES_CBC);
sym_op->cipher.data.offset = 0;
sym_op->cipher.data.length = QUOTE_512_BYTES;
@@ -9238,7 +9236,7 @@ create_aead_operation(enum rte_crypto_aead_operation op,
uint8_t *, IV_OFFSET);
if (tdata->iv.len == 0) {
- rte_memcpy(iv_ptr, tdata->iv.data, AES_GCM_J0_LENGTH);
+ memcpy(iv_ptr, tdata->iv.data, AES_GCM_J0_LENGTH);
debug_hexdump(stdout, "iv:", iv_ptr,
AES_GCM_J0_LENGTH);
} else {
diff --git a/app/test/test_cryptodev.h b/app/test/test_cryptodev.h
index d125dea958..bdf2ed35ef 100644
--- a/app/test/test_cryptodev.h
+++ b/app/test/test_cryptodev.h
@@ -5,6 +5,7 @@
#define TEST_CRYPTODEV_H_
#include <rte_cryptodev.h>
+#include <rte_memcpy.h>
#include <rte_security.h>
#define MAX_NUM_OPS_INFLIGHT (4096)
diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c
index 7b8afe5f92..657cdc424c 100644
--- a/app/test/test_cryptodev_asym.c
+++ b/app/test/test_cryptodev_asym.c
@@ -8,7 +8,6 @@
#include <rte_hexdump.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_pause.h>
#include <rte_cryptodev.h>
diff --git a/app/test/test_cryptodev_security_pdcp.c b/app/test/test_cryptodev_security_pdcp.c
index a7641bab7a..39926cbee3 100644
--- a/app/test/test_cryptodev_security_pdcp.c
+++ b/app/test/test_cryptodev_security_pdcp.c
@@ -10,7 +10,6 @@
#include <rte_hexdump.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_pause.h>
#include <rte_bus_vdev.h>
#include <rte_byteorder.h>
diff --git a/app/test/test_efd.c b/app/test/test_efd.c
index 4a4379c563..5f64f6c650 100644
--- a/app/test/test_efd.c
+++ b/app/test/test_efd.c
@@ -13,7 +13,6 @@ test_efd(void)
#else
-#include <rte_memcpy.h>
#include <rte_malloc.h>
#include <rte_efd.h>
#include <rte_byteorder.h>
diff --git a/app/test/test_efd_perf.c b/app/test/test_efd_perf.c
index b212e96767..7f5a8b9a56 100644
--- a/app/test/test_efd_perf.c
+++ b/app/test/test_efd_perf.c
@@ -22,7 +22,6 @@ test_efd_perf(void)
#include <rte_malloc.h>
#include <rte_random.h>
#include <rte_efd.h>
-#include <rte_memcpy.h>
#include <rte_thash.h>
#define NUM_KEYSIZES 10
diff --git a/app/test/test_event_crypto_adapter.c b/app/test/test_event_crypto_adapter.c
index cac1584f40..3321fbc04e 100644
--- a/app/test/test_event_crypto_adapter.c
+++ b/app/test/test_event_crypto_adapter.c
@@ -454,7 +454,7 @@ test_op_forward_mode(uint8_t session_less)
m_data.request_info.cdev_id = request_info.cdev_id;
m_data.request_info.queue_pair_id = request_info.queue_pair_id;
m_data.response_info.event = response_info.event;
- rte_memcpy((uint8_t *)op + len, &m_data, sizeof(m_data));
+ memcpy((uint8_t *)op + len, &m_data, sizeof(m_data));
}
sym_op->m_src = m;
@@ -653,8 +653,8 @@ test_asym_op_forward_mode(uint8_t session_less)
m_data.request_info.cdev_id = request_info.cdev_id;
m_data.request_info.queue_pair_id = request_info.queue_pair_id;
m_data.response_info.event = response_info.event;
- rte_memcpy((uint8_t *)op + op->private_data_offset,
- &m_data, sizeof(m_data));
+ memcpy((uint8_t *)op + op->private_data_offset, &m_data,
+ sizeof(m_data));
}
/* Fill in event info and update event_ptr with rte_crypto_op */
memset(&ev, 0, sizeof(ev));
@@ -820,7 +820,7 @@ test_op_new_mode(uint8_t session_less)
op->private_data_offset = len;
/* Fill in private data information */
m_data.response_info.event = response_info.event;
- rte_memcpy((uint8_t *)op + len, &m_data, sizeof(m_data));
+ memcpy((uint8_t *)op + len, &m_data, sizeof(m_data));
}
sym_op->m_src = m;
@@ -977,8 +977,8 @@ test_asym_op_new_mode(uint8_t session_less)
sizeof(struct rte_crypto_asym_xform));
/* Fill in private data information */
m_data.response_info.event = response_info.event;
- rte_memcpy((uint8_t *)op + op->private_data_offset,
- &m_data, sizeof(m_data));
+ memcpy((uint8_t *)op + op->private_data_offset, &m_data,
+ sizeof(m_data));
}
ret = send_op_recv_ev(op);
diff --git a/app/test/test_eventdev.c b/app/test/test_eventdev.c
index 1241da38cb..ab16b6fda9 100644
--- a/app/test/test_eventdev.c
+++ b/app/test/test_eventdev.c
@@ -8,7 +8,6 @@
#include <rte_hexdump.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#ifdef RTE_EXEC_ENV_WINDOWS
static int
diff --git a/app/test/test_link_bonding_mode4.c b/app/test/test_link_bonding_mode4.c
index ff13dbed93..e4827c1e80 100644
--- a/app/test/test_link_bonding_mode4.c
+++ b/app/test/test_link_bonding_mode4.c
@@ -1399,8 +1399,8 @@ test_mode4_ext_ctrl(void)
for (i = 0; i < MEMBER_COUNT; i++) {
lacp_tx_buf[i] = rte_pktmbuf_alloc(test_params.mbuf_pool);
- rte_memcpy(rte_pktmbuf_mtod(lacp_tx_buf[i], char *),
- &lacpdu, sizeof(lacpdu));
+ memcpy(rte_pktmbuf_mtod(lacp_tx_buf[i], char *), &lacpdu,
+ sizeof(lacpdu));
rte_pktmbuf_pkt_len(lacp_tx_buf[i]) = sizeof(lacpdu);
}
@@ -1453,8 +1453,8 @@ test_mode4_ext_lacp(void)
for (i = 0; i < MEMBER_COUNT; i++) {
lacp_tx_buf[i] = rte_pktmbuf_alloc(test_params.mbuf_pool);
- rte_memcpy(rte_pktmbuf_mtod(lacp_tx_buf[i], char *),
- &lacpdu, sizeof(lacpdu));
+ memcpy(rte_pktmbuf_mtod(lacp_tx_buf[i], char *), &lacpdu,
+ sizeof(lacpdu));
rte_pktmbuf_pkt_len(lacp_tx_buf[i]) = sizeof(lacpdu);
}
diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c
index db23259745..e0ad4eed13 100644
--- a/app/test/test_mbuf.c
+++ b/app/test/test_mbuf.c
@@ -19,7 +19,6 @@
#include <rte_debug.h>
#include <rte_log.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
diff --git a/app/test/test_member.c b/app/test/test_member.c
index 23447196c3..3b7e81314b 100644
--- a/app/test/test_member.c
+++ b/app/test/test_member.c
@@ -7,7 +7,6 @@
#include <math.h>
#include "test.h"
-#include <rte_memcpy.h>
#include <rte_malloc.h>
#ifdef RTE_EXEC_ENV_WINDOWS
diff --git a/app/test/test_member_perf.c b/app/test/test_member_perf.c
index db6b8a18ef..f40fdba91e 100644
--- a/app/test/test_member_perf.c
+++ b/app/test/test_member_perf.c
@@ -11,7 +11,6 @@
#include <rte_cycles.h>
#include <rte_malloc.h>
#include <rte_random.h>
-#include <rte_memcpy.h>
#include <rte_thash.h>
#include <math.h>
diff --git a/app/test/test_rawdev.c b/app/test/test_rawdev.c
index aece7b655c..daf599a48b 100644
--- a/app/test/test_rawdev.c
+++ b/app/test/test_rawdev.c
@@ -7,7 +7,6 @@
#include <rte_common.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_dev.h>
#ifdef RTE_EXEC_ENV_WINDOWS
diff --git a/app/test/test_ring.h b/app/test/test_ring.h
index 2e0ff9c1d6..934c09ee9e 100644
--- a/app/test/test_ring.h
+++ b/app/test/test_ring.h
@@ -2,8 +2,9 @@
* Copyright(c) 2019 Arm Limited
*/
+#include <string.h>
+
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_ptr_compress.h>
#include <rte_ring.h>
#include <rte_ring_elem.h>
@@ -166,11 +167,10 @@ test_ring_enqueue(struct rte_ring *r, void **obj, int esize, unsigned int n,
r, esize, n, &zcd, NULL);
if (unlikely(ret == 0))
return 0;
- rte_memcpy(zcd.ptr1, (char *)obj, zcd.n1 * esize);
+ memcpy(zcd.ptr1, (char *)obj, zcd.n1 * esize);
if (unlikely(zcd.ptr2 != NULL))
- rte_memcpy(zcd.ptr2,
- (char *)obj + zcd.n1 * esize,
- (ret - zcd.n1) * esize);
+ memcpy(zcd.ptr2, (char *)obj + zcd.n1 * esize,
+ (ret - zcd.n1) * esize);
rte_ring_enqueue_zc_finish(r, ret);
return ret;
case (TEST_RING_ELEM_BURST_ZC_COMPRESS_PTR_16):
@@ -271,11 +271,10 @@ test_ring_dequeue(struct rte_ring *r, void **obj, int esize, unsigned int n,
r, esize, n, &zcd, NULL);
if (unlikely(ret == 0))
return 0;
- rte_memcpy((char *)obj, zcd.ptr1, zcd.n1 * esize);
+ memcpy(obj, zcd.ptr1, zcd.n1 * esize);
if (unlikely(zcd.ptr2 != NULL))
- rte_memcpy((char *)obj + zcd.n1 * esize,
- zcd.ptr2,
- (ret - zcd.n1) * esize);
+ memcpy((char *)obj + zcd.n1 * esize,
+ zcd.ptr2, (ret - zcd.n1) * esize);
rte_ring_dequeue_zc_finish(r, ret);
return ret;
case (TEST_RING_ELEM_BURST_ZC_COMPRESS_PTR_16):
diff --git a/app/test/test_security_inline_macsec.c b/app/test/test_security_inline_macsec.c
index a929ff5326..d97925a5a7 100644
--- a/app/test/test_security_inline_macsec.c
+++ b/app/test/test_security_inline_macsec.c
@@ -128,7 +128,7 @@ init_packet(struct rte_mempool *mp, const uint8_t *data, unsigned int len)
if (pkt == NULL)
return NULL;
- rte_memcpy(rte_pktmbuf_append(pkt, len), data, len);
+ memcpy(rte_pktmbuf_append(pkt, len), data, len);
return pkt;
}
diff --git a/app/test/test_security_inline_proto.c b/app/test/test_security_inline_proto.c
index 0b1f7fbbab..209b04b92d 100644
--- a/app/test/test_security_inline_proto.c
+++ b/app/test/test_security_inline_proto.c
@@ -245,8 +245,8 @@ create_inline_ipsec_session(struct ipsec_test_data *sa, uint16_t portid,
/* Copy cipher session parameters */
if (sa->aead) {
- rte_memcpy(sess_conf->crypto_xform, &sa->xform.aead,
- sizeof(struct rte_crypto_sym_xform));
+ memcpy(sess_conf->crypto_xform, &sa->xform.aead,
+ sizeof(struct rte_crypto_sym_xform));
sess_conf->crypto_xform->aead.key.data = sa->key.data;
/* Verify crypto capabilities */
if (test_sec_crypto_caps_aead_verify(sec_cap, sess_conf->crypto_xform) != 0) {
@@ -256,13 +256,13 @@ create_inline_ipsec_session(struct ipsec_test_data *sa, uint16_t portid,
}
} else {
if (dir == RTE_SECURITY_IPSEC_SA_DIR_EGRESS) {
- rte_memcpy(&sess_conf->crypto_xform->cipher,
- &sa->xform.chain.cipher.cipher,
- sizeof(struct rte_crypto_cipher_xform));
+ memcpy(&sess_conf->crypto_xform->cipher,
+ &sa->xform.chain.cipher.cipher,
+ sizeof(struct rte_crypto_cipher_xform));
- rte_memcpy(&sess_conf->crypto_xform->next->auth,
- &sa->xform.chain.auth.auth,
- sizeof(struct rte_crypto_auth_xform));
+ memcpy(&sess_conf->crypto_xform->next->auth,
+ &sa->xform.chain.auth.auth,
+ sizeof(struct rte_crypto_auth_xform));
sess_conf->crypto_xform->cipher.key.data =
sa->key.data;
sess_conf->crypto_xform->next->auth.key.data =
@@ -282,12 +282,12 @@ create_inline_ipsec_session(struct ipsec_test_data *sa, uint16_t portid,
return TEST_SKIPPED;
}
} else {
- rte_memcpy(&sess_conf->crypto_xform->next->cipher,
- &sa->xform.chain.cipher.cipher,
- sizeof(struct rte_crypto_cipher_xform));
- rte_memcpy(&sess_conf->crypto_xform->auth,
- &sa->xform.chain.auth.auth,
- sizeof(struct rte_crypto_auth_xform));
+ memcpy(&sess_conf->crypto_xform->next->cipher,
+ &sa->xform.chain.cipher.cipher,
+ sizeof(struct rte_crypto_cipher_xform));
+ memcpy(&sess_conf->crypto_xform->auth,
+ &sa->xform.chain.auth.auth,
+ sizeof(struct rte_crypto_auth_xform));
sess_conf->crypto_xform->auth.key.data =
sa->auth_key.data;
sess_conf->crypto_xform->next->cipher.key.data =
@@ -424,7 +424,7 @@ copy_buf_to_pkt_segs(const uint8_t *buf, unsigned int len,
copy_len = seg->buf_len - seg->data_off - offset;
seg_buf = rte_pktmbuf_mtod_offset(seg, char *, offset);
while (len > copy_len) {
- rte_memcpy(seg_buf, buf + copied, (size_t) copy_len);
+ memcpy(seg_buf, buf + copied, (size_t) copy_len);
len -= copy_len;
copied += copy_len;
seg->data_len += copy_len;
@@ -433,7 +433,7 @@ copy_buf_to_pkt_segs(const uint8_t *buf, unsigned int len,
copy_len = seg->buf_len - seg->data_off;
seg_buf = rte_pktmbuf_mtod(seg, void *);
}
- rte_memcpy(seg_buf, buf + copied, (size_t) len);
+ memcpy(seg_buf, buf + copied, (size_t) len);
seg->data_len = len;
pkt->pkt_len += copied + len;
@@ -463,12 +463,12 @@ init_packet(struct rte_mempool *mp, const uint8_t *data, unsigned int len, bool
return NULL;
if (outer_ipv4) {
- rte_memcpy(rte_pktmbuf_append(pkt, RTE_ETHER_HDR_LEN),
- &dummy_ipv4_eth_hdr, RTE_ETHER_HDR_LEN);
+ memcpy(rte_pktmbuf_append(pkt, RTE_ETHER_HDR_LEN),
+ &dummy_ipv4_eth_hdr, RTE_ETHER_HDR_LEN);
pkt->l3_len = sizeof(struct rte_ipv4_hdr);
} else {
- rte_memcpy(rte_pktmbuf_append(pkt, RTE_ETHER_HDR_LEN),
- &dummy_ipv6_eth_hdr, RTE_ETHER_HDR_LEN);
+ memcpy(rte_pktmbuf_append(pkt, RTE_ETHER_HDR_LEN),
+ &dummy_ipv6_eth_hdr, RTE_ETHER_HDR_LEN);
pkt->l3_len = sizeof(struct rte_ipv6_hdr);
}
pkt->l2_len = RTE_ETHER_HDR_LEN;
@@ -491,7 +491,7 @@ init_packet(struct rte_mempool *mp, const uint8_t *data, unsigned int len, bool
}
if (pkt->buf_len > len + RTE_ETHER_HDR_LEN)
- rte_memcpy(rte_pktmbuf_append(pkt, len), data, len);
+ memcpy(rte_pktmbuf_append(pkt, len), data, len);
else
copy_buf_to_pkt_segs(data, len, pkt, RTE_ETHER_HDR_LEN);
return pkt;
diff --git a/app/test/test_security_proto.c b/app/test/test_security_proto.c
index cf40d5fc9a..6302f33886 100644
--- a/app/test/test_security_proto.c
+++ b/app/test/test_security_proto.c
@@ -167,5 +167,5 @@ test_sec_proto_pattern_generate(void)
void
test_sec_proto_pattern_set(uint8_t *buf, int len)
{
- rte_memcpy(buf, cleartext_pattern, len);
+ memcpy(buf, cleartext_pattern, len);
}
diff --git a/app/test/test_service_cores.c b/app/test/test_service_cores.c
index ff04472616..0ae83a10dc 100644
--- a/app/test/test_service_cores.c
+++ b/app/test/test_service_cores.c
@@ -7,7 +7,6 @@
#include <rte_hexdump.h>
#include <rte_malloc.h>
#include <rte_mbuf.h>
-#include <rte_memcpy.h>
#include <rte_random.h>
#include <rte_service.h>
diff --git a/app/test/test_thash.c b/app/test/test_thash.c
index eeb2e87f2c..12911979c7 100644
--- a/app/test/test_thash.c
+++ b/app/test/test_thash.c
@@ -316,14 +316,14 @@ test_toeplitz_hash_gfni_bulk(void)
tuple[0].v4.dst_addr = rte_cpu_to_be_32(v4_tbl[i].dst_ip);
tuple[0].v4.sport = rte_cpu_to_be_16(v4_tbl[i].dst_port);
tuple[0].v4.dport = rte_cpu_to_be_16(v4_tbl[i].src_port);
- rte_memcpy(tuples[0], &tuple[0], RTE_THASH_V4_L4_LEN * 4);
+ memcpy(tuples[0], &tuple[0], RTE_THASH_V4_L4_LEN * 4);
/*Load IPv6 headers and copy it into the corresponding tuple*/
tuple[1].v6.src_addr = v6_tbl[i].src_ip;
tuple[1].v6.dst_addr = v6_tbl[i].dst_ip;
tuple[1].v6.sport = rte_cpu_to_be_16(v6_tbl[i].dst_port);
tuple[1].v6.dport = rte_cpu_to_be_16(v6_tbl[i].src_port);
- rte_memcpy(tuples[1], &tuple[1], RTE_THASH_V6_L4_LEN * 4);
+ memcpy(tuples[1], &tuple[1], RTE_THASH_V6_L4_LEN * 4);
rte_thash_gfni_bulk(rss_key_matrixes, RTE_THASH_V6_L4_LEN * 4,
tuples, rss, 2);
diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c
index aa37e4073c..0bc986189b 100644
--- a/app/test/virtual_pmd.c
+++ b/app/test/virtual_pmd.c
@@ -2,13 +2,14 @@
* Copyright(c) 2010-2014 Intel Corporation
*/
+#include <string.h>
+
#include <rte_mbuf.h>
#include <rte_ethdev.h>
#include <ethdev_driver.h>
#include <rte_pci.h>
#include <bus_pci_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_memory.h>
#include <rte_ring.h>
@@ -187,7 +188,7 @@ virtual_ethdev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats,
struct virtual_ethdev_private *dev_private = dev->data->dev_private;
if (stats)
- rte_memcpy(stats, &dev_private->eth_stats, sizeof(*stats));
+ memcpy(stats, &dev_private->eth_stats, sizeof(*stats));
return 0;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* RE: [PATCH 03/61] test: use memcpy instead of rte_memcpy
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
0 siblings, 0 replies; 64+ messages in thread
From: Morten Brørup @ 2026-08-20 6:22 UTC (permalink / raw)
To: Stephen Hemminger, dev
Cc: Konstantin Ananyev, Marat Khalili, Jasvinder Singh, Akhil Goyal,
Fan Zhang, Yipeng Wang, Abhinandan Gujjar, Jerin Jacob,
Chas Williams, Min Hu (Connor), Sameh Gobriel, Sachin Saxena,
Hemant Agrawal, Wathsala Vithanage, Anoob Joseph,
Bruce Richardson, Vladimir Medvedkin
> diff --git a/app/test/packet_burst_generator.c
> b/app/test/packet_burst_generator.c
> index 4c17737739..2f1d75c5bc 100644
> --- a/app/test/packet_burst_generator.c
> +++ b/app/test/packet_burst_generator.c
> @@ -31,20 +31,20 @@ copy_buf_to_pkt_segs(void *buf, unsigned len,
> struct rte_mbuf *pkt,
> copy_len = seg->data_len - offset;
> seg_buf = rte_pktmbuf_mtod_offset(seg, char *, offset);
> while (len > copy_len) {
> - rte_memcpy(seg_buf, buf, (size_t) copy_len);
> + memcpy(seg_buf, buf, (size_t) copy_len);
> len -= copy_len;
> buf = ((char *) buf + copy_len);
> seg = seg->next;
> seg_buf = rte_pktmbuf_mtod(seg, void *);
> }
> - rte_memcpy(seg_buf, buf, (size_t) len);
> + memcpy(seg_buf, buf, (size_t) len);
> }
>
> static inline void
> copy_buf_to_pkt(void *buf, unsigned len, struct rte_mbuf *pkt,
> unsigned offset)
> {
> if (offset + len <= pkt->data_len) {
> - rte_memcpy(rte_pktmbuf_mtod_offset(pkt, char *, offset),
> buf,
> + memcpy(rte_pktmbuf_mtod_offset(pkt, char *, offset), buf,
> (size_t) len);
It looks like size is not constant in the above instances.
Try writing an intermediate wrapper using __rte_constant() to verify at build time.
Something like (assuming the return value is unused):
#define rte_memcpy_const_size(dst, src, n) \
do { \
RTE_BUILD_BUG_ON(!__rte_constant(n)); \
memcpy(dst, src, n); \
} while (0)
^ permalink raw reply [flat|nested] 64+ messages in thread
* [PATCH 04/61] app/graph: replace rte_memcpy with memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (2 preceding siblings ...)
2026-08-20 5:11 ` [PATCH 03/61] test: use memcpy instead of rte_memcpy Stephen Hemminger
@ 2026-08-20 5:11 ` Stephen Hemminger
2026-08-20 5:11 ` [PATCH 05/61] lpm: remove unnecessary include of rte_memcpy.h Stephen Hemminger
` (57 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:11 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Sunil Kumar Kori, Rakesh Kudurumalla
Use libc version of memcpy for fixed sizes.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/graph/neigh.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/graph/neigh.c b/app/graph/neigh.c
index 3298f63c1a..16c8257724 100644
--- a/app/graph/neigh.c
+++ b/app/graph/neigh.c
@@ -91,14 +91,14 @@ ip6_rewrite_node_add(struct neigh_ipv6_config *v6_config)
memset(data, 0, len);
/* Copy dst mac */
- rte_memcpy((void *)&data[0], (void *)&v6_config->mac, RTE_ETHER_ADDR_LEN);
+ memcpy(data, &v6_config->mac, RTE_ETHER_ADDR_LEN);
/* Copy src mac */
rc = rte_eth_macaddr_get(portid, &smac);
if (rc < 0)
return rc;
- rte_memcpy(&data[RTE_ETHER_ADDR_LEN], smac.addr_bytes, RTE_ETHER_ADDR_LEN);
+ memcpy(&data[RTE_ETHER_ADDR_LEN], smac.addr_bytes, RTE_ETHER_ADDR_LEN);
return rte_node_ip6_rewrite_add(portid, data, len, portid);
}
@@ -121,7 +121,7 @@ ip4_rewrite_node_add(struct neigh_ipv4_config *v4_config)
memset(data, 0, len);
/* Copy dst mac */
- rte_memcpy((void *)&data[0], (void *)&v4_config->mac, RTE_ETHER_ADDR_LEN);
+ memcpy(data, &v4_config->mac, RTE_ETHER_ADDR_LEN);
/* Copy src mac */
rc = rte_eth_macaddr_get(portid, &smac);
@@ -130,7 +130,7 @@ ip4_rewrite_node_add(struct neigh_ipv4_config *v4_config)
return rc;
}
- rte_memcpy(&data[RTE_ETHER_ADDR_LEN], smac.addr_bytes, RTE_ETHER_ADDR_LEN);
+ memcpy(&data[RTE_ETHER_ADDR_LEN], smac.addr_bytes, RTE_ETHER_ADDR_LEN);
return rte_node_ip4_rewrite_add(portid, data, len, portid);
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 05/61] lpm: remove unnecessary include of rte_memcpy.h
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (3 preceding siblings ...)
2026-08-20 5:11 ` [PATCH 04/61] app/graph: replace rte_memcpy with memcpy Stephen Hemminger
@ 2026-08-20 5:11 ` Stephen Hemminger
2026-08-20 5:11 ` [PATCH 06/61] acl: " Stephen Hemminger
` (56 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:11 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Bruce Richardson, Vladimir Medvedkin
No longer used.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/lpm/rte_lpm6.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/lpm/rte_lpm6.c b/lib/lpm/rte_lpm6.c
index e23c886766..c3fb795c59 100644
--- a/lib/lpm/rte_lpm6.c
+++ b/lib/lpm/rte_lpm6.c
@@ -12,7 +12,6 @@
#include <rte_log.h>
#include <rte_common.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_eal_memconfig.h>
#include <rte_string_fns.h>
#include <rte_errno.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 06/61] acl: remove unnecessary include of rte_memcpy.h
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (4 preceding siblings ...)
2026-08-20 5:11 ` [PATCH 05/61] lpm: remove unnecessary include of rte_memcpy.h Stephen Hemminger
@ 2026-08-20 5:11 ` Stephen Hemminger
2026-08-20 5:11 ` [PATCH 07/61] drivers/bus: " Stephen Hemminger
` (55 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:11 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Konstantin Ananyev
rte_memcpy is no longer used here.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/acl/rte_acl_osdep.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/acl/rte_acl_osdep.h b/lib/acl/rte_acl_osdep.h
index b2c262dee7..48f29d895b 100644
--- a/lib/acl/rte_acl_osdep.h
+++ b/lib/acl/rte_acl_osdep.h
@@ -33,7 +33,6 @@
#include <rte_vect.h>
#include <rte_memory.h>
#include <rte_log.h>
-#include <rte_memcpy.h>
#include <rte_prefetch.h>
#include <rte_byteorder.h>
#include <rte_branch_prediction.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 07/61] drivers/bus: remove unnecessary include of rte_memcpy.h
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (5 preceding siblings ...)
2026-08-20 5:11 ` [PATCH 06/61] acl: " Stephen Hemminger
@ 2026-08-20 5:11 ` Stephen Hemminger
2026-08-20 5:11 ` [PATCH 08/61] security: replace fixed size rte_memcpy Stephen Hemminger
` (54 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:11 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Parav Pandit, Xueming Li, Hemant Agrawal,
Sachin Saxena, Chenbo Xia, Nipun Gupta
The file is included but rte_memcpy() no longer used here.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/bus/auxiliary/linux/auxiliary.c | 1 -
drivers/bus/fslmc/fslmc_bus.c | 1 -
drivers/bus/fslmc/fslmc_vfio.c | 1 -
drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c | 1 -
drivers/bus/fslmc/portal/dpaa2_hw_dpci.c | 1 -
drivers/bus/fslmc/portal/dpaa2_hw_dpcon.c | 1 -
drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 1 -
drivers/bus/pci/linux/pci.c | 1 -
8 files changed, 8 deletions(-)
diff --git a/drivers/bus/auxiliary/linux/auxiliary.c b/drivers/bus/auxiliary/linux/auxiliary.c
index 3a2dca2865..26d48efedb 100644
--- a/drivers/bus/auxiliary/linux/auxiliary.c
+++ b/drivers/bus/auxiliary/linux/auxiliary.c
@@ -8,7 +8,6 @@
#include <rte_log.h>
#include <rte_malloc.h>
#include <rte_devargs.h>
-#include <rte_memcpy.h>
#include <eal_filesystem.h>
#include "../private.h"
diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c
index 3626b12316..638f541d32 100644
--- a/drivers/bus/fslmc/fslmc_bus.c
+++ b/drivers/bus/fslmc/fslmc_bus.c
@@ -14,7 +14,6 @@
#include <bus_driver.h>
#include <rte_malloc.h>
#include <rte_devargs.h>
-#include <rte_memcpy.h>
#include <ethdev_driver.h>
#include <rte_mbuf_dyn.h>
#include <rte_vfio.h>
diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
index 412b70e5ae..d7f6f2819f 100644
--- a/drivers/bus/fslmc/fslmc_vfio.c
+++ b/drivers/bus/fslmc/fslmc_vfio.c
@@ -28,7 +28,6 @@
#include <rte_mbuf.h>
#include <ethdev_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c
index 925e83e97d..eacfbe1df8 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c
@@ -15,7 +15,6 @@
#include <eal_export.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
index b546da82f6..3d582d1154 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
@@ -14,7 +14,6 @@
#include <eal_export.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpcon.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpcon.c
index 6fd96ec0b9..fd34f31518 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpcon.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpcon.c
@@ -13,7 +13,6 @@
#include <errno.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
index e17050b625..be878c2fff 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
@@ -29,7 +29,6 @@
#include <rte_mbuf.h>
#include <ethdev_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c
index 9aae0a5d14..45b42b16e4 100644
--- a/drivers/bus/pci/linux/pci.c
+++ b/drivers/bus/pci/linux/pci.c
@@ -10,7 +10,6 @@
#include <rte_bus_pci.h>
#include <rte_malloc.h>
#include <rte_devargs.h>
-#include <rte_memcpy.h>
#include <rte_vfio.h>
#include <eal_export.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 08/61] security: replace fixed size rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (6 preceding siblings ...)
2026-08-20 5:11 ` [PATCH 07/61] drivers/bus: " Stephen Hemminger
@ 2026-08-20 5:11 ` Stephen Hemminger
2026-08-20 5:11 ` [PATCH 09/61] ethdev: replace use of rte_memcpy Stephen Hemminger
` (53 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:11 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Akhil Goyal, Anoob Joseph
Use memcpy for better compiler checks.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/security/rte_security.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/security/rte_security.c b/lib/security/rte_security.c
index 0d89f8af3f..2e60b9ec64 100644
--- a/lib/security/rte_security.c
+++ b/lib/security/rte_security.c
@@ -406,7 +406,7 @@ crypto_caps_array(struct rte_tel_data *d,
while ((dev_caps = &capabilities[i++])->op !=
RTE_CRYPTO_OP_TYPE_UNDEFINED) {
memset(&caps_val, 0, CRYPTO_CAPS_SZ * sizeof(caps_val[0]));
- rte_memcpy(caps_val, dev_caps, sizeof(capabilities[0]));
+ memcpy(caps_val, dev_caps, sizeof(capabilities[0]));
for (j = 0; j < CRYPTO_CAPS_SZ; j++)
rte_tel_data_add_array_uint(d, caps_val[j]);
}
@@ -431,7 +431,7 @@ sec_caps_array(struct rte_tel_data *d,
while ((dev_caps = &capabilities[i++])->action !=
RTE_SECURITY_ACTION_TYPE_NONE) {
memset(&caps_val, 0, SEC_CAPS_SZ * sizeof(caps_val[0]));
- rte_memcpy(caps_val, dev_caps, sizeof(capabilities[0]));
+ memcpy(caps_val, dev_caps, sizeof(capabilities[0]));
for (j = 0; j < SEC_CAPS_SZ; j++)
rte_tel_data_add_array_uint(d, caps_val[j]);
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 09/61] ethdev: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (7 preceding siblings ...)
2026-08-20 5:11 ` [PATCH 08/61] security: replace fixed size rte_memcpy Stephen Hemminger
@ 2026-08-20 5:11 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 10/61] net: " Stephen Hemminger
` (52 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:11 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko, Ori Kam
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, ðdev->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
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 10/61] net: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (8 preceding siblings ...)
2026-08-20 5:11 ` [PATCH 09/61] ethdev: replace use of rte_memcpy Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 11/61] pdcp: " Stephen Hemminger
` (51 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/net/rte_ether.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/net/rte_ether.c b/lib/net/rte_ether.c
index 6703145fc5..83009625c2 100644
--- a/lib/net/rte_ether.c
+++ b/lib/net/rte_ether.c
@@ -15,7 +15,7 @@ rte_eth_random_addr(uint8_t *addr)
uint64_t rand = rte_rand();
uint8_t *p = (uint8_t *)&rand;
- rte_memcpy(addr, p, RTE_ETHER_ADDR_LEN);
+ memcpy(addr, p, RTE_ETHER_ADDR_LEN);
addr[0] &= (uint8_t)~RTE_ETHER_GROUP_ADDR; /* clear multicast bit */
addr[0] |= RTE_ETHER_LOCAL_ADMIN_ADDR; /* set local assignment bit */
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 11/61] pdcp: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (9 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 10/61] net: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 12/61] eventdev: replace fixed size rte_memcpy Stephen Hemminger
` (50 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Anoob Joseph, Volodymyr Fialko
Don't use rte_memcpy because compiler has more bounds checking
with regular memcpy.
Also, use include-what-you-use to fill in some of the include
files that were inherited.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/pdcp/pdcp_process.c | 51 +++++++++++++++++++++++------------------
1 file changed, 29 insertions(+), 22 deletions(-)
diff --git a/lib/pdcp/pdcp_process.c b/lib/pdcp/pdcp_process.c
index f55ae3bec0..12af0be5ee 100644
--- a/lib/pdcp/pdcp_process.c
+++ b/lib/pdcp/pdcp_process.c
@@ -2,13 +2,20 @@
* Copyright(C) 2023 Marvell.
*/
+#include <errno.h>
+#include <stdbool.h>
+#include <string.h>
+
+#include <rte_common.h>
#include <rte_crypto.h>
#include <rte_crypto_sym.h>
#include <rte_cryptodev.h>
-#include <rte_memcpy.h>
+#include <rte_mempool.h>
+#include <rte_mbuf.h>
#include <rte_mbuf_dyn.h>
#include <rte_pdcp.h>
#include <rte_pdcp_hdr.h>
+#include <rte_security.h>
#include "pdcp_cnt.h"
#include "pdcp_crypto.h"
@@ -60,7 +67,7 @@ pdcp_iv_gen_null_aes_cmac(struct rte_crypto_op *cop, const struct entity_priv *e
m = en_priv->auth_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
- rte_memcpy(m_ptr, &m, 8);
+ memcpy(m_ptr, &m, 8);
}
static void
@@ -72,10 +79,10 @@ pdcp_iv_gen_null_zs(struct rte_crypto_op *cop, const struct entity_priv *en_priv
iv = rte_crypto_op_ctod_offset(cop, uint8_t *, PDCP_IV_OFFSET);
iv_u64[0] = en_priv->auth_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
- rte_memcpy(iv, &iv_u64[0], 8);
+ memcpy(iv, &iv_u64[0], 8);
iv_u64[1] = iv_u64[0] ^ en_priv->auth_iv_part.u64[1];
- rte_memcpy(iv + 8, &iv_u64[1], 8);
+ memcpy(iv + 8, &iv_u64[1], 8);
}
static void
@@ -89,7 +96,7 @@ pdcp_iv_gen_aes_ctr_null(struct rte_crypto_op *cop, const struct entity_priv *en
iv_u64[0] = en_priv->cipher_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
iv_u64[1] = 0;
- rte_memcpy(iv, iv_u64, 16);
+ memcpy(iv, iv_u64, 16);
}
static void
@@ -101,8 +108,8 @@ pdcp_iv_gen_zs_null(struct rte_crypto_op *cop, const struct entity_priv *en_priv
iv = rte_crypto_op_ctod_offset(cop, uint8_t *, PDCP_IV_OFFSET);
iv_u64 = en_priv->cipher_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
- rte_memcpy(iv, &iv_u64, 8);
- rte_memcpy(iv + 8, &iv_u64, 8);
+ memcpy(iv, &iv_u64, 8);
+ memcpy(iv + 8, &iv_u64, 8);
}
static void
@@ -115,17 +122,17 @@ pdcp_iv_gen_zs_zs(struct rte_crypto_op *cop, const struct entity_priv *en_priv,
/* Generating cipher IV */
iv_u64[0] = en_priv->cipher_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
- rte_memcpy(iv, &iv_u64[0], 8);
- rte_memcpy(iv + 8, &iv_u64[0], 8);
+ memcpy(iv, &iv_u64[0], 8);
+ memcpy(iv + 8, &iv_u64[0], 8);
iv += PDCP_IV_LEN;
/* Generating auth IV */
iv_u64[0] = en_priv->auth_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
- rte_memcpy(iv, &iv_u64[0], 8);
+ memcpy(iv, &iv_u64[0], 8);
iv_u64[1] = iv_u64[0] ^ en_priv->auth_iv_part.u64[1];
- rte_memcpy(iv + 8, &iv_u64[1], 8);
+ memcpy(iv + 8, &iv_u64[1], 8);
}
static void
@@ -140,12 +147,12 @@ pdcp_iv_gen_zs_aes_cmac(struct rte_crypto_op *cop, const struct entity_priv *en_
iv = rte_crypto_op_ctod_offset(cop, uint8_t *, PDCP_IV_OFFSET);
iv_u64[0] = en_priv->cipher_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
- rte_memcpy(iv, &iv_u64[0], 8);
- rte_memcpy(iv + 8, &iv_u64[0], 8);
+ memcpy(iv, &iv_u64[0], 8);
+ memcpy(iv + 8, &iv_u64[0], 8);
m_ptr = (uint8_t *)rte_pktmbuf_prepend(mb, 8);
m = en_priv->auth_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
- rte_memcpy(m_ptr, &m, 8);
+ memcpy(m_ptr, &m, 8);
}
static void
@@ -162,11 +169,11 @@ pdcp_iv_gen_aes_ctr_aes_cmac(struct rte_crypto_op *cop, const struct entity_priv
iv_u64[0] = en_priv->cipher_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
iv_u64[1] = 0;
- rte_memcpy(iv, iv_u64, PDCP_IV_LEN);
+ memcpy(iv, iv_u64, PDCP_IV_LEN);
m_ptr = (uint8_t *)rte_pktmbuf_prepend(mb, 8);
m = en_priv->auth_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
- rte_memcpy(m_ptr, &m, 8);
+ memcpy(m_ptr, &m, 8);
}
static void
@@ -179,15 +186,15 @@ pdcp_iv_gen_aes_ctr_zs(struct rte_crypto_op *cop, const struct entity_priv *en_p
iv_u64[0] = en_priv->cipher_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
iv_u64[1] = 0;
- rte_memcpy(iv, iv_u64, PDCP_IV_LEN);
+ memcpy(iv, iv_u64, PDCP_IV_LEN);
iv += PDCP_IV_LEN;
iv_u64[0] = en_priv->auth_iv_part.u64[0] | ((uint64_t)(rte_cpu_to_be_32(count)));
- rte_memcpy(iv, &iv_u64[0], 8);
+ memcpy(iv, &iv_u64[0], 8);
iv_u64[1] = iv_u64[0] ^ en_priv->auth_iv_part.u64[1];
- rte_memcpy(iv + 8, &iv_u64[1], 8);
+ memcpy(iv + 8, &iv_u64[1], 8);
}
static int
@@ -614,7 +621,7 @@ pdcp_post_process_ul(const struct rte_pdcp_entity *entity,
}
if (unlikely(nb_err != 0))
- rte_memcpy(&out_mb[nb_success], err_mb, nb_err * sizeof(struct rte_mbuf *));
+ memcpy(&out_mb[nb_success], err_mb, nb_err * sizeof(struct rte_mbuf *));
*nb_err_ret = nb_err;
return nb_success;
@@ -968,7 +975,7 @@ pdcp_post_process_uplane_dl_flags(const struct rte_pdcp_entity *entity, struct r
}
if (unlikely(nb_err != 0))
- rte_memcpy(&out_mb[nb_success], err_mb, nb_err * sizeof(struct rte_mbuf *));
+ memcpy(&out_mb[nb_success], err_mb, nb_err * sizeof(struct rte_mbuf *));
*nb_err_ret = nb_err;
return nb_success;
@@ -1024,7 +1031,7 @@ pdcp_post_process_cplane_sn_12_dl(const struct rte_pdcp_entity *entity,
}
if (unlikely(nb_err != 0))
- rte_memcpy(&out_mb[nb_success], err_mb, nb_err * sizeof(struct rte_mbuf *));
+ memcpy(&out_mb[nb_success], err_mb, nb_err * sizeof(struct rte_mbuf *));
*nb_err_ret = nb_err;
return nb_success;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 12/61] eventdev: replace fixed size rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (10 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 11/61] pdcp: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 13/61] eal: replace rte_memcpy of cpuset Stephen Hemminger
` (49 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Abhinandan Gujjar, Jerin Jacob
Using regular memcpy gets more checking from compiler.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/eventdev/rte_event_crypto_adapter.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/eventdev/rte_event_crypto_adapter.c b/lib/eventdev/rte_event_crypto_adapter.c
index 3f9cc7379a..b6707b50df 100644
--- a/lib/eventdev/rte_event_crypto_adapter.c
+++ b/lib/eventdev/rte_event_crypto_adapter.c
@@ -700,7 +700,7 @@ eca_ops_enqueue_burst(struct event_crypto_adapter *adapter,
continue;
}
- rte_memcpy(ev, &m_data->response_info, sizeof(*ev));
+ memcpy(ev, &m_data->response_info, sizeof(*ev));
ev->event_ptr = ops[i];
/** Restore "struct rte_event::impl_opaque" from mbuf
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 13/61] eal: replace rte_memcpy of cpuset
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (11 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 12/61] eventdev: replace fixed size rte_memcpy Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 14/61] cryptodev: replace use of rte_memcpy Stephen Hemminger
` (48 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
Simple structure assignment is better than rte_memcpy.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/eal/common/eal_common_options.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index 42cdef632f..c0e97d21ae 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -29,7 +29,6 @@
#include <rte_tailq.h>
#include <rte_version.h>
#include <rte_devargs.h>
-#include <rte_memcpy.h>
#ifndef RTE_EXEC_ENV_WINDOWS
#include <rte_telemetry.h>
#endif
@@ -1446,7 +1445,7 @@ eal_parse_lcores(const char *lcores)
/* without '@', by default using lcore_set as cpuset */
if (*lcores != '@')
- rte_memcpy(&cpuset, &lcore_set, sizeof(cpuset));
+ cpuset = lcore_set;
set_count = CPU_COUNT(&lcore_set);
/* start to update lcore_set */
@@ -1469,8 +1468,7 @@ eal_parse_lcores(const char *lcores)
if (check_cpuset(&cpuset) < 0)
goto err;
- rte_memcpy(&lcore_config[idx].cpuset, &cpuset,
- sizeof(rte_cpuset_t));
+ lcore_config[idx].cpuset = cpuset;
}
/* some cores from the lcore_set can't be handled by EAL */
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 14/61] cryptodev: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (12 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 13/61] eal: replace rte_memcpy of cpuset Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 15/61] drivers/raw: use memcpy for fixed size data Stephen Hemminger
` (47 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Sunil Uttarwar, Ankur Dwivedi, Anoob Joseph,
Tejasree Kondoj, Kai Ji, Pablo de Lara, Matan Azrad, Chengfei Han,
Ming Ran, Akhil Goyal, Fan Zhang
Using regular memcpy is as fast and safer.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/crypto/ccp/ccp_crypto.c | 14 +++++---------
drivers/crypto/cnxk/cnxk_se.h | 2 +-
drivers/crypto/ipsec_mb/pmd_snow3g.c | 4 ++--
drivers/crypto/mlx5/mlx5_crypto_gcm.c | 10 +++++-----
drivers/crypto/scheduler/rte_cryptodev_scheduler.c | 6 +++---
drivers/crypto/scheduler/scheduler_failover.c | 12 ++++++------
drivers/crypto/zsda/zsda_crypto_session.c | 6 +++---
lib/cryptodev/rte_cryptodev.c | 12 ++++--------
8 files changed, 29 insertions(+), 37 deletions(-)
diff --git a/drivers/crypto/ccp/ccp_crypto.c b/drivers/crypto/ccp/ccp_crypto.c
index b07a786d8e..e754dd16dc 100644
--- a/drivers/crypto/ccp/ccp_crypto.c
+++ b/drivers/crypto/ccp/ccp_crypto.c
@@ -168,7 +168,7 @@ static int partial_hash_sha1(uint8_t *data_in, uint8_t *data_out)
if (!SHA1_Init(&ctx))
return -EFAULT;
SHA1_Transform(&ctx, data_in);
- rte_memcpy(data_out, &ctx, SHA_DIGEST_LENGTH);
+ memcpy(data_out, &ctx, SHA_DIGEST_LENGTH);
return 0;
}
@@ -179,8 +179,7 @@ static int partial_hash_sha224(uint8_t *data_in, uint8_t *data_out)
if (!SHA224_Init(&ctx))
return -EFAULT;
SHA256_Transform(&ctx, data_in);
- rte_memcpy(data_out, &ctx,
- SHA256_DIGEST_LENGTH);
+ memcpy(data_out, &ctx, SHA256_DIGEST_LENGTH);
return 0;
}
@@ -191,8 +190,7 @@ static int partial_hash_sha256(uint8_t *data_in, uint8_t *data_out)
if (!SHA256_Init(&ctx))
return -EFAULT;
SHA256_Transform(&ctx, data_in);
- rte_memcpy(data_out, &ctx,
- SHA256_DIGEST_LENGTH);
+ memcpy(data_out, &ctx, SHA256_DIGEST_LENGTH);
return 0;
}
@@ -203,8 +201,7 @@ static int partial_hash_sha384(uint8_t *data_in, uint8_t *data_out)
if (!SHA384_Init(&ctx))
return -EFAULT;
SHA512_Transform(&ctx, data_in);
- rte_memcpy(data_out, &ctx,
- SHA512_DIGEST_LENGTH);
+ memcpy(data_out, &ctx, SHA512_DIGEST_LENGTH);
return 0;
}
@@ -215,8 +212,7 @@ static int partial_hash_sha512(uint8_t *data_in, uint8_t *data_out)
if (!SHA512_Init(&ctx))
return -EFAULT;
SHA512_Transform(&ctx, data_in);
- rte_memcpy(data_out, &ctx,
- SHA512_DIGEST_LENGTH);
+ memcpy(data_out, &ctx, SHA512_DIGEST_LENGTH);
return 0;
}
diff --git a/drivers/crypto/cnxk/cnxk_se.h b/drivers/crypto/cnxk/cnxk_se.h
index 505a5fcd37..cf26373828 100644
--- a/drivers/crypto/cnxk/cnxk_se.h
+++ b/drivers/crypto/cnxk/cnxk_se.h
@@ -1252,7 +1252,7 @@ cpt_sm_prep(uint32_t flags, uint64_t d_offs, uint64_t d_lens, struct roc_se_fc_p
void *dst = PLT_PTR_ADD(offset_vaddr, ROC_SE_OFF_CTRL_LEN);
const uint64_t *src = fc_params->iv_buf;
- rte_memcpy(dst, src, 16);
+ memcpy(dst, src, 16);
}
inst->w4.u64 = cpt_inst_w4.u64;
} else {
diff --git a/drivers/crypto/ipsec_mb/pmd_snow3g.c b/drivers/crypto/ipsec_mb/pmd_snow3g.c
index 35fe23c157..6e84e34dc3 100644
--- a/drivers/crypto/ipsec_mb/pmd_snow3g.c
+++ b/drivers/crypto/ipsec_mb/pmd_snow3g.c
@@ -292,8 +292,8 @@ process_snow3g_hash_op(struct ipsec_mb_qp *qp, struct rte_crypto_op **ops,
/* Copy back digest from src to auth.digest.data */
if (digest_appended)
- rte_memcpy(ops[i]->sym->auth.digest.data,
- dst, SNOW3G_DIGEST_LENGTH);
+ memcpy(ops[i]->sym->auth.digest.data, dst,
+ SNOW3G_DIGEST_LENGTH);
}
processed_ops++;
}
diff --git a/drivers/crypto/mlx5/mlx5_crypto_gcm.c b/drivers/crypto/mlx5/mlx5_crypto_gcm.c
index 1a2600655a..77a0e14715 100644
--- a/drivers/crypto/mlx5/mlx5_crypto_gcm.c
+++ b/drivers/crypto/mlx5/mlx5_crypto_gcm.c
@@ -1061,9 +1061,9 @@ mlx5_crypto_gcm_ipsec_enqueue_burst(void *queue_pair,
* shrink AAD before payload. First backup the mem,
* then do shrink.
*/
- rte_memcpy(&qp->ipsec_mem[idx],
- RTE_PTR_SUB(payload, MLX5_CRYPTO_GCM_IPSEC_IV_SIZE),
- MLX5_CRYPTO_GCM_IPSEC_IV_SIZE);
+ memcpy(&qp->ipsec_mem[idx],
+ RTE_PTR_SUB(payload, MLX5_CRYPTO_GCM_IPSEC_IV_SIZE),
+ MLX5_CRYPTO_GCM_IPSEC_IV_SIZE);
/* If no memory overlap, do copy directly, otherwise memmove. */
if (likely(pkt_iv_len >= sess->aad_len))
rte_memcpy(gcm_data.src_addr, op->sym->aead.aad.data, sess->aad_len);
@@ -1107,8 +1107,8 @@ mlx5_crypto_gcm_restore_ipsec_mem(struct mlx5_crypto_qp *qp,
if (unlikely(sess->aad_len > MLX5_CRYPTO_GCM_IPSEC_IV_SIZE))
memmove(op->sym->aead.aad.data,
RTE_PTR_SUB(payload, sess->aad_len), sess->aad_len);
- rte_memcpy(RTE_PTR_SUB(payload, MLX5_CRYPTO_GCM_IPSEC_IV_SIZE),
- &qp->ipsec_mem[idx], MLX5_CRYPTO_GCM_IPSEC_IV_SIZE);
+ memcpy(RTE_PTR_SUB(payload, MLX5_CRYPTO_GCM_IPSEC_IV_SIZE),
+ &qp->ipsec_mem[idx], MLX5_CRYPTO_GCM_IPSEC_IV_SIZE);
m_dst = op->sym->m_dst;
if (m_dst && m_dst != m_src) {
uint32_t bytes_to_copy;
diff --git a/drivers/crypto/scheduler/rte_cryptodev_scheduler.c b/drivers/crypto/scheduler/rte_cryptodev_scheduler.c
index 1ca8443431..95e4a69913 100644
--- a/drivers/crypto/scheduler/rte_cryptodev_scheduler.c
+++ b/drivers/crypto/scheduler/rte_cryptodev_scheduler.c
@@ -80,7 +80,7 @@ sync_caps(struct rte_cryptodev_capabilities *caps,
/* remove a uncommon cap from the array */
for (j = i; j < sync_nb_caps - 1; j++)
- rte_memcpy(&caps[j], &caps[j+1], sizeof(*cap));
+ memcpy(&caps[j], &caps[j + 1], sizeof(*cap));
memset(&caps[sync_nb_caps - 1], 0, sizeof(*cap));
sync_nb_caps--;
@@ -217,8 +217,8 @@ sync_sec_caps(uint32_t worker_idx,
* caps, from the arrays
*/
for (j = i; j < nb_sec_caps - 1; j++) {
- rte_memcpy(&sec_caps[j], &sec_caps[j+1],
- sizeof(*sec_cap));
+ memcpy(&sec_caps[j], &sec_caps[j + 1],
+ sizeof(*sec_cap));
rte_memcpy(&sec_crypto_caps[j][0],
&sec_crypto_caps[j+1][0],
diff --git a/drivers/crypto/scheduler/scheduler_failover.c b/drivers/crypto/scheduler/scheduler_failover.c
index 52ff2ffbb7..e7c6d19d25 100644
--- a/drivers/crypto/scheduler/scheduler_failover.c
+++ b/drivers/crypto/scheduler/scheduler_failover.c
@@ -171,12 +171,12 @@ scheduler_start(struct rte_cryptodev *dev)
sched_ctx->workers[PRIMARY_WORKER_IDX].qp_id = i;
sched_ctx->workers[SECONDARY_WORKER_IDX].qp_id = i;
- rte_memcpy(&qp_ctx->primary_worker,
- &sched_ctx->workers[PRIMARY_WORKER_IDX],
- sizeof(struct scheduler_worker));
- rte_memcpy(&qp_ctx->secondary_worker,
- &sched_ctx->workers[SECONDARY_WORKER_IDX],
- sizeof(struct scheduler_worker));
+ memcpy(&qp_ctx->primary_worker,
+ &sched_ctx->workers[PRIMARY_WORKER_IDX],
+ sizeof(struct scheduler_worker));
+ memcpy(&qp_ctx->secondary_worker,
+ &sched_ctx->workers[SECONDARY_WORKER_IDX],
+ sizeof(struct scheduler_worker));
}
return 0;
diff --git a/drivers/crypto/zsda/zsda_crypto_session.c b/drivers/crypto/zsda/zsda_crypto_session.c
index 5087ae248a..c01141dd94 100644
--- a/drivers/crypto/zsda/zsda_crypto_session.c
+++ b/drivers/crypto/zsda/zsda_crypto_session.c
@@ -178,7 +178,7 @@ u32_to_u8(uint32_t *u_int32_t_data, uint8_t *u8_data)
{
uint32_t be_data = rte_cpu_to_be_32(*u_int32_t_data);
- rte_memcpy(u8_data, &be_data, sizeof(be_data));
+ memcpy(u8_data, &be_data, sizeof(be_data));
}
static void
@@ -283,8 +283,8 @@ zsda_decry_key_set(uint8_t key[64], const uint8_t *key1_ptr, uint8_t skey_len,
: ZSDA_AES512_ROUND_NUM;
zsda_aes_key_expansion(aes_round_key, round_num, key1_ptr,
skey_len);
- rte_memcpy(dec_key1,
- ((uint8_t *)aes_round_key + (16 * round_num)), 16);
+ memcpy(dec_key1,
+ ((uint8_t *)aes_round_key + (16 * round_num)), 16);
if (skey_len == ZSDA_SYM_XTS_512_SKEY_LEN &&
(16 * round_num) <= ZSDA_AES_MAX_EXP_BYTE_SIZE) {
diff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c
index 829a5d0846..cdbaf54e1e 100644
--- a/lib/cryptodev/rte_cryptodev.c
+++ b/lib/cryptodev/rte_cryptodev.c
@@ -16,7 +16,6 @@
#include <rte_debug.h>
#include <dev_driver.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_memzone.h>
#include <rte_eal.h>
#include <rte_common.h>
@@ -2566,8 +2565,7 @@ rte_cryptodev_sym_session_set_user_data(void *_sess, void *data,
if (sess->user_data_sz < size)
return -ENOMEM;
- rte_memcpy(sess->driver_priv_data + sess->sess_data_sz, data, size);
-
+ memcpy(sess->driver_priv_data + sess->sess_data_sz, data, size);
rte_cryptodev_trace_sym_session_set_user_data(sess, data, size);
return 0;
@@ -2601,9 +2599,7 @@ rte_cryptodev_asym_session_set_user_data(void *session, void *data, uint16_t siz
if (sess->user_data_sz < size)
return -ENOMEM;
- rte_memcpy(sess->sess_private_data +
- sess->max_priv_data_sz,
- data, size);
+ memcpy(sess->sess_private_data + sess->max_priv_data_sz, data, size);
rte_cryptodev_trace_asym_session_set_user_data(sess, data, size);
@@ -2750,7 +2746,7 @@ rte_cryptodev_session_event_mdata_set(uint8_t dev_id, void *sess,
if (s->event_mdata == NULL)
return -ENOMEM;
}
- rte_memcpy(s->event_mdata, ev_mdata, size);
+ memcpy(s->event_mdata, ev_mdata, size);
return 0;
} else
@@ -3098,7 +3094,7 @@ crypto_caps_array(struct rte_tel_data *d,
while ((dev_caps = &capabilities[i++])->op !=
RTE_CRYPTO_OP_TYPE_UNDEFINED) {
memset(&caps_val, 0, CRYPTO_CAPS_SZ * sizeof(caps_val[0]));
- rte_memcpy(caps_val, dev_caps, sizeof(capabilities[0]));
+ memcpy(caps_val, dev_caps, sizeof(capabilities[0]));
for (j = 0; j < CRYPTO_CAPS_SZ; j++)
rte_tel_data_add_array_uint(d, caps_val[j]);
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 15/61] drivers/raw: use memcpy for fixed size data
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (13 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 14/61] cryptodev: replace use of rte_memcpy Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 16/61] test-pipeline: replace use of rte_memcpy Stephen Hemminger
` (46 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Rosen Xu, Sachin Saxena, Hemant Agrawal
The regular libc memcpy is inline for fix sizes and has
better analysis coverage.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/raw/ifpga/afu_pmd_he_hssi.c | 4 ++--
drivers/raw/ifpga/afu_pmd_he_lpbk.c | 4 ++--
drivers/raw/ifpga/afu_pmd_he_mem.c | 4 ++--
drivers/raw/ifpga/afu_pmd_n3000.c | 8 ++++----
drivers/raw/ifpga/ifpga_rawdev.c | 11 +++++------
drivers/raw/skeleton/skeleton_rawdev.c | 8 +++-----
drivers/raw/skeleton/skeleton_rawdev_test.c | 1 -
7 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/drivers/raw/ifpga/afu_pmd_he_hssi.c b/drivers/raw/ifpga/afu_pmd_he_hssi.c
index bcb952935a..cf5ac5b459 100644
--- a/drivers/raw/ifpga/afu_pmd_he_hssi.c
+++ b/drivers/raw/ifpga/afu_pmd_he_hssi.c
@@ -6,6 +6,7 @@
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
+#include <string.h>
#include <inttypes.h>
#include <unistd.h>
#include <fcntl.h>
@@ -15,7 +16,6 @@
#include <rte_eal.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_io.h>
#include <bus_pci_driver.h>
#include <bus_ifpga_driver.h>
@@ -313,7 +313,7 @@ static int he_hssi_config(struct afu_rawdev *dev, void *config,
if (cfg->port >= NUM_HE_HSSI_PORTS)
return -EINVAL;
- rte_memcpy(&priv->he_hssi_cfg, cfg, sizeof(priv->he_hssi_cfg));
+ memcpy(&priv->he_hssi_cfg, cfg, sizeof(priv->he_hssi_cfg));
return 0;
}
diff --git a/drivers/raw/ifpga/afu_pmd_he_lpbk.c b/drivers/raw/ifpga/afu_pmd_he_lpbk.c
index df3b093157..9ecff2ac14 100644
--- a/drivers/raw/ifpga/afu_pmd_he_lpbk.c
+++ b/drivers/raw/ifpga/afu_pmd_he_lpbk.c
@@ -6,6 +6,7 @@
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
+#include <string.h>
#include <inttypes.h>
#include <unistd.h>
#include <fcntl.h>
@@ -15,7 +16,6 @@
#include <rte_eal.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_io.h>
#include <bus_pci_driver.h>
#include <bus_ifpga_driver.h>
@@ -362,7 +362,7 @@ static int he_lpbk_config(struct afu_rawdev *dev, void *config,
if ((cfg->end < cfg->begin) || (cfg->end > MAX_CACHE_LINES))
return -EINVAL;
- rte_memcpy(&priv->he_lpbk_cfg, cfg, sizeof(priv->he_lpbk_cfg));
+ memcpy(&priv->he_lpbk_cfg, cfg, sizeof(priv->he_lpbk_cfg));
return 0;
}
diff --git a/drivers/raw/ifpga/afu_pmd_he_mem.c b/drivers/raw/ifpga/afu_pmd_he_mem.c
index b595cd729c..b0453fbe55 100644
--- a/drivers/raw/ifpga/afu_pmd_he_mem.c
+++ b/drivers/raw/ifpga/afu_pmd_he_mem.c
@@ -6,6 +6,7 @@
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <poll.h>
@@ -14,7 +15,6 @@
#include <rte_eal.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_io.h>
#include <bus_pci_driver.h>
#include <bus_ifpga_driver.h>
@@ -125,7 +125,7 @@ static int he_mem_tg_config(struct afu_rawdev *dev, void *config,
if (config_size != sizeof(struct rte_pmd_afu_he_mem_tg_cfg))
return -EINVAL;
- rte_memcpy(&priv->he_mem_tg_cfg, config, sizeof(priv->he_mem_tg_cfg));
+ memcpy(&priv->he_mem_tg_cfg, config, sizeof(priv->he_mem_tg_cfg));
return 0;
}
diff --git a/drivers/raw/ifpga/afu_pmd_n3000.c b/drivers/raw/ifpga/afu_pmd_n3000.c
index d5520a0d71..06acfbd12d 100644
--- a/drivers/raw/ifpga/afu_pmd_n3000.c
+++ b/drivers/raw/ifpga/afu_pmd_n3000.c
@@ -1864,8 +1864,8 @@ static int n3000_afu_config(struct afu_rawdev *dev, void *config,
if ((cfg->nlb_cfg.end < cfg->nlb_cfg.begin) ||
(cfg->nlb_cfg.end > MAX_CACHE_LINES))
return -EINVAL;
- rte_memcpy(&priv->nlb_cfg, &cfg->nlb_cfg,
- sizeof(struct rte_pmd_afu_nlb_cfg));
+ memcpy(&priv->nlb_cfg, &cfg->nlb_cfg,
+ sizeof(struct rte_pmd_afu_nlb_cfg));
} else if (cfg->type == RTE_PMD_AFU_N3000_DMA) {
if (cfg->dma_cfg.index >= NUM_N3000_DMA)
return -EINVAL;
@@ -1884,8 +1884,8 @@ static int n3000_afu_config(struct afu_rawdev *dev, void *config,
cfg->dma_cfg.length);
}
}
- rte_memcpy(&priv->dma_cfg, &cfg->dma_cfg,
- sizeof(struct rte_pmd_afu_dma_cfg));
+ memcpy(&priv->dma_cfg, &cfg->dma_cfg,
+ sizeof(struct rte_pmd_afu_dma_cfg));
} else {
IFPGA_RAWDEV_PMD_ERR("Invalid type of N3000 AFU");
return -EINVAL;
diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c
index 1846cca669..b293cd626c 100644
--- a/drivers/raw/ifpga/ifpga_rawdev.c
+++ b/drivers/raw/ifpga/ifpga_rawdev.c
@@ -14,7 +14,6 @@
#include <rte_log.h>
#include <rte_malloc.h>
#include <rte_devargs.h>
-#include <rte_memcpy.h>
#include <rte_pci.h>
#include <bus_pci_driver.h>
#include <rte_kvargs.h>
@@ -258,7 +257,7 @@ static int ifpga_rawdev_fill_info(struct ifpga_rawdev *ifpga_dev)
if (point < 12)
return -1;
point -= 12;
- rte_memcpy(ifpga_dev->parent_bdf, &link[point], 12);
+ memcpy(ifpga_dev->parent_bdf, &link[point], 12);
point = strlen(link1);
if (point < 26)
@@ -949,10 +948,10 @@ ifpga_rawdev_pr(struct rte_rawdev *dev,
if (ret)
return ret;
- rte_memcpy(&afu_pr_conf->afu_id.uuid.uuid_low, uuid.b,
- sizeof(u64));
- rte_memcpy(&afu_pr_conf->afu_id.uuid.uuid_high, uuid.b + 8,
- sizeof(u64));
+ memcpy(&afu_pr_conf->afu_id.uuid.uuid_low, uuid.b,
+ sizeof(u64));
+ memcpy(&afu_pr_conf->afu_id.uuid.uuid_high, uuid.b + 8,
+ sizeof(u64));
IFPGA_RAWDEV_PMD_INFO("%s: uuid_l=0x%lx, uuid_h=0x%lx",
__func__,
diff --git a/drivers/raw/skeleton/skeleton_rawdev.c b/drivers/raw/skeleton/skeleton_rawdev.c
index 6e99d35536..256f45cb5d 100644
--- a/drivers/raw/skeleton/skeleton_rawdev.c
+++ b/drivers/raw/skeleton/skeleton_rawdev.c
@@ -20,7 +20,6 @@
#include <rte_log.h>
#include <rte_malloc.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_lcore.h>
#include <bus_vdev_driver.h>
@@ -245,8 +244,8 @@ static int skeleton_rawdev_queue_def_conf(struct rte_rawdev *dev,
skelq = &skeldev->queues[queue_id];
if (queue_id < SKELETON_MAX_QUEUES)
- rte_memcpy(queue_conf, skelq,
- sizeof(struct skeleton_rawdev_queue));
+ memcpy(queue_conf, skelq,
+ sizeof(struct skeleton_rawdev_queue));
return 0;
}
@@ -281,8 +280,7 @@ static int skeleton_rawdev_queue_setup(struct rte_rawdev *dev,
if (skeldev->num_queues > queue_id &&
q->depth < SKELETON_QUEUE_MAX_DEPTH) {
- rte_memcpy(q, queue_conf,
- sizeof(struct skeleton_rawdev_queue));
+ memcpy(q, queue_conf, sizeof(struct skeleton_rawdev_queue));
clear_queue_bufs(queue_id);
} else {
SKELETON_PMD_ERR("Invalid queue configuration");
diff --git a/drivers/raw/skeleton/skeleton_rawdev_test.c b/drivers/raw/skeleton/skeleton_rawdev_test.c
index 99765feb41..d818912f0f 100644
--- a/drivers/raw/skeleton/skeleton_rawdev_test.c
+++ b/drivers/raw/skeleton/skeleton_rawdev_test.c
@@ -7,7 +7,6 @@
#include <rte_common.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <dev_driver.h>
#include <rte_rawdev.h>
#include <bus_vdev_driver.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 16/61] test-pipeline: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (14 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 15/61] drivers/raw: use memcpy for fixed size data Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 17/61] net/af_xdp: " Stephen Hemminger
` (45 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Jerin Jacob, Cristian Dumitrescu
Using regular memcpy is safer and as fast here.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-eventdev/test_pipeline_common.c | 8 ++++----
app/test-pipeline/config.c | 1 -
app/test-pipeline/init.c | 1 -
app/test-pipeline/main.c | 1 -
app/test-pipeline/runtime.c | 1 -
5 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/app/test-eventdev/test_pipeline_common.c b/app/test-eventdev/test_pipeline_common.c
index eaf895869f..dd3021fa79 100644
--- a/app/test-eventdev/test_pipeline_common.c
+++ b/app/test-eventdev/test_pipeline_common.c
@@ -153,22 +153,22 @@ pipeline_tx_first(struct test_pipeline *t, struct evt_options *opt)
mbuf->pkt_len = pkt_sz;
/* Copy Ethernet header */
- rte_memcpy(rte_pktmbuf_mtod_offset(mbuf, char *, 0),
+ memcpy(rte_pktmbuf_mtod_offset(mbuf, char *, 0),
ð_hdr, sizeof(struct rte_ether_hdr));
/* Copy Ipv4 header */
- rte_memcpy(rte_pktmbuf_mtod_offset(
+ memcpy(rte_pktmbuf_mtod_offset(
mbuf, char *,
sizeof(struct rte_ether_hdr)),
&ip_hdr, sizeof(struct rte_ipv4_hdr));
/* Copy UDP header */
- rte_memcpy(
+ memcpy(
rte_pktmbuf_mtod_offset(
mbuf, char *,
sizeof(struct rte_ipv4_hdr) +
sizeof(struct rte_ether_hdr)),
- &udp_hdr, sizeof(struct rte_udp_hdr));
+ &udp_hdr, sizeof(struct rte_udp_hdr));
pkt_udp_hdr = rte_pktmbuf_mtod_offset(
mbuf, struct rte_udp_hdr *,
sizeof(struct rte_ipv4_hdr) +
diff --git a/app/test-pipeline/config.c b/app/test-pipeline/config.c
index daf838948b..f4d5d435ad 100644
--- a/app/test-pipeline/config.c
+++ b/app/test-pipeline/config.c
@@ -17,7 +17,6 @@
#include <rte_byteorder.h>
#include <rte_log.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_launch.h>
diff --git a/app/test-pipeline/init.c b/app/test-pipeline/init.c
index 558f0e428d..8028192306 100644
--- a/app/test-pipeline/init.c
+++ b/app/test-pipeline/init.c
@@ -17,7 +17,6 @@
#include <rte_byteorder.h>
#include <rte_log.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_launch.h>
diff --git a/app/test-pipeline/main.c b/app/test-pipeline/main.c
index e5efafdf28..5782c55032 100644
--- a/app/test-pipeline/main.c
+++ b/app/test-pipeline/main.c
@@ -19,7 +19,6 @@
#include <rte_byteorder.h>
#include <rte_log.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_launch.h>
diff --git a/app/test-pipeline/runtime.c b/app/test-pipeline/runtime.c
index 752f783370..a6457488c0 100644
--- a/app/test-pipeline/runtime.c
+++ b/app/test-pipeline/runtime.c
@@ -17,7 +17,6 @@
#include <rte_byteorder.h>
#include <rte_log.h>
#include <rte_memory.h>
-#include <rte_memcpy.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_launch.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 17/61] net/af_xdp: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (15 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 16/61] test-pipeline: replace use of rte_memcpy Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 18/61] net/avp: " Stephen Hemminger
` (44 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Ciara Loftus, Maryam Tahhan
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/af_xdp/rte_eth_af_xdp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c
index 2cdb533276..95838416b0 100644
--- a/drivers/net/af_xdp/rte_eth_af_xdp.c
+++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
@@ -2234,7 +2234,7 @@ get_iface_info(const char *if_name,
if (ioctl(sock, SIOCGIFHWADDR, &ifr))
goto error;
- rte_memcpy(eth_addr, ifr.ifr_hwaddr.sa_data, RTE_ETHER_ADDR_LEN);
+ memcpy(eth_addr, ifr.ifr_hwaddr.sa_data, RTE_ETHER_ADDR_LEN);
close(sock);
return 0;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 18/61] net/avp: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (16 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 17/61] net/af_xdp: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 19/61] net/axgbe: " Stephen Hemminger
` (43 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Steven Webster, Matt Peters
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/avp/avp_ethdev.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/avp/avp_ethdev.c b/drivers/net/avp/avp_ethdev.c
index 8af6c45381..026f45c688 100644
--- a/drivers/net/avp/avp_ethdev.c
+++ b/drivers/net/avp/avp_ethdev.c
@@ -249,7 +249,7 @@ avp_dev_process_request(struct avp_dev *avp, struct rte_avp_request *request)
while (avp_fifo_get(avp->resp_q, (void **)&resp_addr, 1))
PMD_DRV_LOG_LINE(DEBUG, "Discarding stale response");
- rte_memcpy(avp->sync_addr, request, sizeof(*request));
+ memcpy(avp->sync_addr, request, sizeof(*request));
count = avp_fifo_put(avp->req_q, &avp->host_sync_addr, 1);
if (count < 1) {
PMD_DRV_LOG_LINE(ERR, "Cannot send request %u to host",
@@ -286,7 +286,7 @@ avp_dev_process_request(struct avp_dev *avp, struct rte_avp_request *request)
}
/* copy to user buffer */
- rte_memcpy(request, avp->sync_addr, sizeof(*request));
+ memcpy(request, avp->sync_addr, sizeof(*request));
ret = 0;
PMD_DRV_LOG_LINE(DEBUG, "Result %d received for request %u",
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 19/61] net/axgbe: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (17 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 18/61] net/avp: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 20/61] net/bnx2x: " Stephen Hemminger
` (42 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Selwin Sebastian
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/axgbe/axgbe_ethdev.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/axgbe/axgbe_ethdev.c b/drivers/net/axgbe/axgbe_ethdev.c
index 61725d55ca..edd16dbaab 100644
--- a/drivers/net/axgbe/axgbe_ethdev.c
+++ b/drivers/net/axgbe/axgbe_ethdev.c
@@ -599,7 +599,7 @@ axgbe_dev_rss_hash_update(struct rte_eth_dev *dev,
if (rss_conf->rss_key != NULL &&
rss_conf->rss_key_len == AXGBE_RSS_HASH_KEY_SIZE) {
- rte_memcpy(pdata->rss_key, rss_conf->rss_key,
+ memcpy(pdata->rss_key, rss_conf->rss_key,
AXGBE_RSS_HASH_KEY_SIZE);
/* Program the hash key */
ret = axgbe_write_rss_hash_key(pdata);
@@ -642,7 +642,7 @@ axgbe_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
if (rss_conf->rss_key != NULL &&
rss_conf->rss_key_len >= AXGBE_RSS_HASH_KEY_SIZE) {
- rte_memcpy(rss_conf->rss_key, pdata->rss_key,
+ memcpy(rss_conf->rss_key, pdata->rss_key,
AXGBE_RSS_HASH_KEY_SIZE);
}
rss_conf->rss_key_len = AXGBE_RSS_HASH_KEY_SIZE;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 20/61] net/bnx2x: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (18 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 19/61] net/axgbe: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 21/61] net/bnxt: " Stephen Hemminger
` (41 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Julien Aube
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/bnx2x/bnx2x.c | 32 +++++++++++++++-----------------
1 file changed, 15 insertions(+), 17 deletions(-)
diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c
index 8790c858d5..ecba62119c 100644
--- a/drivers/net/bnx2x/bnx2x.c
+++ b/drivers/net/bnx2x/bnx2x.c
@@ -2238,18 +2238,18 @@ int bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf *m0)
tx_parse_bd->parsing_data =
(mac_type << ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE_SHIFT);
- rte_memcpy(&tx_parse_bd->data.mac_addr.dst_hi,
- &eh->dst_addr.addr_bytes[0], 2);
- rte_memcpy(&tx_parse_bd->data.mac_addr.dst_mid,
- &eh->dst_addr.addr_bytes[2], 2);
- rte_memcpy(&tx_parse_bd->data.mac_addr.dst_lo,
- &eh->dst_addr.addr_bytes[4], 2);
- rte_memcpy(&tx_parse_bd->data.mac_addr.src_hi,
- &eh->src_addr.addr_bytes[0], 2);
- rte_memcpy(&tx_parse_bd->data.mac_addr.src_mid,
- &eh->src_addr.addr_bytes[2], 2);
- rte_memcpy(&tx_parse_bd->data.mac_addr.src_lo,
- &eh->src_addr.addr_bytes[4], 2);
+ memcpy(&tx_parse_bd->data.mac_addr.dst_hi,
+ &eh->dst_addr.addr_bytes[0], 2);
+ memcpy(&tx_parse_bd->data.mac_addr.dst_mid,
+ &eh->dst_addr.addr_bytes[2], 2);
+ memcpy(&tx_parse_bd->data.mac_addr.dst_lo,
+ &eh->dst_addr.addr_bytes[4], 2);
+ memcpy(&tx_parse_bd->data.mac_addr.src_hi,
+ &eh->src_addr.addr_bytes[0], 2);
+ memcpy(&tx_parse_bd->data.mac_addr.src_mid,
+ &eh->src_addr.addr_bytes[2], 2);
+ memcpy(&tx_parse_bd->data.mac_addr.src_lo,
+ &eh->src_addr.addr_bytes[4], 2);
tx_parse_bd->data.mac_addr.dst_hi =
rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.dst_hi);
@@ -6671,8 +6671,7 @@ bnx2x_config_rss_pf(struct bnx2x_softc *sc, struct ecore_rss_config_obj *rss_obj
/* Hash bits */
params.rss_result_mask = MULTI_MASK;
- rte_memcpy(params.ind_table, rss_obj->ind_table,
- sizeof(params.ind_table));
+ memcpy(params.ind_table, rss_obj->ind_table, sizeof(params.ind_table));
if (config_hash) {
/* RSS keys */
@@ -6738,8 +6737,7 @@ bnx2x_set_mac_one(struct bnx2x_softc *sc, uint8_t * mac,
/* fill a user request section if needed */
if (!rte_bit_relaxed_get32(RAMROD_CONT, ramrod_flags)) {
- rte_memcpy(ramrod_param.user_req.u.mac.mac, mac,
- ETH_ALEN);
+ memcpy(ramrod_param.user_req.u.mac.mac, mac, ETH_ALEN);
rte_bit_relaxed_set32(mac_type,
&ramrod_param.user_req.vlan_mac_flags);
@@ -6954,7 +6952,7 @@ static void bnx2x_link_report_locked(struct bnx2x_softc *sc)
ELINK_DEBUG_P1(sc, "link status change count = %x", sc->link_cnt);
/* report new link params and remember the state for the next time */
- rte_memcpy(&sc->last_reported_link, &cur_data, sizeof(cur_data));
+ memcpy(&sc->last_reported_link, &cur_data, sizeof(cur_data));
if (rte_bit_relaxed_get32(BNX2X_LINK_REPORT_LINK_DOWN,
&cur_data.link_report_flags)) {
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 21/61] net/bnxt: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (19 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 20/61] net/bnx2x: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 22/61] net/bonding: " Stephen Hemminger
` (40 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Kishore Padmanabha, Ajit Khaparde
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/bnxt/bnxt_flow.c | 34 ++++++++++++++++++----------------
1 file changed, 18 insertions(+), 16 deletions(-)
diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c
index a2e590540b..901b019e66 100644
--- a/drivers/net/bnxt/bnxt_flow.c
+++ b/drivers/net/bnxt/bnxt_flow.c
@@ -233,8 +233,9 @@ bnxt_validate_and_parse_flow_type(const struct rte_flow_attr *attr,
"DMAC is invalid!");
return -rte_errno;
}
- rte_memcpy(filter->dst_macaddr,
- ð_spec->hdr.dst_addr, RTE_ETHER_ADDR_LEN);
+ memcpy(filter->dst_macaddr,
+ ð_spec->hdr.dst_addr,
+ RTE_ETHER_ADDR_LEN);
en |= use_ntuple ?
NTUPLE_FLTR_ALLOC_INPUT_EN_DST_MACADDR :
EM_FLOW_ALLOC_INPUT_EN_DST_MACADDR;
@@ -257,8 +258,9 @@ bnxt_validate_and_parse_flow_type(const struct rte_flow_attr *attr,
"SMAC is invalid!");
return -rte_errno;
}
- rte_memcpy(filter->src_macaddr,
- ð_spec->hdr.src_addr, RTE_ETHER_ADDR_LEN);
+ memcpy(filter->src_macaddr,
+ ð_spec->hdr.src_addr,
+ RTE_ETHER_ADDR_LEN);
en |= use_ntuple ?
NTUPLE_FLTR_ALLOC_INPUT_EN_SRC_MACADDR :
EM_FLOW_ALLOC_INPUT_EN_SRC_MACADDR;
@@ -423,23 +425,23 @@ bnxt_validate_and_parse_flow_type(const struct rte_flow_attr *attr,
en |= EM_FLOW_ALLOC_INPUT_EN_SRC_IPADDR |
EM_FLOW_ALLOC_INPUT_EN_DST_IPADDR;
- rte_memcpy(filter->src_ipaddr,
- &ipv6_spec->hdr.src_addr, 16);
- rte_memcpy(filter->dst_ipaddr,
- &ipv6_spec->hdr.dst_addr, 16);
+ memcpy(filter->src_ipaddr, &ipv6_spec->hdr.src_addr,
+ 16);
+ memcpy(filter->dst_ipaddr, &ipv6_spec->hdr.dst_addr,
+ 16);
if (!bnxt_check_zero_bytes(ipv6_mask->hdr.src_addr.a,
16)) {
- rte_memcpy(filter->src_ipaddr_mask,
- &ipv6_mask->hdr.src_addr, 16);
+ memcpy(filter->src_ipaddr_mask,
+ &ipv6_mask->hdr.src_addr, 16);
en |= !use_ntuple ? 0 :
NTUPLE_FLTR_ALLOC_INPUT_EN_SRC_IPADDR_MASK;
}
if (!bnxt_check_zero_bytes(ipv6_mask->hdr.dst_addr.a,
16)) {
- rte_memcpy(filter->dst_ipaddr_mask,
- &ipv6_mask->hdr.dst_addr, 16);
+ memcpy(filter->dst_ipaddr_mask,
+ &ipv6_mask->hdr.dst_addr, 16);
en |= !use_ntuple ? 0 :
NTUPLE_FLTR_ALLOC_INPUT_EN_DST_IPADDR_MASK;
}
@@ -591,8 +593,8 @@ bnxt_validate_and_parse_flow_type(const struct rte_flow_attr *attr,
return -rte_errno;
}
- rte_memcpy(((uint8_t *)&tenant_id_be + 1),
- vxlan_spec->hdr.vni, 3);
+ memcpy(((uint8_t *)&tenant_id_be + 1),
+ vxlan_spec->hdr.vni, 3);
filter->vni =
rte_be_to_cpu_32(tenant_id_be);
filter->tunnel_type =
@@ -645,8 +647,8 @@ bnxt_validate_and_parse_flow_type(const struct rte_flow_attr *attr,
"Invalid TNI mask");
return -rte_errno;
}
- rte_memcpy(((uint8_t *)&tenant_id_be + 1),
- nvgre_spec->tni, 3);
+ memcpy(((uint8_t *)&tenant_id_be + 1),
+ nvgre_spec->tni, 3);
filter->vni =
rte_be_to_cpu_32(tenant_id_be);
filter->tunnel_type =
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 22/61] net/bonding: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (20 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 21/61] net/bnxt: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 23/61] net/cnxk: " Stephen Hemminger
` (39 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Chas Williams, Min Hu (Connor)
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/bonding/rte_eth_bond_8023ad.c | 4 ++--
drivers/net/bonding/rte_eth_bond_flow.c | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index d1f30229d0..6d970153cf 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -1548,10 +1548,10 @@ rte_eth_bond_8023ad_member_info(uint16_t port_id, uint16_t member_id,
info->selected = port->selected;
info->actor_state = port->actor_state;
- rte_memcpy(&info->actor, &port->actor, sizeof(port->actor));
+ memcpy(&info->actor, &port->actor, sizeof(port->actor));
info->partner_state = port->partner_state;
- rte_memcpy(&info->partner, &port->partner, sizeof(port->partner));
+ memcpy(&info->partner, &port->partner, sizeof(port->partner));
info->agg_port_id = port->aggregator_port_id;
return 0;
diff --git a/drivers/net/bonding/rte_eth_bond_flow.c b/drivers/net/bonding/rte_eth_bond_flow.c
index 5d0be5caf5..bb9d347e2b 100644
--- a/drivers/net/bonding/rte_eth_bond_flow.c
+++ b/drivers/net/bonding/rte_eth_bond_flow.c
@@ -182,7 +182,7 @@ bond_flow_query_count(struct rte_eth_dev *dev, struct rte_flow *flow,
count->hits = 0;
count->bytes_set = 0;
count->hits_set = 0;
- rte_memcpy(&member_count, count, sizeof(member_count));
+ memcpy(&member_count, count, sizeof(member_count));
for (i = 0; i < internals->member_count; i++) {
ret = rte_flow_query(internals->members[i].port_id,
flow->flows[i], action,
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 23/61] net/cnxk: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (21 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 22/61] net/bonding: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 24/61] net/cxgbe: " Stephen Hemminger
` (38 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Nithin Dabilpuram, Kiran Kumar K,
Sunil Kumar Kori, Satha Rao, Harman Kalra
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/cnxk/cnxk_eswitch_devargs.c | 3 ++-
drivers/net/cnxk/cnxk_ethdev_ops.c | 2 +-
drivers/net/cnxk/cnxk_rep.c | 3 ++-
drivers/net/cnxk/cnxk_rep_flow.c | 6 ++++--
drivers/net/cnxk/cnxk_rep_msg.c | 8 ++++----
drivers/net/cnxk/cnxk_rep_ops.c | 2 +-
drivers/net/cnxk/cnxk_tm.c | 5 ++---
7 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/drivers/net/cnxk/cnxk_eswitch_devargs.c b/drivers/net/cnxk/cnxk_eswitch_devargs.c
index 655813c71a..556503ade1 100644
--- a/drivers/net/cnxk/cnxk_eswitch_devargs.c
+++ b/drivers/net/cnxk/cnxk_eswitch_devargs.c
@@ -112,7 +112,8 @@ cnxk_eswitch_repr_devargs(struct rte_pci_device *pci_dev, struct cnxk_eswitch_de
goto fail;
}
- rte_memcpy(&eswitch_dev->esw_da[j].da, ð_da[i], sizeof(struct rte_eth_devargs));
+ memcpy(&eswitch_dev->esw_da[j].da, ð_da[i],
+ sizeof(struct rte_eth_devargs));
/* No of representor ports to be created */
eswitch_dev->repr_cnt.nb_repr_created += eswitch_dev->esw_da[j].nb_repr_ports;
j++;
diff --git a/drivers/net/cnxk/cnxk_ethdev_ops.c b/drivers/net/cnxk/cnxk_ethdev_ops.c
index 0ea3d7e89f..0e6d851169 100644
--- a/drivers/net/cnxk/cnxk_ethdev_ops.c
+++ b/drivers/net/cnxk/cnxk_ethdev_ops.c
@@ -462,7 +462,7 @@ cnxk_nix_mac_addr_set(struct rte_eth_dev *eth_dev, struct rte_ether_addr *addr)
}
/* Update mac address to cnxk ethernet device */
- rte_memcpy(dev->mac_addr, addr->addr_bytes, RTE_ETHER_ADDR_LEN);
+ memcpy(dev->mac_addr, addr->addr_bytes, RTE_ETHER_ADDR_LEN);
exit:
return rc;
diff --git a/drivers/net/cnxk/cnxk_rep.c b/drivers/net/cnxk/cnxk_rep.c
index e536898d3a..1e72d5dbaa 100644
--- a/drivers/net/cnxk/cnxk_rep.c
+++ b/drivers/net/cnxk/cnxk_rep.c
@@ -409,7 +409,8 @@ cnxk_representee_notification(void *roc_nix, struct roc_eswitch_repte_notify_msg
goto done;
}
- rte_memcpy(msg->notify_msg, notify_msg, sizeof(struct roc_eswitch_repte_notify_msg));
+ memcpy(msg->notify_msg, notify_msg,
+ sizeof(struct roc_eswitch_repte_notify_msg));
plt_rep_dbg("Pushing new notification : msg type %d", msg->notify_msg->type);
pthread_mutex_lock(&eswitch_dev->repte_msg_proc.mutex);
TAILQ_INSERT_TAIL(&repte_msg_proc->msg_list, msg, next);
diff --git a/drivers/net/cnxk/cnxk_rep_flow.c b/drivers/net/cnxk/cnxk_rep_flow.c
index 1b013ce598..cbf7171ca8 100644
--- a/drivers/net/cnxk/cnxk_rep_flow.c
+++ b/drivers/net/cnxk/cnxk_rep_flow.c
@@ -81,7 +81,8 @@ prepare_pattern_data(const struct rte_flow_item *pattern, uint16_t nb_pattern,
hdr.mask_sz = term[pattern->type].item_size;
}
- rte_memcpy(RTE_PTR_ADD(pattern_data, len), &hdr, sizeof(cnxk_pattern_hdr_t));
+ memcpy(RTE_PTR_ADD(pattern_data, len), &hdr,
+ sizeof(cnxk_pattern_hdr_t));
len += sizeof(cnxk_pattern_hdr_t);
/* Copy pattern spec data */
@@ -231,7 +232,8 @@ prepare_action_data(const struct rte_flow_action *action, uint16_t nb_action, ui
hdr.type = action->type;
hdr.conf_sz = sz;
- rte_memcpy(RTE_PTR_ADD(action_data, len), &hdr, sizeof(cnxk_action_hdr_t));
+ memcpy(RTE_PTR_ADD(action_data, len), &hdr,
+ sizeof(cnxk_action_hdr_t));
len += sizeof(cnxk_action_hdr_t);
/* Copy action conf data */
diff --git a/drivers/net/cnxk/cnxk_rep_msg.c b/drivers/net/cnxk/cnxk_rep_msg.c
index a222e2b5cd..5da1d9999f 100644
--- a/drivers/net/cnxk/cnxk_rep_msg.c
+++ b/drivers/net/cnxk/cnxk_rep_msg.c
@@ -58,7 +58,7 @@ receive_control_message(int socketfd, void *data, uint32_t len)
if (cmsg->cmsg_type == SCM_CREDENTIALS) {
cr = (struct ucred *)CMSG_DATA(cmsg);
} else if (cmsg->cmsg_type == SCM_RIGHTS) {
- rte_memcpy(&afd, CMSG_DATA(cmsg), sizeof(int));
+ memcpy(&afd, CMSG_DATA(cmsg), sizeof(int));
plt_rep_dbg("afd %d", afd);
}
}
@@ -90,7 +90,7 @@ send_message_on_socket(int socketfd, void *data, uint32_t len, int afd)
cmsg->cmsg_len = CMSG_LEN(sizeof(int));
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
- rte_memcpy(CMSG_DATA(cmsg), &afd, sizeof(int));
+ memcpy(CMSG_DATA(cmsg), &afd, sizeof(int));
}
size = sendmsg(socketfd, &mh, MSG_DONTWAIT);
@@ -198,7 +198,7 @@ cnxk_rep_msg_populate_type(void *buffer, uint32_t *length, cnxk_type_t type, uin
data.length = sz;
/* Populate the type data */
- rte_memcpy(RTE_PTR_ADD(buffer, len), &data, sizeof(cnxk_type_data_t));
+ memcpy(RTE_PTR_ADD(buffer, len), &data, sizeof(cnxk_type_data_t));
len += sizeof(cnxk_type_data_t);
*length = len;
@@ -218,7 +218,7 @@ cnxk_rep_msg_populate_header(void *buffer, uint32_t *length)
hdr.signature = CTRL_MSG_SIGNATURE;
/* Populate header data */
- rte_memcpy(RTE_PTR_ADD(buffer, len), &hdr, sizeof(cnxk_header_t));
+ memcpy(RTE_PTR_ADD(buffer, len), &hdr, sizeof(cnxk_header_t));
len += sizeof(cnxk_header_t);
*length = len;
diff --git a/drivers/net/cnxk/cnxk_rep_ops.c b/drivers/net/cnxk/cnxk_rep_ops.c
index c481015592..7e24ec737d 100644
--- a/drivers/net/cnxk/cnxk_rep_ops.c
+++ b/drivers/net/cnxk/cnxk_rep_ops.c
@@ -692,7 +692,7 @@ cnxk_rep_mac_addr_set(struct rte_eth_dev *eth_dev, struct rte_ether_addr *addr)
cnxk_rep_msg_populate_header(buffer, &len);
msg_sm_meta.portid = rep_dev->rep_id;
- rte_memcpy(&msg_sm_meta.addr_bytes, addr->addr_bytes, RTE_ETHER_ADDR_LEN);
+ memcpy(&msg_sm_meta.addr_bytes, addr->addr_bytes, RTE_ETHER_ADDR_LEN);
cnxk_rep_msg_populate_command_meta(buffer, &len, &msg_sm_meta,
sizeof(cnxk_rep_msg_eth_set_mac_meta_t),
CNXK_REP_MSG_ETH_SET_MAC);
diff --git a/drivers/net/cnxk/cnxk_tm.c b/drivers/net/cnxk/cnxk_tm.c
index 0ed6732dda..48354d902b 100644
--- a/drivers/net/cnxk/cnxk_tm.c
+++ b/drivers/net/cnxk/cnxk_tm.c
@@ -300,8 +300,7 @@ cnxk_nix_tm_shaper_profile_add(struct rte_eth_dev *eth_dev, uint32_t id,
profile->profile.pkt_len_adj = params->pkt_length_adjust;
profile->profile.pkt_mode = params->packet_mode;
profile->profile.free_fn = rte_free;
- rte_memcpy(&profile->params, params,
- sizeof(struct rte_tm_shaper_params));
+ memcpy(&profile->params, params, sizeof(struct rte_tm_shaper_params));
rc = roc_nix_tm_shaper_profile_add(nix, &profile->profile);
@@ -373,7 +372,7 @@ cnxk_nix_tm_node_add(struct rte_eth_dev *eth_dev, uint32_t node_id,
if (!node)
return -ENOMEM;
- rte_memcpy(&node->params, params, sizeof(struct rte_tm_node_params));
+ memcpy(&node->params, params, sizeof(struct rte_tm_node_params));
node->nix_node.id = node_id;
node->nix_node.parent_id = parent_node_id;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 24/61] net/cxgbe: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (22 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 23/61] net/cnxk: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 25/61] net/dpaa2: " Stephen Hemminger
` (37 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Potnuri Bharat Teja
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/cxgbe/clip_tbl.c | 2 +-
drivers/net/cxgbe/cxgbe_filter.c | 8 ++++----
drivers/net/cxgbe/l2t.c | 4 ++--
drivers/net/cxgbe/smt.c | 20 +++++++++-----------
4 files changed, 16 insertions(+), 18 deletions(-)
diff --git a/drivers/net/cxgbe/clip_tbl.c b/drivers/net/cxgbe/clip_tbl.c
index 8588b88158..ba7c9f19e4 100644
--- a/drivers/net/cxgbe/clip_tbl.c
+++ b/drivers/net/cxgbe/clip_tbl.c
@@ -115,7 +115,7 @@ static struct clip_entry *t4_clip_alloc(struct rte_eth_dev *dev,
if (ce) {
t4_os_lock(&ce->lock);
if (rte_atomic_load_explicit(&ce->refcnt, rte_memory_order_relaxed) == 0) {
- rte_memcpy(ce->addr, lip, sizeof(ce->addr));
+ memcpy(ce->addr, lip, sizeof(ce->addr));
if (v6) {
ce->type = FILTER_TYPE_IPV6;
rte_atomic_store_explicit(&ce->refcnt, 1,
diff --git a/drivers/net/cxgbe/cxgbe_filter.c b/drivers/net/cxgbe/cxgbe_filter.c
index 5a7efe7a73..3d1d087ec2 100644
--- a/drivers/net/cxgbe/cxgbe_filter.c
+++ b/drivers/net/cxgbe/cxgbe_filter.c
@@ -851,10 +851,10 @@ static int set_filter_wr(struct rte_eth_dev *dev, unsigned int fidx)
fwr->ivlanm = cpu_to_be16(f->fs.mask.ivlan);
fwr->ovlan = cpu_to_be16(f->fs.val.ovlan);
fwr->ovlanm = cpu_to_be16(f->fs.mask.ovlan);
- rte_memcpy(fwr->lip, f->fs.val.lip, sizeof(fwr->lip));
- rte_memcpy(fwr->lipm, f->fs.mask.lip, sizeof(fwr->lipm));
- rte_memcpy(fwr->fip, f->fs.val.fip, sizeof(fwr->fip));
- rte_memcpy(fwr->fipm, f->fs.mask.fip, sizeof(fwr->fipm));
+ memcpy(fwr->lip, f->fs.val.lip, sizeof(fwr->lip));
+ memcpy(fwr->lipm, f->fs.mask.lip, sizeof(fwr->lipm));
+ memcpy(fwr->fip, f->fs.val.fip, sizeof(fwr->fip));
+ memcpy(fwr->fipm, f->fs.mask.fip, sizeof(fwr->fipm));
fwr->lp = cpu_to_be16(f->fs.val.lport);
fwr->lpm = cpu_to_be16(f->fs.mask.lport);
fwr->fp = cpu_to_be16(f->fs.val.fport);
diff --git a/drivers/net/cxgbe/l2t.c b/drivers/net/cxgbe/l2t.c
index ecb5fec911..19a190314f 100644
--- a/drivers/net/cxgbe/l2t.c
+++ b/drivers/net/cxgbe/l2t.c
@@ -82,7 +82,7 @@ static int write_l2e(struct rte_eth_dev *dev, struct l2t_entry *e, int sync,
V_L2T_W_NOREPLY(!sync));
req->l2t_idx = cpu_to_be16(l2t_idx);
req->vlan = cpu_to_be16(e->vlan);
- rte_memcpy(req->dst_mac, e->dmac, RTE_ETHER_ADDR_LEN);
+ memcpy(req->dst_mac, e->dmac, RTE_ETHER_ADDR_LEN);
if (loopback)
memset(req->dst_mac, 0, RTE_ETHER_ADDR_LEN);
@@ -155,7 +155,7 @@ static struct l2t_entry *t4_l2t_alloc_switching(struct rte_eth_dev *dev,
e->state = L2T_STATE_SWITCHING;
e->vlan = vlan;
e->lport = port;
- rte_memcpy(e->dmac, eth_addr, RTE_ETHER_ADDR_LEN);
+ memcpy(e->dmac, eth_addr, RTE_ETHER_ADDR_LEN);
rte_atomic_store_explicit(&e->refcnt, 1, rte_memory_order_relaxed);
ret = write_l2e(dev, e, 0, !L2T_LPBK, !L2T_ARPMISS);
if (ret < 0)
diff --git a/drivers/net/cxgbe/smt.c b/drivers/net/cxgbe/smt.c
index 2f961c1ead..8f26dc572a 100644
--- a/drivers/net/cxgbe/smt.c
+++ b/drivers/net/cxgbe/smt.c
@@ -55,26 +55,24 @@ static int write_smt_entry(struct rte_eth_dev *dev, struct smt_entry *e)
*/
if (e->idx & 1) {
req->pfvf1 = 0x0;
- rte_memcpy(req->src_mac1, e->src_mac,
- RTE_ETHER_ADDR_LEN);
+ memcpy(req->src_mac1, e->src_mac, RTE_ETHER_ADDR_LEN);
/* fill pfvf0/src_mac0 with entry
* at prev index from smt-tab.
*/
req->pfvf0 = 0x0;
- rte_memcpy(req->src_mac0, s->smtab[e->idx - 1].src_mac,
- RTE_ETHER_ADDR_LEN);
+ memcpy(req->src_mac0, s->smtab[e->idx - 1].src_mac,
+ RTE_ETHER_ADDR_LEN);
} else {
req->pfvf0 = 0x0;
- rte_memcpy(req->src_mac0, e->src_mac,
- RTE_ETHER_ADDR_LEN);
+ memcpy(req->src_mac0, e->src_mac, RTE_ETHER_ADDR_LEN);
/* fill pfvf1/src_mac1 with entry
* at next index from smt-tab
*/
req->pfvf1 = 0x0;
- rte_memcpy(req->src_mac1, s->smtab[e->idx + 1].src_mac,
- RTE_ETHER_ADDR_LEN);
+ memcpy(req->src_mac1, s->smtab[e->idx + 1].src_mac,
+ RTE_ETHER_ADDR_LEN);
}
row = (e->hw_idx >> 1);
} else {
@@ -87,8 +85,8 @@ static int write_smt_entry(struct rte_eth_dev *dev, struct smt_entry *e)
/* fill pfvf0/src_mac0 from smt-tab */
t6req->pfvf0 = 0x0;
- rte_memcpy(t6req->src_mac0, s->smtab[e->idx].src_mac,
- RTE_ETHER_ADDR_LEN);
+ memcpy(t6req->src_mac0, s->smtab[e->idx].src_mac,
+ RTE_ETHER_ADDR_LEN);
row = e->hw_idx;
req = (struct cpl_smt_write_req *)t6req;
}
@@ -158,7 +156,7 @@ static struct smt_entry *t4_smt_alloc_switching(struct rte_eth_dev *dev,
t4_os_lock(&e->lock);
if (rte_atomic_load_explicit(&e->refcnt, rte_memory_order_relaxed) == 0) {
e->pfvf = pfvf;
- rte_memcpy(e->src_mac, smac, RTE_ETHER_ADDR_LEN);
+ memcpy(e->src_mac, smac, RTE_ETHER_ADDR_LEN);
ret = write_smt_entry(dev, e);
if (ret) {
e->pfvf = 0;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 25/61] net/dpaa2: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (23 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 24/61] net/cxgbe: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 26/61] net/enic: " Stephen Hemminger
` (36 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Hemant Agrawal, Sachin Saxena
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/dpaa2/base/dpaa2_hw_dpni.c | 1 -
drivers/net/dpaa2/dpaa2_ethdev.c | 1 -
drivers/net/dpaa2/dpaa2_mux.c | 36 +++++++++++++-------------
drivers/net/dpaa2/dpaa2_recycle.c | 1 -
drivers/net/dpaa2/dpaa2_rxtx.c | 1 -
drivers/net/dpaa2/dpaa2_sparser.c | 1 -
drivers/net/dpaa2/dpaa2_tm.c | 2 +-
7 files changed, 19 insertions(+), 24 deletions(-)
diff --git a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
index 26ad105c73..33b20c35f7 100644
--- a/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
+++ b/drivers/net/dpaa2/base/dpaa2_hw_dpni.c
@@ -12,7 +12,6 @@
#include <rte_mbuf.h>
#include <ethdev_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index f211357919..d6786b5cb0 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -12,7 +12,6 @@
#include <rte_mbuf.h>
#include <ethdev_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
diff --git a/drivers/net/dpaa2/dpaa2_mux.c b/drivers/net/dpaa2/dpaa2_mux.c
index 9bb1bbca38..a934390043 100644
--- a/drivers/net/dpaa2/dpaa2_mux.c
+++ b/drivers/net/dpaa2/dpaa2_mux.c
@@ -150,12 +150,12 @@ rte_pmd_dpaa2_mux_flow_create(uint32_t dpdmux_id,
spec = pattern[loop].spec;
mask = pattern[loop].mask;
- rte_memcpy(&key_va[key_size],
- &spec->hdr.next_proto_id, sizeof(uint8_t));
+ memcpy(&key_va[key_size], &spec->hdr.next_proto_id,
+ sizeof(uint8_t));
if (mask) {
- rte_memcpy(&mask_va[key_size],
- &mask->hdr.next_proto_id,
- sizeof(uint8_t));
+ memcpy(&mask_va[key_size],
+ &mask->hdr.next_proto_id,
+ sizeof(uint8_t));
} else {
mask_va[key_size] = 0xff;
}
@@ -178,11 +178,11 @@ rte_pmd_dpaa2_mux_flow_create(uint32_t dpdmux_id,
spec = pattern[loop].spec;
mask = pattern[loop].mask;
- rte_memcpy(&key_va[key_size],
- &spec->tci, sizeof(uint16_t));
+ memcpy(&key_va[key_size], &spec->tci,
+ sizeof(uint16_t));
if (mask) {
- rte_memcpy(&mask_va[key_size],
- &mask->tci, sizeof(uint16_t));
+ memcpy(&mask_va[key_size], &mask->tci,
+ sizeof(uint16_t));
} else {
memset(&mask_va[key_size], 0xff,
sizeof(rte_be16_t));
@@ -205,12 +205,12 @@ rte_pmd_dpaa2_mux_flow_create(uint32_t dpdmux_id,
spec = pattern[loop].spec;
mask = pattern[loop].mask;
- rte_memcpy(&key_va[key_size],
- &spec->hdr.dst_port, sizeof(rte_be16_t));
+ memcpy(&key_va[key_size], &spec->hdr.dst_port,
+ sizeof(rte_be16_t));
if (mask) {
- rte_memcpy(&mask_va[key_size],
- &mask->hdr.dst_port,
- sizeof(rte_be16_t));
+ memcpy(&mask_va[key_size],
+ &mask->hdr.dst_port,
+ sizeof(rte_be16_t));
} else {
memset(&mask_va[key_size], 0xff,
sizeof(rte_be16_t));
@@ -233,11 +233,11 @@ rte_pmd_dpaa2_mux_flow_create(uint32_t dpdmux_id,
spec = pattern[loop].spec;
mask = pattern[loop].mask;
- rte_memcpy(&key_va[key_size],
- &spec->type, sizeof(rte_be16_t));
+ memcpy(&key_va[key_size], &spec->type,
+ sizeof(rte_be16_t));
if (mask) {
- rte_memcpy(&mask_va[key_size],
- &mask->type, sizeof(rte_be16_t));
+ memcpy(&mask_va[key_size], &mask->type,
+ sizeof(rte_be16_t));
} else {
memset(&mask_va[key_size], 0xff,
sizeof(rte_be16_t));
diff --git a/drivers/net/dpaa2/dpaa2_recycle.c b/drivers/net/dpaa2/dpaa2_recycle.c
index f78d12362e..8dd10738ab 100644
--- a/drivers/net/dpaa2/dpaa2_recycle.c
+++ b/drivers/net/dpaa2/dpaa2_recycle.c
@@ -8,7 +8,6 @@
#include <rte_mbuf.h>
#include <ethdev_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c
index c31d6556ad..baaaacc2e0 100644
--- a/drivers/net/dpaa2/dpaa2_rxtx.c
+++ b/drivers/net/dpaa2/dpaa2_rxtx.c
@@ -12,7 +12,6 @@
#include <rte_mbuf.h>
#include <ethdev_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <dev_driver.h>
#include <rte_hexdump.h>
diff --git a/drivers/net/dpaa2/dpaa2_sparser.c b/drivers/net/dpaa2/dpaa2_sparser.c
index 6c3e6eb573..60dadb4776 100644
--- a/drivers/net/dpaa2/dpaa2_sparser.c
+++ b/drivers/net/dpaa2/dpaa2_sparser.c
@@ -5,7 +5,6 @@
#include <rte_mbuf.h>
#include <rte_ethdev.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <dev_driver.h>
diff --git a/drivers/net/dpaa2/dpaa2_tm.c b/drivers/net/dpaa2/dpaa2_tm.c
index 36e815c356..497cd2dc84 100644
--- a/drivers/net/dpaa2/dpaa2_tm.c
+++ b/drivers/net/dpaa2/dpaa2_tm.c
@@ -324,7 +324,7 @@ dpaa2_shaper_profile_add(struct rte_eth_dev *dev, uint32_t shaper_profile_id,
NULL, NULL);
profile->id = shaper_profile_id;
- rte_memcpy(&profile->params, params, sizeof(profile->params));
+ memcpy(&profile->params, params, sizeof(profile->params));
LIST_INSERT_HEAD(&priv->shaper_profiles, profile, next);
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 26/61] net/enic: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (24 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 25/61] net/dpaa2: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 27/61] net/failsafe: " Stephen Hemminger
` (35 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, John Daley, Hyong Youb Kim
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/enic/enic_main.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c
index 2696fa77d4..59a557a38e 100644
--- a/drivers/net/enic/enic_main.c
+++ b/drivers/net/enic/enic_main.c
@@ -1215,8 +1215,8 @@ static int enic_set_rsskey(struct enic *enic, uint8_t *user_key)
/* Save for later queries */
if (!err) {
- rte_memcpy(&enic->rss_key, rss_key_buf_va,
- sizeof(union vnic_rss_key));
+ memcpy(&enic->rss_key, rss_key_buf_va,
+ sizeof(union vnic_rss_key));
}
enic_free_consistent(enic, sizeof(union vnic_rss_key),
rss_key_buf_va, rss_key_buf_pa);
@@ -1248,7 +1248,7 @@ int enic_set_rss_reta(struct enic *enic, union vnic_rss_cpu *rss_cpu)
/* Save for later queries */
if (!err)
- rte_memcpy(&enic->rss_cpu, rss_cpu, sizeof(union vnic_rss_cpu));
+ memcpy(&enic->rss_cpu, rss_cpu, sizeof(union vnic_rss_cpu));
return err;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 27/61] net/failsafe: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (25 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 26/61] net/enic: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 28/61] net/gve: " Stephen Hemminger
` (34 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Gaetan Rivet
Don't need rte_memcpy for addresses in control path.
The use of rte_memcpy() when saving the multicast address list is
control path only. Regular memcpy() has no performance disadvantage
there and gets more compile time checking of the arguments.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/failsafe/failsafe_ops.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c
index ddc8808ebe..f393476571 100644
--- a/drivers/net/failsafe/failsafe_ops.c
+++ b/drivers/net/failsafe/failsafe_ops.c
@@ -909,16 +909,16 @@ fs_stats_get(struct rte_eth_dev *dev,
ret = fs_lock(dev, 0);
if (ret != 0)
return ret;
- rte_memcpy(stats, &PRIV(dev)->stats_accumulator, sizeof(*stats));
+ memcpy(stats, &PRIV(dev)->stats_accumulator, sizeof(*stats));
FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
struct rte_eth_stats *snapshot = &sdev->stats_snapshot.stats;
uint64_t *timestamp = &sdev->stats_snapshot.timestamp;
- rte_memcpy(&backup, snapshot, sizeof(backup));
+ memcpy(&backup, snapshot, sizeof(backup));
ret = rte_eth_stats_get(PORT_ID(sdev), snapshot);
if (ret) {
if (!fs_err(sdev, ret)) {
- rte_memcpy(snapshot, &backup, sizeof(backup));
+ memcpy(snapshot, &backup, sizeof(backup));
goto inc;
}
ERROR("Operation rte_eth_stats_get failed for sub_device %d with error %d",
@@ -1523,8 +1523,8 @@ fs_set_mc_addr_list(struct rte_eth_dev *dev,
ret = -ENOMEM;
goto rollback;
}
- rte_memcpy(mcast_addrs, mc_addr_set,
- nb_mc_addr * sizeof(PRIV(dev)->mcast_addrs[0]));
+ memcpy(mcast_addrs, mc_addr_set,
+ nb_mc_addr * sizeof(PRIV(dev)->mcast_addrs[0]));
PRIV(dev)->nb_mcast_addr = nb_mc_addr;
PRIV(dev)->mcast_addrs = mcast_addrs;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 28/61] net/gve: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (26 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 27/61] net/failsafe: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 29/61] net/hinic: " Stephen Hemminger
` (33 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Jeroen de Borst, Joshua Washington
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/gve/base/gve_adminq.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/gve/base/gve_adminq.c b/drivers/net/gve/base/gve_adminq.c
index 89bf669c24..b7621a1fd1 100644
--- a/drivers/net/gve/base/gve_adminq.c
+++ b/drivers/net/gve/base/gve_adminq.c
@@ -1083,7 +1083,7 @@ int gve_adminq_describe_device(struct gve_priv *priv)
}
priv->max_mtu = mtu;
priv->num_event_counters = be16_to_cpu(descriptor->counters);
- rte_memcpy(priv->dev_addr.addr_bytes, descriptor->mac, ETH_ALEN);
+ memcpy(priv->dev_addr.addr_bytes, descriptor->mac, ETH_ALEN);
PMD_DRV_LOG(INFO, "MAC addr: " RTE_ETHER_ADDR_PRT_FMT,
RTE_ETHER_ADDR_BYTES(&priv->dev_addr));
priv->tx_pages_per_qpl = be16_to_cpu(descriptor->tx_pages_per_qpl);
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 29/61] net/hinic: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (27 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 28/61] net/gve: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 30/61] net/hns3: " Stephen Hemminger
` (32 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Xiaoyun Wang
Don't need rte_memcpy for fixed size value.
Use memcpy() or structure assignment.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/hinic/hinic_pmd_ethdev.c | 1 -
drivers/net/hinic/hinic_pmd_flow.c | 41 +++++++++++++---------------
2 files changed, 19 insertions(+), 23 deletions(-)
diff --git a/drivers/net/hinic/hinic_pmd_ethdev.c b/drivers/net/hinic/hinic_pmd_ethdev.c
index 91a4348fb6..9db2979365 100644
--- a/drivers/net/hinic/hinic_pmd_ethdev.c
+++ b/drivers/net/hinic/hinic_pmd_ethdev.c
@@ -8,7 +8,6 @@
#include <ethdev_driver.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_mempool.h>
#include <rte_errno.h>
#include <rte_ether.h>
diff --git a/drivers/net/hinic/hinic_pmd_flow.c b/drivers/net/hinic/hinic_pmd_flow.c
index 6b1ca6ff88..12e8d4ac36 100644
--- a/drivers/net/hinic/hinic_pmd_flow.c
+++ b/drivers/net/hinic/hinic_pmd_flow.c
@@ -983,8 +983,8 @@ static int hinic_normal_item_check_ip(const struct rte_flow_item **in_out_item,
}
ipv6_spec = (const struct rte_flow_item_ipv6 *)item->spec;
- rte_memcpy(rule->hinic_fdir.dst_ipv6,
- &ipv6_spec->hdr.dst_addr, 16);
+ memcpy(rule->hinic_fdir.dst_ipv6, &ipv6_spec->hdr.dst_addr,
+ 16);
/*
* Check if the next not void item is TCP or UDP or ICMP.
@@ -2193,8 +2193,8 @@ static int hinic_add_del_ntuple_filter(struct rte_eth_dev *dev,
sizeof(struct hinic_5tuple_filter), 0);
if (filter == NULL)
return -ENOMEM;
- rte_memcpy(&filter->filter_info, &filter_5tuple,
- sizeof(struct hinic_5tuple_filter_info));
+ memcpy(&filter->filter_info, &filter_5tuple,
+ sizeof(struct hinic_5tuple_filter_info));
filter->queue = ntuple_filter->queue;
filter_info->qid = ntuple_filter->queue;
@@ -2912,8 +2912,7 @@ static int hinic_add_del_tcam_fdir_filter(struct rte_eth_dev *dev,
sizeof(struct hinic_tcam_filter), 0);
if (tcam_filter == NULL)
return -ENOMEM;
- (void)rte_memcpy(&tcam_filter->tcam_key,
- &tcam_key, sizeof(struct tag_tcam_key));
+ tcam_filter->tcam_key = tcam_key;
tcam_filter->queue = fdir_tcam_rule.data.qid;
ret = hinic_add_tcam_filter(dev, tcam_filter, &fdir_tcam_rule);
@@ -2990,9 +2989,9 @@ static struct rte_flow *hinic_flow_create(struct rte_eth_dev *dev,
&ntuple_filter, FALSE);
goto out;
}
- rte_memcpy(&ntuple_filter_ptr->filter_info,
- &ntuple_filter,
- sizeof(struct rte_eth_ntuple_filter));
+ memcpy(&ntuple_filter_ptr->filter_info,
+ &ntuple_filter,
+ sizeof(struct rte_eth_ntuple_filter));
TAILQ_INSERT_TAIL(&nic_dev->filter_ntuple_list,
ntuple_filter_ptr, entries);
flow->rule = ntuple_filter_ptr;
@@ -3022,9 +3021,9 @@ static struct rte_flow *hinic_flow_create(struct rte_eth_dev *dev,
ðertype_filter, FALSE);
goto out;
}
- rte_memcpy(ðertype_filter_ptr->filter_info,
- ðertype_filter,
- sizeof(struct rte_eth_ethertype_filter));
+ memcpy(ðertype_filter_ptr->filter_info,
+ ðertype_filter,
+ sizeof(struct rte_eth_ethertype_filter));
TAILQ_INSERT_TAIL(&nic_dev->filter_ethertype_list,
ethertype_filter_ptr, entries);
flow->rule = ethertype_filter_ptr;
@@ -3065,8 +3064,8 @@ static struct rte_flow *hinic_flow_create(struct rte_eth_dev *dev,
goto out;
}
- rte_memcpy(&fdir_rule_ptr->filter_info, &fdir_rule,
- sizeof(struct hinic_fdir_rule));
+ memcpy(&fdir_rule_ptr->filter_info, &fdir_rule,
+ sizeof(struct hinic_fdir_rule));
TAILQ_INSERT_TAIL(&nic_dev->filter_fdir_rule_list,
fdir_rule_ptr, entries);
flow->rule = fdir_rule_ptr;
@@ -3109,8 +3108,8 @@ static int hinic_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow,
case RTE_ETH_FILTER_NTUPLE:
ntuple_filter_ptr = (struct hinic_ntuple_filter_ele *)
pmd_flow->rule;
- rte_memcpy(&ntuple_filter, &ntuple_filter_ptr->filter_info,
- sizeof(struct rte_eth_ntuple_filter));
+ memcpy(&ntuple_filter, &ntuple_filter_ptr->filter_info,
+ sizeof(struct rte_eth_ntuple_filter));
ret = hinic_add_del_ntuple_filter(dev, &ntuple_filter, FALSE);
if (!ret) {
TAILQ_REMOVE(&nic_dev->filter_ntuple_list,
@@ -3121,9 +3120,8 @@ static int hinic_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow,
case RTE_ETH_FILTER_ETHERTYPE:
ethertype_filter_ptr = (struct hinic_ethertype_filter_ele *)
pmd_flow->rule;
- rte_memcpy(ðertype_filter,
- ðertype_filter_ptr->filter_info,
- sizeof(struct rte_eth_ethertype_filter));
+ memcpy(ðertype_filter, ðertype_filter_ptr->filter_info,
+ sizeof(struct rte_eth_ethertype_filter));
ret = hinic_add_del_ethertype_filter(dev,
ðertype_filter, FALSE);
if (!ret) {
@@ -3134,9 +3132,8 @@ static int hinic_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow,
break;
case RTE_ETH_FILTER_FDIR:
fdir_rule_ptr = (struct hinic_fdir_rule_ele *)pmd_flow->rule;
- rte_memcpy(&fdir_rule,
- &fdir_rule_ptr->filter_info,
- sizeof(struct hinic_fdir_rule));
+ memcpy(&fdir_rule, &fdir_rule_ptr->filter_info,
+ sizeof(struct hinic_fdir_rule));
if (fdir_rule.mode == HINIC_FDIR_MODE_NORMAL) {
ret = hinic_add_del_fdir_filter(dev, &fdir_rule, FALSE);
} else if (fdir_rule.mode == HINIC_FDIR_MODE_TCAM) {
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 30/61] net/hns3: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (28 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 29/61] net/hinic: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 31/61] net/mlx5: " Stephen Hemminger
` (31 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Xingui Yang, Chengwen Feng
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/hns3/hns3_fdir.c | 2 +-
drivers/net/hns3/hns3_flow.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/hns3/hns3_fdir.c b/drivers/net/hns3/hns3_fdir.c
index 50572ae430..86dba4eb2e 100644
--- a/drivers/net/hns3/hns3_fdir.c
+++ b/drivers/net/hns3/hns3_fdir.c
@@ -1066,7 +1066,7 @@ int hns3_fdir_filter_program(struct hns3_adapter *hns,
return -ENOMEM;
}
- rte_memcpy(&node->fdir_conf, rule, sizeof(struct hns3_fdir_rule));
+ memcpy(&node->fdir_conf, rule, sizeof(struct hns3_fdir_rule));
ret = hns3_insert_fdir_filter(hw, fdir_info, node);
if (ret < 0) {
rte_free(node);
diff --git a/drivers/net/hns3/hns3_flow.c b/drivers/net/hns3/hns3_flow.c
index f2d1e4ec3a..f7e4d339d3 100644
--- a/drivers/net/hns3/hns3_flow.c
+++ b/drivers/net/hns3/hns3_flow.c
@@ -2588,8 +2588,8 @@ hns3_flow_query(struct rte_eth_dev *dev, struct rte_flow *flow,
}
rss_conf = (struct rte_flow_action_rss *)data;
rss_rule = (struct hns3_rss_conf_ele *)flow->rule;
- rte_memcpy(rss_conf, &rss_rule->filter_info.conf,
- sizeof(struct rte_flow_action_rss));
+ memcpy(rss_conf, &rss_rule->filter_info.conf,
+ sizeof(struct rte_flow_action_rss));
break;
default:
return rte_flow_error_set(error, ENOTSUP,
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 31/61] net/mlx5: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (29 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 30/61] net/hns3: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 32/61] net/mvpp2: " Stephen Hemminger
` (30 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Dariusz Sosnowski, Viacheslav Ovsiienko,
Bing Zhao, Ori Kam, Suanming Mou, Matan Azrad
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/mlx5/mlx5_devx.c | 4 ++--
drivers/net/mlx5/mlx5_flow.c | 38 ++++++++++++++++----------------
drivers/net/mlx5/mlx5_flow_aso.c | 6 ++---
drivers/net/mlx5/mlx5_flow_hw.c | 31 +++++++++++++-------------
drivers/net/mlx5/mlx5_rx.c | 6 ++---
drivers/net/mlx5/mlx5_rxtx_vec.c | 8 +++----
6 files changed, 47 insertions(+), 46 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c
index 4b30a4fade..ace23b6906 100644
--- a/drivers/net/mlx5/mlx5_devx.c
+++ b/drivers/net/mlx5/mlx5_devx.c
@@ -587,7 +587,7 @@ mlx5_rxq_obj_hairpin_new(struct mlx5_rxq_priv *rxq)
* during queue setup.
*/
MLX5_ASSERT(hca_attr->hairpin_data_buffer_locked);
- rte_memcpy(&locked_attr, &unlocked_attr, sizeof(locked_attr));
+ memcpy(&locked_attr, &unlocked_attr, sizeof(locked_attr));
locked_attr.hairpin_data_buffer_type =
MLX5_RQC_HAIRPIN_DATA_BUFFER_TYPE_LOCKED_INTERNAL_BUFFER;
tmpl->rq = mlx5_devx_cmd_create_rq(priv->sh->cdev->ctx, &locked_attr,
@@ -1379,7 +1379,7 @@ mlx5_txq_obj_hairpin_new(struct rte_eth_dev *dev, uint16_t idx)
*/
MLX5_ASSERT(hca_attr->hairpin_sq_wq_in_host_mem);
MLX5_ASSERT(hca_attr->hairpin_sq_wqe_bb_size > 0);
- rte_memcpy(&host_mem_attr, &dev_mem_attr, sizeof(host_mem_attr));
+ memcpy(&host_mem_attr, &dev_mem_attr, sizeof(host_mem_attr));
umem_size = MLX5_WQE_SIZE *
(size_t)RTE_BIT32(host_mem_attr.wq_attr.log_hairpin_num_packets);
umem_dbrec = RTE_ALIGN(umem_size, MLX5_DBR_SIZE);
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index b0eac185b5..981bec15be 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -4632,8 +4632,8 @@ flow_action_handles_translate(struct rte_eth_dev *dev,
(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION_NUM,
NULL, "too many shared actions");
}
- rte_memcpy(&handle[copied_n].action, &actions[n].conf,
- sizeof(actions[n].conf));
+ memcpy(&handle[copied_n].action, &actions[n].conf,
+ sizeof(actions[n].conf));
handle[copied_n].index = n;
copied_n++;
}
@@ -5487,30 +5487,30 @@ flow_hairpin_split(struct rte_eth_dev *dev,
case RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP:
case RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN:
case RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP:
- rte_memcpy(actions_tx, actions,
+ memcpy(actions_tx, actions,
sizeof(struct rte_flow_action));
actions_tx++;
break;
case RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID:
if (push_vlan) {
- rte_memcpy(actions_tx, actions,
- sizeof(struct rte_flow_action));
+ memcpy(actions_tx, actions,
+ sizeof(struct rte_flow_action));
actions_tx++;
} else {
- rte_memcpy(actions_rx, actions,
- sizeof(struct rte_flow_action));
+ memcpy(actions_rx, actions,
+ sizeof(struct rte_flow_action));
actions_rx++;
}
break;
case RTE_FLOW_ACTION_TYPE_COUNT:
case RTE_FLOW_ACTION_TYPE_AGE:
if (encap) {
- rte_memcpy(actions_tx, actions,
- sizeof(struct rte_flow_action));
+ memcpy(actions_tx, actions,
+ sizeof(struct rte_flow_action));
actions_tx++;
} else {
- rte_memcpy(actions_rx, actions,
- sizeof(struct rte_flow_action));
+ memcpy(actions_rx, actions,
+ sizeof(struct rte_flow_action));
actions_rx++;
}
break;
@@ -5522,8 +5522,8 @@ flow_hairpin_split(struct rte_eth_dev *dev,
actions_tx++;
encap = 1;
} else {
- rte_memcpy(actions_rx, actions,
- sizeof(struct rte_flow_action));
+ memcpy(actions_rx, actions,
+ sizeof(struct rte_flow_action));
actions_rx++;
}
break;
@@ -5534,14 +5534,14 @@ flow_hairpin_split(struct rte_eth_dev *dev,
sizeof(struct rte_flow_action));
actions_tx++;
} else {
- rte_memcpy(actions_rx, actions,
- sizeof(struct rte_flow_action));
+ memcpy(actions_rx, actions,
+ sizeof(struct rte_flow_action));
actions_rx++;
}
break;
default:
- rte_memcpy(actions_rx, actions,
- sizeof(struct rte_flow_action));
+ memcpy(actions_rx, actions,
+ sizeof(struct rte_flow_action));
actions_rx++;
break;
}
@@ -5551,7 +5551,7 @@ flow_hairpin_split(struct rte_eth_dev *dev,
tag_action->type = (enum rte_flow_action_type)
MLX5_RTE_FLOW_ACTION_TYPE_TAG;
actions_rx++;
- rte_memcpy(actions_rx, actions, sizeof(struct rte_flow_action));
+ memcpy(actions_rx, actions, sizeof(struct rte_flow_action));
actions_rx++;
set_tag = (void *)actions_rx;
*set_tag = (struct mlx5_rte_flow_action_set_tag) {
@@ -5561,7 +5561,7 @@ flow_hairpin_split(struct rte_eth_dev *dev,
MLX5_ASSERT(set_tag->id > REG_NON);
tag_action->conf = set_tag;
/* Create Tx item list. */
- rte_memcpy(actions_tx, actions, sizeof(struct rte_flow_action));
+ memcpy(actions_tx, actions, sizeof(struct rte_flow_action));
addr = (void *)&pattern_tx[2];
item = pattern_tx;
item->type = (enum rte_flow_item_type)
diff --git a/drivers/net/mlx5/mlx5_flow_aso.c b/drivers/net/mlx5/mlx5_flow_aso.c
index cd84ab1966..fff6bfcd24 100644
--- a/drivers/net/mlx5/mlx5_flow_aso.c
+++ b/drivers/net/mlx5/mlx5_flow_aso.c
@@ -1373,9 +1373,9 @@ mlx5_aso_ct_status_update(struct mlx5_aso_sq *sq, uint16_t num)
MLX5_ASSERT(ct);
MLX5_ASO_CT_UPDATE_STATE(ct, ASO_CONNTRACK_READY);
if (sq->elts[idx].query_data)
- rte_memcpy(sq->elts[idx].query_data,
- (char *)((uintptr_t)sq->mr.addr + idx * 64),
- 64);
+ memcpy(sq->elts[idx].query_data,
+ (char *)((uintptr_t)sq->mr.addr + idx * 64),
+ 64);
}
}
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c
index 1cffdcc54d..953d63975b 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -2509,7 +2509,7 @@ mlx5_tbl_translate_modify_header(struct rte_eth_dev *dev,
return rte_flow_error_set(error, ENOMEM,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
NULL, "translate modify_header: no memory for modify header context");
- rte_memcpy(acts->mhdr, mhdr, sizeof(*mhdr));
+ memcpy(acts->mhdr, mhdr, sizeof(*mhdr));
if (!mhdr->shared) {
pattern.data = (rte_be64_t *)acts->mhdr->mhdr_cmds;
typeof(mp_ctx->mh) *mh = &mp_ctx->mh;
@@ -3231,7 +3231,7 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev,
err = rte_errno;
__flow_hw_action_template_destroy(dev, acts);
if (error != NULL && sub_error.type != RTE_FLOW_ERROR_TYPE_NONE) {
- rte_memcpy(error, &sub_error, sizeof(sub_error));
+ memcpy(error, &sub_error, sizeof(sub_error));
return -EINVAL;
}
return rte_flow_error_set(error, err,
@@ -3296,8 +3296,8 @@ flow_hw_populate_rule_acts_caches(struct rte_eth_dev *dev,
struct mlx5dr_rule_action *rule_acts =
flow_hw_get_dr_action_buffer(priv, table, at_idx, q);
- rte_memcpy(rule_acts, table->ats[at_idx].acts.rule_acts,
- sizeof(table->ats[at_idx].acts.rule_acts));
+ memcpy(rule_acts, table->ats[at_idx].acts.rule_acts,
+ sizeof(table->ats[at_idx].acts.rule_acts));
}
}
@@ -3599,9 +3599,9 @@ flow_hw_modify_field_construct(struct mlx5_modification_cmd *mhdr_cmd,
mhdr_action->src.field != RTE_FLOW_FIELD_POINTER)
return 0;
if (mhdr_action->src.field == RTE_FLOW_FIELD_VALUE)
- rte_memcpy(values, &mhdr_action->src.value, sizeof(values));
+ memcpy(values, &mhdr_action->src.value, sizeof(values));
else
- rte_memcpy(values, mhdr_action->src.pvalue, sizeof(values));
+ memcpy(values, mhdr_action->src.pvalue, sizeof(values));
if (mhdr_action->dst.field == RTE_FLOW_FIELD_META ||
mhdr_action->dst.field == RTE_FLOW_FIELD_TAG ||
mhdr_action->dst.field == RTE_FLOW_FIELD_METER_COLOR ||
@@ -5537,7 +5537,7 @@ flow_hw_table_create(struct rte_eth_dev *dev,
rte_flow_error_set(error, err, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
"Failed to create template table");
else
- rte_memcpy(error, &sub_error, sizeof(sub_error));
+ memcpy(error, &sub_error, sizeof(sub_error));
}
return NULL;
}
@@ -7951,8 +7951,9 @@ flow_hw_set_vlan_vid(struct rte_eth_dev *dev,
if (masked) {
uint32_t mask_val = 0xffffffff;
- rte_memcpy(spec->src.value, &conf->vlan_vid, sizeof(conf->vlan_vid));
- rte_memcpy(mask->src.value, &mask_val, sizeof(mask_val));
+ memcpy(spec->src.value, &conf->vlan_vid,
+ sizeof(conf->vlan_vid));
+ memcpy(mask->src.value, &mask_val, sizeof(mask_val));
}
ra[set_vlan_vid_ix].type = RTE_FLOW_ACTION_TYPE_MODIFY_FIELD;
ra[set_vlan_vid_ix].conf = spec;
@@ -7989,7 +7990,7 @@ flow_hw_set_vlan_vid_construct(struct rte_eth_dev *dev,
.conf = &conf
};
- rte_memcpy(conf.src.value, &vid, sizeof(vid));
+ memcpy(conf.src.value, &vid, sizeof(vid));
return flow_hw_modify_field_construct(mhdr_cmd, act_data, hw_acts, &modify_action);
}
@@ -10217,8 +10218,8 @@ flow_hw_create_tx_repr_tag_jump_acts_tmpl(struct rte_eth_dev *dev,
struct rte_flow_action actions_m[4] = { { 0 } };
unsigned int idx = 0;
- rte_memcpy(set_tag_v.src.value, &tag_value, sizeof(tag_value));
- rte_memcpy(set_tag_m.src.value, &tag_mask, sizeof(tag_mask));
+ memcpy(set_tag_v.src.value, &tag_value, sizeof(tag_value));
+ memcpy(set_tag_m.src.value, &tag_mask, sizeof(tag_mask));
flow_hw_update_action_mask(&actions_v[idx], &actions_m[idx],
RTE_FLOW_ACTION_TYPE_MODIFY_FIELD,
&set_tag_v, &set_tag_m);
@@ -10585,8 +10586,8 @@ flow_hw_create_ctrl_regc_jump_actions_template(struct rte_eth_dev *dev,
};
set_reg_v.dst.offset = rte_bsf32(marker_mask);
- rte_memcpy(set_reg_v.src.value, &marker_bits, sizeof(marker_bits));
- rte_memcpy(set_reg_m.src.value, &marker_mask, sizeof(marker_mask));
+ memcpy(set_reg_v.src.value, &marker_bits, sizeof(marker_bits));
+ memcpy(set_reg_m.src.value, &marker_mask, sizeof(marker_mask));
return flow_hw_actions_template_create(dev, &attr, actions_v, actions_m, error);
}
@@ -14137,7 +14138,7 @@ static int flow_hw_register_matcher(struct rte_eth_dev *dev,
mlx5_hlist_unregister(priv->sh->groups, group_entry);
if (error) {
if (sub_error.type != RTE_FLOW_ERROR_TYPE_NONE)
- rte_memcpy(error, &sub_error, sizeof(sub_error));
+ memcpy(error, &sub_error, sizeof(sub_error));
}
return rte_flow_error_set(error, rte_errno,
RTE_FLOW_ERROR_TYPE_UNSPECIFIED,
diff --git a/drivers/net/mlx5/mlx5_rx.c b/drivers/net/mlx5/mlx5_rx.c
index c0ad8d6701..a874998a31 100644
--- a/drivers/net/mlx5/mlx5_rx.c
+++ b/drivers/net/mlx5/mlx5_rx.c
@@ -883,9 +883,9 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe,
ret = check_cqe_iteration(next, rxq->cqe_n, rxq->cq_ci);
if (ret != MLX5_CQE_STATUS_SW_OWN ||
MLX5_CQE_FORMAT(next->op_own) == MLX5_COMPRESSED)
- rte_memcpy(&rxq->title_cqe,
- (const void *)(uintptr_t)cqe,
- sizeof(struct mlx5_cqe));
+ memcpy(&rxq->title_cqe,
+ (const void *)(uintptr_t)cqe,
+ sizeof(struct mlx5_cqe));
}
}
}
diff --git a/drivers/net/mlx5/mlx5_rxtx_vec.c b/drivers/net/mlx5/mlx5_rxtx_vec.c
index 79e92811d5..1032c9bc02 100644
--- a/drivers/net/mlx5/mlx5_rxtx_vec.c
+++ b/drivers/net/mlx5/mlx5_rxtx_vec.c
@@ -364,8 +364,8 @@ rxq_burst_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts,
ret = check_cqe_iteration(next, rxq->cqe_n, rxq->cq_ci);
if (MLX5_CQE_FORMAT(next->op_own) == MLX5_COMPRESSED ||
ret != MLX5_CQE_STATUS_SW_OWN)
- rte_memcpy(&rxq->title_pkt, elts[nocmp_n - 1],
- sizeof(struct rte_mbuf));
+ memcpy(&rxq->title_pkt, elts[nocmp_n - 1],
+ sizeof(struct rte_mbuf));
}
}
decompress:
@@ -528,8 +528,8 @@ rxq_burst_mprq_v(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts,
ret = check_cqe_iteration(next, rxq->cqe_n, rxq->cq_ci);
if (MLX5_CQE_FORMAT(next->op_own) == MLX5_COMPRESSED ||
ret != MLX5_CQE_STATUS_SW_OWN)
- rte_memcpy(&rxq->title_pkt, elts[nocmp_n - 1],
- sizeof(struct rte_mbuf));
+ memcpy(&rxq->title_pkt, elts[nocmp_n - 1],
+ sizeof(struct rte_mbuf));
}
}
decompress:
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 32/61] net/mvpp2: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (30 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 31/61] net/mlx5: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 33/61] net/netvsc: " Stephen Hemminger
` (29 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Liron Himi
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/mvpp2/mrvl_tm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/mvpp2/mrvl_tm.c b/drivers/net/mvpp2/mrvl_tm.c
index c5046490ae..3fb343506c 100644
--- a/drivers/net/mvpp2/mrvl_tm.c
+++ b/drivers/net/mvpp2/mrvl_tm.c
@@ -437,7 +437,7 @@ mrvl_shaper_profile_add(struct rte_eth_dev *dev, uint32_t shaper_profile_id,
NULL, NULL);
profile->id = shaper_profile_id;
- rte_memcpy(&profile->params, params, sizeof(profile->params));
+ memcpy(&profile->params, params, sizeof(profile->params));
LIST_INSERT_HEAD(&priv->shaper_profiles, profile, next);
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 33/61] net/netvsc: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (31 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 32/61] net/mvpp2: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 34/61] net/nfp: " Stephen Hemminger
` (28 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Long Li, Wei Hu
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/netvsc/hn_ethdev.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c
index 9a193e4a7a..c1bd55e6b5 100644
--- a/drivers/net/netvsc/hn_ethdev.c
+++ b/drivers/net/netvsc/hn_ethdev.c
@@ -16,7 +16,6 @@
#include <sys/ioctl.h>
#include <rte_ethdev.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_memzone.h>
#include <rte_devargs.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 34/61] net/nfp: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (32 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 33/61] net/netvsc: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 35/61] net/ngbe: " Stephen Hemminger
` (27 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Chaoyong He
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/nfp/flower/nfp_conntrack.c | 2 +-
drivers/net/nfp/flower/nfp_flower_flow.c | 16 ++++++++--------
drivers/net/nfp/nfp_mtr.c | 10 +++++-----
3 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/drivers/net/nfp/flower/nfp_conntrack.c b/drivers/net/nfp/flower/nfp_conntrack.c
index 439a1a1b0e..ebb80ae5a7 100644
--- a/drivers/net/nfp/flower/nfp_conntrack.c
+++ b/drivers/net/nfp/flower/nfp_conntrack.c
@@ -1475,7 +1475,7 @@ nfp_ct_do_flow_merge(struct nfp_ct_zone_entry *ze,
merge_entry->ze = ze;
merge_entry->pre_ct_parent = pre_ct_entry;
merge_entry->post_ct_parent = post_ct_entry;
- rte_memcpy(merge_entry->cookie, new_cookie, sizeof(new_cookie));
+ memcpy(merge_entry->cookie, new_cookie, sizeof(new_cookie));
merge_entry->rule.items_cnt = pre_ct_entry->rule.items_cnt +
post_ct_entry->rule.items_cnt - cnt_same_item - 1;
merge_entry->rule.actions_cnt = pre_ct_entry->rule.actions_cnt +
diff --git a/drivers/net/nfp/flower/nfp_flower_flow.c b/drivers/net/nfp/flower/nfp_flower_flow.c
index ad0fe9a8ef..426fdfe71c 100644
--- a/drivers/net/nfp/flower/nfp_flower_flow.c
+++ b/drivers/net/nfp/flower/nfp_flower_flow.c
@@ -234,10 +234,10 @@ nfp_mask_id_alloc_from_driver(struct nfp_flow_priv *priv,
return -ENOENT;
}
- rte_memcpy(&temp_id, &ring->buf[ring->tail], NFP_FLOWER_MASK_ELEMENT_RS);
+ memcpy(&temp_id, &ring->buf[ring->tail], NFP_FLOWER_MASK_ELEMENT_RS);
*mask_id = temp_id;
- rte_memcpy(&ring->buf[ring->tail], &freed_id, NFP_FLOWER_MASK_ELEMENT_RS);
+ memcpy(&ring->buf[ring->tail], &freed_id, NFP_FLOWER_MASK_ELEMENT_RS);
ring->tail = (ring->tail + NFP_FLOWER_MASK_ELEMENT_RS) %
(NFP_FLOWER_MASK_ENTRY_RS * NFP_FLOWER_MASK_ELEMENT_RS);
@@ -256,7 +256,7 @@ nfp_mask_id_free_from_driver(struct nfp_flow_priv *priv,
if (CIRC_SPACE(ring->head, ring->tail, NFP_FLOWER_MASK_ENTRY_RS) == 0)
return -ENOBUFS;
- rte_memcpy(&ring->buf[ring->head], &mask_id, NFP_FLOWER_MASK_ELEMENT_RS);
+ memcpy(&ring->buf[ring->head], &mask_id, NFP_FLOWER_MASK_ELEMENT_RS);
ring->head = (ring->head + NFP_FLOWER_MASK_ELEMENT_RS) %
(NFP_FLOWER_MASK_ENTRY_RS * NFP_FLOWER_MASK_ELEMENT_RS);
@@ -2929,13 +2929,13 @@ nfp_flow_action_set_mac(char *act_data,
set_mac = action->conf;
if (mac_src_flag) {
- rte_memcpy(&set_eth->eth_addr[RTE_ETHER_ADDR_LEN],
- set_mac->mac_addr, RTE_ETHER_ADDR_LEN);
+ memcpy(&set_eth->eth_addr[RTE_ETHER_ADDR_LEN],
+ set_mac->mac_addr, RTE_ETHER_ADDR_LEN);
for (i = 0; i < RTE_ETHER_ADDR_LEN; i++)
set_eth->eth_addr_mask[RTE_ETHER_ADDR_LEN + i] = 0xff;
} else {
- rte_memcpy(&set_eth->eth_addr[0],
- set_mac->mac_addr, RTE_ETHER_ADDR_LEN);
+ memcpy(&set_eth->eth_addr[0], set_mac->mac_addr,
+ RTE_ETHER_ADDR_LEN);
for (i = 0; i < RTE_ETHER_ADDR_LEN; i++)
set_eth->eth_addr_mask[i] = 0xff;
}
@@ -3011,7 +3011,7 @@ nfp_flow_action_set_ipv6(char *act_data,
set_ip->reserved = 0;
for (i = 0; i < 4; i++) {
- rte_memcpy(&tmp, &set_ipv6->ipv6_addr.a[i * 4], 4);
+ memcpy(&tmp, &set_ipv6->ipv6_addr.a[i * 4], 4);
set_ip->ipv6[i].exact = tmp;
set_ip->ipv6[i].mask = RTE_BE32(0xffffffff);
}
diff --git a/drivers/net/nfp/nfp_mtr.c b/drivers/net/nfp/nfp_mtr.c
index 4833ebd881..8d121f1b7c 100644
--- a/drivers/net/nfp/nfp_mtr.c
+++ b/drivers/net/nfp/nfp_mtr.c
@@ -250,7 +250,7 @@ nfp_mtr_profile_mod(struct nfp_app_fw_flower *app_fw_flower,
struct nfp_profile_conf old_conf;
/* Get the old profile config */
- rte_memcpy(&old_conf, &mtr_profile->conf, sizeof(old_conf));
+ memcpy(&old_conf, &mtr_profile->conf, sizeof(old_conf));
memset(&mtr_profile->conf, 0, sizeof(struct nfp_profile_conf));
@@ -274,7 +274,7 @@ nfp_mtr_profile_mod(struct nfp_app_fw_flower *app_fw_flower,
return 0;
rollback:
- rte_memcpy(&mtr_profile->conf, &old_conf, sizeof(old_conf));
+ memcpy(&mtr_profile->conf, &old_conf, sizeof(old_conf));
return ret;
}
@@ -499,8 +499,8 @@ nfp_mtr_policy_add(struct rte_eth_dev *dev,
}
mtr_policy->policy_id = mtr_policy_id;
- rte_memcpy(&mtr_policy->policy, policy,
- sizeof(struct rte_mtr_meter_policy_params));
+ memcpy(&mtr_policy->policy, policy,
+ sizeof(struct rte_mtr_meter_policy_params));
/* Insert policy into policy list */
LIST_INSERT_HEAD(&priv->policies, mtr_policy, next);
@@ -1035,7 +1035,7 @@ nfp_mtr_stats_read(struct rte_eth_dev *dev,
*stats_mask = mtr->stats_mask;
rte_spinlock_lock(&priv->mtr_stats_lock);
- rte_memcpy(&curr, &mtr->mtr_stats.curr, sizeof(curr));
+ memcpy(&curr, &mtr->mtr_stats.curr, sizeof(curr));
rte_spinlock_unlock(&priv->mtr_stats_lock);
prev = &mtr->mtr_stats.prev;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 35/61] net/ngbe: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (33 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 34/61] net/nfp: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 36/61] net/ntnic: " Stephen Hemminger
` (26 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Jiawen Wu, Zaiyu Wang
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/ngbe/ngbe_pf.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ngbe/ngbe_pf.c b/drivers/net/ngbe/ngbe_pf.c
index db2384e28c..5f33aaff5f 100644
--- a/drivers/net/ngbe/ngbe_pf.c
+++ b/drivers/net/ngbe/ngbe_pf.c
@@ -347,7 +347,7 @@ ngbe_vf_reset(struct rte_eth_dev *eth_dev, uint16_t vf, uint32_t *msgbuf)
/* reply to reset with ack and vf mac address */
msgbuf[0] = NGBE_VF_RESET | NGBE_VT_MSGTYPE_ACK;
- rte_memcpy(new_mac, vf_mac, RTE_ETHER_ADDR_LEN);
+ memcpy(new_mac, vf_mac, RTE_ETHER_ADDR_LEN);
/*
* Piggyback the multicast filter type so VF can compute the
* correct vectors
@@ -369,7 +369,7 @@ ngbe_vf_set_mac_addr(struct rte_eth_dev *eth_dev,
struct rte_ether_addr *ea = (struct rte_ether_addr *)new_mac;
if (rte_is_valid_assigned_ether_addr(ea)) {
- rte_memcpy(vfinfo[vf].vf_mac_addresses, new_mac, 6);
+ memcpy(vfinfo[vf].vf_mac_addresses, new_mac, 6);
return hw->mac.set_rar(hw, rar_entry, new_mac, vf, true);
}
return -1;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 36/61] net/ntnic: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (34 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 35/61] net/ngbe: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 37/61] net/null: " Stephen Hemminger
` (25 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Christian Koue Muf, Serhii Iliushyk
The uses of rte_memcpy() in the RSS hash key update and get are
control path only. Regular memcpy() has no performance disadvantage
there and gets more compile time checking of the arguments.
The remaining uses of rte_memcpy() are left alone since they are on
the receive and transmit fast paths.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/ntnic/ntnic_ethdev.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ntnic/ntnic_ethdev.c b/drivers/net/ntnic/ntnic_ethdev.c
index 7cc90a7a5b..a61e675bd1 100644
--- a/drivers/net/ntnic/ntnic_ethdev.c
+++ b/drivers/net/ntnic/ntnic_ethdev.c
@@ -1768,7 +1768,7 @@ static int eth_dev_rss_hash_update(struct rte_eth_dev *eth_dev, struct rte_eth_r
return -1;
}
- rte_memcpy(&tmp_rss_conf.rss_key, rss_conf->rss_key, rss_conf->rss_key_len);
+ memcpy(&tmp_rss_conf.rss_key, rss_conf->rss_key, rss_conf->rss_key_len);
}
tmp_rss_conf.algorithm = rss_conf->algorithm;
@@ -1778,7 +1778,8 @@ static int eth_dev_rss_hash_update(struct rte_eth_dev *eth_dev, struct rte_eth_r
if (res == 0) {
flow_filter_ops->nthw_mod_hsh_rcp_flush(&ndev->be, hsh_idx, 1);
- rte_memcpy(&ndev->rss_conf, &tmp_rss_conf, sizeof(struct nt_eth_rss_conf));
+ memcpy(&ndev->rss_conf, &tmp_rss_conf,
+ sizeof(struct nt_eth_rss_conf));
} else {
NT_LOG(ERR, NTNIC, "ERROR: - RSS hash update failed with error %i", res);
@@ -1803,7 +1804,7 @@ static int rss_hash_conf_get(struct rte_eth_dev *eth_dev, struct rte_eth_rss_con
if (rss_conf->rss_key != NULL) {
int key_len = RTE_MIN(rss_conf->rss_key_len, MAX_RSS_KEY_LEN);
memset(rss_conf->rss_key, 0, rss_conf->rss_key_len);
- rte_memcpy(rss_conf->rss_key, &ndev->rss_conf.rss_key, key_len);
+ memcpy(rss_conf->rss_key, &ndev->rss_conf.rss_key, key_len);
rss_conf->rss_key_len = key_len;
}
@@ -2555,8 +2556,8 @@ nthw_pci_dev_init(struct rte_pci_device *pci_dev)
eth_dev->data->dev_private = internals;
eth_dev->data->mac_addrs = rte_malloc(NULL,
NUM_MAC_ADDRS_PER_PORT * sizeof(struct rte_ether_addr), 0);
- rte_memcpy(ð_dev->data->mac_addrs[0],
- &internals->eth_addrs[0], RTE_ETHER_ADDR_LEN);
+ memcpy(ð_dev->data->mac_addrs[0], &internals->eth_addrs[0],
+ RTE_ETHER_ADDR_LEN);
NT_LOG_DBGX(DBG, NTNIC, "Setting up RX functions for SCG");
eth_dev->rx_pkt_burst = eth_dev_rx_scg;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 37/61] net/null: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (35 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 36/61] net/ntnic: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 38/61] net/qede: " Stephen Hemminger
` (24 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Tetsuya Mukawa
The null driver is not used for high speed production traffic, so
any marginal performance difference from using regular memcpy() does
not matter. Regular memcpy() gets more compile time checking of the
arguments.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/null/rte_eth_null.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c
index 7fba3a661b..3e21649f6e 100644
--- a/drivers/net/null/rte_eth_null.c
+++ b/drivers/net/null/rte_eth_null.c
@@ -4,12 +4,12 @@
*/
#include <stdlib.h>
+#include <string.h>
#include <rte_mbuf.h>
#include <ethdev_driver.h>
#include <ethdev_vdev.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <bus_vdev_driver.h>
#include <rte_kvargs.h>
#include <rte_spinlock.h>
@@ -121,7 +121,7 @@ eth_null_copy_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)
return 0;
for (i = 0; i < nb_bufs; i++) {
- rte_memcpy(rte_pktmbuf_mtod(bufs[i], void *), h->dummy_packet,
+ memcpy(rte_pktmbuf_mtod(bufs[i], void *), h->dummy_packet,
packet_size);
bufs[i]->data_len = (uint16_t)packet_size;
bufs[i]->pkt_len = packet_size;
@@ -169,7 +169,7 @@ eth_null_copy_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)
struct rte_mbuf *m = bufs[i];
size_t len = RTE_MIN(h->internals->packet_size, m->data_len);
- rte_memcpy(h->dummy_packet, rte_pktmbuf_mtod(m, void *), len);
+ memcpy(h->dummy_packet, rte_pktmbuf_mtod(m, void *), len);
bytes += m->pkt_len;
}
@@ -465,7 +465,7 @@ eth_rss_hash_update(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf)
rss_conf->rss_hf & internal->flow_type_rss_offloads;
if (rss_conf->rss_key)
- rte_memcpy(internal->rss_key, rss_conf->rss_key, 40);
+ memcpy(internal->rss_key, rss_conf->rss_key, 40);
rte_spinlock_unlock(&internal->rss_lock);
@@ -482,7 +482,7 @@ eth_rss_hash_conf_get(struct rte_eth_dev *dev,
rss_conf->rss_hf = dev->data->dev_conf.rx_adv_conf.rss_conf.rss_hf;
if (rss_conf->rss_key)
- rte_memcpy(rss_conf->rss_key, internal->rss_key, 40);
+ memcpy(rss_conf->rss_key, internal->rss_key, 40);
rte_spinlock_unlock(&internal->rss_lock);
@@ -577,7 +577,7 @@ eth_dev_null_create(struct rte_vdev_device *dev, struct pmd_options *args)
internals->flow_type_rss_offloads = RTE_ETH_RSS_PROTO_MASK;
internals->reta_size = RTE_DIM(internals->reta_conf) * RTE_ETH_RETA_GROUP_SIZE;
- rte_memcpy(internals->rss_key, default_rss_key, 40);
+ memcpy(internals->rss_key, default_rss_key, 40);
data = eth_dev->data;
data->nb_rx_queues = (uint16_t)nb_rx_queues;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 38/61] net/qede: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (36 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 37/61] net/null: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 39/61] net/ring: " Stephen Hemminger
` (23 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Devendra Singh Rawat, Alok Prasad
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/qede/qede_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/qede/qede_main.c b/drivers/net/qede/qede_main.c
index fd63262f3a..32fa2016d2 100644
--- a/drivers/net/qede/qede_main.c
+++ b/drivers/net/qede/qede_main.c
@@ -180,7 +180,7 @@ static void qed_handle_bulletin_change(struct ecore_hwfn *hwfn)
is_mac_exist = ecore_vf_bulletin_get_forced_mac(hwfn, mac,
&is_mac_forced);
if (is_mac_exist && is_mac_forced)
- rte_memcpy(hwfn->hw_info.hw_mac_addr, mac, ETH_ALEN);
+ memcpy(hwfn->hw_info.hw_mac_addr, mac, ETH_ALEN);
/* Always update link configuration according to bulletin */
qed_link_update(hwfn);
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 39/61] net/ring: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (37 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 38/61] net/qede: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 40/61] net/sfc: " Stephen Hemminger
` (22 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Bruce Richardson
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/ring/rte_eth_ring.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
index b639544eab..60d41d8c06 100644
--- a/drivers/net/ring/rte_eth_ring.c
+++ b/drivers/net/ring/rte_eth_ring.c
@@ -9,7 +9,6 @@
#include <rte_mbuf.h>
#include <ethdev_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_os_shim.h>
#include <rte_string_fns.h>
#include <bus_vdev_driver.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 40/61] net/sfc: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (38 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 39/61] net/ring: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 41/61] net/txgbe: " Stephen Hemminger
` (21 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Andrew Rybchenko
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/sfc/sfc.c | 2 +-
drivers/net/sfc/sfc_ef10_tx.c | 2 +-
drivers/net/sfc/sfc_ethdev.c | 11 +++++------
drivers/net/sfc/sfc_flow.c | 20 ++++++++++----------
| 2 +-
drivers/net/sfc/sfc_mae.c | 2 +-
drivers/net/sfc/sfc_rx.c | 2 +-
drivers/net/sfc/sfc_tso.c | 2 +-
drivers/net/sfc/sfc_tso.h | 9 ++++-----
9 files changed, 25 insertions(+), 27 deletions(-)
diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c
index 39cd8d519a..6a136926f6 100644
--- a/drivers/net/sfc/sfc.c
+++ b/drivers/net/sfc/sfc.c
@@ -853,7 +853,7 @@ sfc_rss_attach(struct sfc_adapter *sa)
efx_ev_fini(sa->nic);
efx_intr_fini(sa->nic);
- rte_memcpy(rss->key, default_rss_key, sizeof(rss->key));
+ memcpy(rss->key, default_rss_key, sizeof(rss->key));
memset(&rss->dummy_ctx, 0, sizeof(rss->dummy_ctx));
rss->dummy_ctx.conf.qid_span = 1;
rss->dummy_ctx.dummy = true;
diff --git a/drivers/net/sfc/sfc_ef10_tx.c b/drivers/net/sfc/sfc_ef10_tx.c
index 5543dc495f..dd4745a90a 100644
--- a/drivers/net/sfc/sfc_ef10_tx.c
+++ b/drivers/net/sfc/sfc_ef10_tx.c
@@ -514,7 +514,7 @@ sfc_ef10_xmit_tso_pkt(struct sfc_ef10_txq * const txq, struct rte_mbuf *m_seg,
first_m_seg->outer_l2_len);
th = (const struct rte_tcp_hdr *)(hdr_addr + tcph_off);
- rte_memcpy(&sent_seq, &th->sent_seq, sizeof(uint32_t));
+ memcpy(&sent_seq, &th->sent_seq, sizeof(uint32_t));
sent_seq = rte_be_to_cpu_32(sent_seq);
sfc_ef10_tx_qdesc_tso2_create(txq, *added, packet_id, outer_packet_id,
diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index 6be91789cf..a4fb9b2cff 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -1438,8 +1438,7 @@ sfc_set_mc_addr_list(struct rte_eth_dev *dev,
}
for (i = 0; i < nb_mc_addr; ++i) {
- rte_memcpy(mc_addrs, mc_addr_set[i].addr_bytes,
- EFX_MAC_ADDR_LEN);
+ memcpy(mc_addrs, mc_addr_set[i].addr_bytes, EFX_MAC_ADDR_LEN);
mc_addrs += EFX_MAC_ADDR_LEN;
}
@@ -1823,7 +1822,7 @@ sfc_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
rss_conf->rss_hf = sfc_rx_hf_efx_to_rte(rss, rss->hash_types);
rss_conf->rss_key_len = EFX_RSS_KEY_SIZE;
if (rss_conf->rss_key != NULL)
- rte_memcpy(rss_conf->rss_key, rss->key, EFX_RSS_KEY_SIZE);
+ memcpy(rss_conf->rss_key, rss->key, EFX_RSS_KEY_SIZE);
return 0;
}
@@ -1892,7 +1891,7 @@ sfc_dev_rss_hash_update(struct rte_eth_dev *dev,
}
}
- rte_memcpy(rss->key, rss_conf->rss_key, sizeof(rss->key));
+ memcpy(rss->key, rss_conf->rss_key, sizeof(rss->key));
}
rss->hash_types = efx_hash_types;
@@ -1991,7 +1990,7 @@ sfc_dev_rss_reta_update(struct rte_eth_dev *dev,
sfc_adapter_lock(sa);
- rte_memcpy(rss_tbl_new, rss->tbl, sizeof(rss->tbl));
+ memcpy(rss_tbl_new, rss->tbl, sizeof(rss->tbl));
for (entry = 0; entry < reta_size; entry++) {
int grp_idx = entry % RTE_ETH_RETA_GROUP_SIZE;
@@ -2015,7 +2014,7 @@ sfc_dev_rss_reta_update(struct rte_eth_dev *dev,
goto fail_scale_tbl_set;
}
- rte_memcpy(rss->tbl, rss_tbl_new, sizeof(rss->tbl));
+ memcpy(rss->tbl, rss_tbl_new, sizeof(rss->tbl));
fail_scale_tbl_set:
bad_reta_entry:
diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c
index 1006243539..66158bdff7 100644
--- a/drivers/net/sfc/sfc_flow.c
+++ b/drivers/net/sfc/sfc_flow.c
@@ -325,8 +325,8 @@ sfc_flow_parse_eth(const struct rte_flow_item *item,
efx_spec->efs_match_flags |= is_ifrm ?
EFX_FILTER_MATCH_IFRM_LOC_MAC :
EFX_FILTER_MATCH_LOC_MAC;
- rte_memcpy(loc_mac, spec->hdr.dst_addr.addr_bytes,
- EFX_MAC_ADDR_LEN);
+ memcpy(loc_mac, spec->hdr.dst_addr.addr_bytes,
+ EFX_MAC_ADDR_LEN);
} else if (memcmp(mask->hdr.dst_addr.addr_bytes, ig_mask,
EFX_MAC_ADDR_LEN) == 0) {
if (rte_is_unicast_ether_addr(&spec->hdr.dst_addr))
@@ -348,8 +348,8 @@ sfc_flow_parse_eth(const struct rte_flow_item *item,
*/
if (rte_is_same_ether_addr(&mask->hdr.src_addr, &supp_mask.hdr.src_addr)) {
efx_spec->efs_match_flags |= EFX_FILTER_MATCH_REM_MAC;
- rte_memcpy(efx_spec->efs_rem_mac, spec->hdr.src_addr.addr_bytes,
- EFX_MAC_ADDR_LEN);
+ memcpy(efx_spec->efs_rem_mac, spec->hdr.src_addr.addr_bytes,
+ EFX_MAC_ADDR_LEN);
} else if (!rte_is_zero_ether_addr(&mask->hdr.src_addr)) {
goto fail_bad_mask;
}
@@ -618,8 +618,8 @@ sfc_flow_parse_ipv6(const struct rte_flow_item *item,
RTE_BUILD_BUG_ON(sizeof(efx_spec->efs_rem_host) !=
sizeof(spec->hdr.src_addr));
- rte_memcpy(&efx_spec->efs_rem_host, &spec->hdr.src_addr,
- sizeof(efx_spec->efs_rem_host));
+ memcpy(&efx_spec->efs_rem_host, &spec->hdr.src_addr,
+ sizeof(efx_spec->efs_rem_host));
} else if (!sfc_flow_is_zero(mask->hdr.src_addr.a,
sizeof(mask->hdr.src_addr))) {
goto fail_bad_mask;
@@ -631,8 +631,8 @@ sfc_flow_parse_ipv6(const struct rte_flow_item *item,
RTE_BUILD_BUG_ON(sizeof(efx_spec->efs_loc_host) !=
sizeof(spec->hdr.dst_addr));
- rte_memcpy(&efx_spec->efs_loc_host, &spec->hdr.dst_addr,
- sizeof(efx_spec->efs_loc_host));
+ memcpy(&efx_spec->efs_loc_host, &spec->hdr.dst_addr,
+ sizeof(efx_spec->efs_loc_host));
} else if (!sfc_flow_is_zero(mask->hdr.dst_addr.a,
sizeof(mask->hdr.dst_addr))) {
goto fail_bad_mask;
@@ -883,8 +883,8 @@ sfc_flow_set_efx_spec_vni_or_vsid(efx_filter_spec_t *efx_spec,
if (memcmp(vni_or_vsid_mask, vni_or_vsid_full_mask,
EFX_VNI_OR_VSID_LEN) == 0) {
efx_spec->efs_match_flags |= EFX_FILTER_MATCH_VNI_OR_VSID;
- rte_memcpy(efx_spec->efs_vni_or_vsid, vni_or_vsid_val,
- EFX_VNI_OR_VSID_LEN);
+ memcpy(efx_spec->efs_vni_or_vsid, vni_or_vsid_val,
+ EFX_VNI_OR_VSID_LEN);
} else if (!sfc_flow_is_zero(vni_or_vsid_mask, EFX_VNI_OR_VSID_LEN)) {
rte_flow_error_set(error, EINVAL,
RTE_FLOW_ERROR_TYPE_ITEM, item,
--git a/drivers/net/sfc/sfc_flow_rss.c b/drivers/net/sfc/sfc_flow_rss.c
index 8e2749833b..7656ffb9f8 100644
--- a/drivers/net/sfc/sfc_flow_rss.c
+++ b/drivers/net/sfc/sfc_flow_rss.c
@@ -119,7 +119,7 @@ sfc_flow_rss_parse_conf(struct sfc_adapter *sa,
key = ethdev_rss->key;
}
- rte_memcpy(out->key, key, sizeof(out->key));
+ memcpy(out->key, key, sizeof(out->key));
switch (in->func) {
case RTE_ETH_HASH_FUNCTION_DEFAULT:
diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c
index b0e8b02b41..d9aa47e52e 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -546,7 +546,7 @@ sfc_mae_mac_addr_add(struct sfc_adapter *sa,
if (mac_addr == NULL)
return ENOMEM;
- rte_memcpy(mac_addr->addr_bytes, addr_bytes, EFX_MAC_ADDR_LEN);
+ memcpy(mac_addr->addr_bytes, addr_bytes, EFX_MAC_ADDR_LEN);
mac_addr->refcnt = 1;
mac_addr->fw_rsrc.mac_id.id = EFX_MAE_RSRC_ID_INVALID;
diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c
index d8b961ff7e..1b1176925b 100644
--- a/drivers/net/sfc/sfc_rx.c
+++ b/drivers/net/sfc/sfc_rx.c
@@ -1527,7 +1527,7 @@ sfc_rx_process_adv_conf_rss(struct sfc_adapter *sa,
sizeof(rss->key));
return EINVAL;
}
- rte_memcpy(rss->key, conf->rss_key, sizeof(rss->key));
+ memcpy(rss->key, conf->rss_key, sizeof(rss->key));
}
rss->hash_types = efx_hash_types;
diff --git a/drivers/net/sfc/sfc_tso.c b/drivers/net/sfc/sfc_tso.c
index a0827d1c0d..5da2de3c3d 100644
--- a/drivers/net/sfc/sfc_tso.c
+++ b/drivers/net/sfc/sfc_tso.c
@@ -159,7 +159,7 @@ sfc_efx_tso_do(struct sfc_efx_txq *txq, unsigned int idx,
/* Handle TCP header */
th = (const struct rte_tcp_hdr *)(tsoh + tcph_off);
- rte_memcpy(&sent_seq, &th->sent_seq, sizeof(uint32_t));
+ memcpy(&sent_seq, &th->sent_seq, sizeof(uint32_t));
sent_seq = rte_be_to_cpu_32(sent_seq);
efx_tx_qdesc_tso2_create(txq->common, packet_id, 0, sent_seq,
diff --git a/drivers/net/sfc/sfc_tso.h b/drivers/net/sfc/sfc_tso.h
index 9029ad1590..e914eae77e 100644
--- a/drivers/net/sfc/sfc_tso.h
+++ b/drivers/net/sfc/sfc_tso.h
@@ -35,7 +35,7 @@ sfc_tso_ip4_get_ipid(const uint8_t *pkt_hdrp, size_t ip_hdr_off)
uint16_t ipid;
ip_hdrp = (const struct rte_ipv4_hdr *)(pkt_hdrp + ip_hdr_off);
- rte_memcpy(&ipid, &ip_hdrp->packet_id, sizeof(ipid));
+ memcpy(&ipid, &ip_hdrp->packet_id, sizeof(ipid));
return rte_be_to_cpu_16(ipid);
}
@@ -46,9 +46,8 @@ sfc_tso_outer_udp_fix_len(const struct rte_mbuf *m, uint8_t *tsoh)
rte_be16_t len = rte_cpu_to_be_16(m->l2_len + m->l3_len + m->l4_len +
m->tso_segsz);
- rte_memcpy(tsoh + m->outer_l2_len + m->outer_l3_len +
- offsetof(struct rte_udp_hdr, dgram_len),
- &len, sizeof(len));
+ memcpy(tsoh + m->outer_l2_len + m->outer_l3_len + offsetof(struct rte_udp_hdr, dgram_len),
+ &len, sizeof(len));
}
static inline void
@@ -67,7 +66,7 @@ sfc_tso_innermost_ip_fix_len(const struct rte_mbuf *m, uint8_t *tsoh,
len = rte_cpu_to_be_16(ip_payload_len);
}
- rte_memcpy(tsoh + iph_ofst + field_ofst, &len, sizeof(len));
+ memcpy(tsoh + iph_ofst + field_ofst, &len, sizeof(len));
}
unsigned int sfc_tso_prepare_header(uint8_t *tsoh, size_t header_len,
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 41/61] net/txgbe: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (39 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 40/61] net/sfc: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 42/61] net/vhost: " Stephen Hemminger
` (20 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Jiawen Wu, Zaiyu Wang
Don't need rte_memcpy() for small fixed values.
The use of rte_memcpy() in the IPV6_ADDR_TO_MASK macro is in the
flow director mask setup, which is control path only. Regular
memcpy() has no performance disadvantage there and gets more
compile time checking of the arguments.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/txgbe/txgbe_ethdev.c | 9 ++--
drivers/net/txgbe/txgbe_fdir.c | 11 +++--
drivers/net/txgbe/txgbe_flow.c | 73 +++++++++++++++-----------------
drivers/net/txgbe/txgbe_ipsec.c | 8 ++--
drivers/net/txgbe/txgbe_pf.c | 6 +--
drivers/net/txgbe/txgbe_tm.c | 11 +++--
6 files changed, 53 insertions(+), 65 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index 4d2746371b..69be47e8f4 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -4933,9 +4933,8 @@ txgbe_add_del_ntuple_filter(struct rte_eth_dev *dev,
sizeof(struct txgbe_5tuple_filter), 0);
if (filter == NULL)
return -ENOMEM;
- rte_memcpy(&filter->filter_info,
- &filter_5tuple,
- sizeof(struct txgbe_5tuple_filter_info));
+ memcpy(&filter->filter_info, &filter_5tuple,
+ sizeof(struct txgbe_5tuple_filter_info));
filter->queue = ntuple_filter->queue;
ret = txgbe_add_5tuple_filter(dev, filter);
if (ret < 0) {
@@ -5889,9 +5888,7 @@ txgbe_dev_l2_tunnel_filter_add(struct rte_eth_dev *dev,
if (!node)
return -ENOMEM;
- rte_memcpy(&node->key,
- &key,
- sizeof(struct txgbe_l2_tn_key));
+ memcpy(&node->key, &key, sizeof(struct txgbe_l2_tn_key));
node->pool = l2_tunnel->pool;
ret = txgbe_insert_l2_tn_filter(l2_tn_info, node);
if (ret < 0) {
diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c
index 67f586ffc7..2a9f56b49a 100644
--- a/drivers/net/txgbe/txgbe_fdir.c
+++ b/drivers/net/txgbe/txgbe_fdir.c
@@ -21,7 +21,7 @@
#define IPV6_ADDR_TO_MASK(ipaddr, ipv6m) do { \
uint8_t ipv6_addr[16]; \
uint8_t i; \
- rte_memcpy(ipv6_addr, (ipaddr), sizeof(ipv6_addr));\
+ memcpy(ipv6_addr, (ipaddr), sizeof(ipv6_addr));\
(ipv6m) = 0; \
for (i = 0; i < sizeof(ipv6_addr); i++) { \
if (ipv6_addr[i] == UINT8_MAX) \
@@ -42,7 +42,7 @@
else \
ipv6_addr[i] = 0; \
} \
- rte_memcpy((ipaddr), ipv6_addr, sizeof(ipv6_addr));\
+ memcpy((ipaddr), ipv6_addr, sizeof(ipv6_addr));\
} while (0)
/**
@@ -898,8 +898,8 @@ txgbe_fdir_filter_program(struct rte_eth_dev *dev,
sizeof(struct txgbe_fdir_filter), 0);
if (!node)
return -ENOMEM;
- rte_memcpy(&node->input, &rule->input,
- sizeof(struct txgbe_atr_input));
+ memcpy(&node->input, &rule->input,
+ sizeof(struct txgbe_atr_input));
node->fdirflags = rule->fdirflags;
node->fdirhash = fdirhash;
node->queue = queue;
@@ -1051,8 +1051,7 @@ txgbevf_fdir_filter_program(struct rte_eth_dev *dev,
sizeof(struct txgbe_fdir_filter), 0);
if (!node)
return -ENOMEM;
- rte_memcpy(&node->input, input,
- sizeof(struct txgbe_atr_input));
+ memcpy(&node->input, input, sizeof(struct txgbe_atr_input));
node->fdirflags = rule->fdirflags;
node->fdirhash = fdirhash;
node->queue = rule->queue;
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index 1bb0d3978c..8d7d919262 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -1868,10 +1868,10 @@ txgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev __rte_unused,
if (item->spec) {
rule->b_spec = TRUE;
ipv6_spec = item->spec;
- rte_memcpy(rule->input.src_ip,
- &ipv6_spec->hdr.src_addr, 16);
- rte_memcpy(rule->input.dst_ip,
- &ipv6_spec->hdr.dst_addr, 16);
+ memcpy(rule->input.src_ip, &ipv6_spec->hdr.src_addr,
+ 16);
+ memcpy(rule->input.dst_ip, &ipv6_spec->hdr.dst_addr,
+ 16);
}
/**
@@ -2628,10 +2628,10 @@ txgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
if (item->spec) {
rule->b_spec = TRUE;
ipv6_spec = item->spec;
- rte_memcpy(rule->input.src_ip,
- &ipv6_spec->hdr.src_addr, 16);
- rte_memcpy(rule->input.dst_ip,
- &ipv6_spec->hdr.dst_addr, 16);
+ memcpy(rule->input.src_ip, &ipv6_spec->hdr.src_addr,
+ 16);
+ memcpy(rule->input.dst_ip, &ipv6_spec->hdr.dst_addr,
+ 16);
}
/**
@@ -3254,9 +3254,9 @@ txgbe_flow_create(struct rte_eth_dev *dev,
PMD_DRV_LOG(ERR, "failed to allocate memory");
goto out;
}
- rte_memcpy(&ntuple_filter_ptr->filter_info,
- &ntuple_filter,
- sizeof(struct rte_eth_ntuple_filter));
+ memcpy(&ntuple_filter_ptr->filter_info,
+ &ntuple_filter,
+ sizeof(struct rte_eth_ntuple_filter));
TAILQ_INSERT_TAIL(&filter_ntuple_list,
ntuple_filter_ptr, entries);
flow->rule = ntuple_filter_ptr;
@@ -3283,9 +3283,9 @@ txgbe_flow_create(struct rte_eth_dev *dev,
PMD_DRV_LOG(ERR, "failed to allocate memory");
goto out;
}
- rte_memcpy(ðertype_filter_ptr->filter_info,
- ðertype_filter,
- sizeof(struct rte_eth_ethertype_filter));
+ memcpy(ðertype_filter_ptr->filter_info,
+ ðertype_filter,
+ sizeof(struct rte_eth_ethertype_filter));
TAILQ_INSERT_TAIL(&filter_ethertype_list,
ethertype_filter_ptr, entries);
flow->rule = ethertype_filter_ptr;
@@ -3307,9 +3307,8 @@ txgbe_flow_create(struct rte_eth_dev *dev,
PMD_DRV_LOG(ERR, "failed to allocate memory");
goto out;
}
- rte_memcpy(&syn_filter_ptr->filter_info,
- &syn_filter,
- sizeof(struct rte_eth_syn_filter));
+ memcpy(&syn_filter_ptr->filter_info, &syn_filter,
+ sizeof(struct rte_eth_syn_filter));
TAILQ_INSERT_TAIL(&filter_syn_list,
syn_filter_ptr,
entries);
@@ -3335,9 +3334,8 @@ txgbe_flow_create(struct rte_eth_dev *dev,
PMD_DRV_LOG(ERR, "failed to allocate memory");
goto out;
}
- rte_memcpy(&fdir_rule_ptr->filter_info,
- &fdir_rule,
- sizeof(struct txgbe_fdir_rule));
+ memcpy(&fdir_rule_ptr->filter_info, &fdir_rule,
+ sizeof(struct txgbe_fdir_rule));
TAILQ_INSERT_TAIL(&filter_fdir_list,
fdir_rule_ptr, entries);
flow->rule = fdir_rule_ptr;
@@ -3403,9 +3401,9 @@ txgbe_flow_create(struct rte_eth_dev *dev,
"failed to allocate memory");
goto out;
}
- rte_memcpy(&fdir_rule_ptr->filter_info,
- &fdir_rule,
- sizeof(struct txgbe_fdir_rule));
+ memcpy(&fdir_rule_ptr->filter_info,
+ &fdir_rule,
+ sizeof(struct txgbe_fdir_rule));
TAILQ_INSERT_TAIL(&filter_fdir_list,
fdir_rule_ptr, entries);
flow->rule = fdir_rule_ptr;
@@ -3440,9 +3438,8 @@ txgbe_flow_create(struct rte_eth_dev *dev,
PMD_DRV_LOG(ERR, "failed to allocate memory");
goto out;
}
- rte_memcpy(&l2_tn_filter_ptr->filter_info,
- &l2_tn_filter,
- sizeof(struct txgbe_l2_tunnel_conf));
+ memcpy(&l2_tn_filter_ptr->filter_info, &l2_tn_filter,
+ sizeof(struct txgbe_l2_tunnel_conf));
TAILQ_INSERT_TAIL(&filter_l2_tunnel_list,
l2_tn_filter_ptr, entries);
flow->rule = l2_tn_filter_ptr;
@@ -3569,9 +3566,8 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
case RTE_ETH_FILTER_NTUPLE:
ntuple_filter_ptr = (struct txgbe_ntuple_filter_ele *)
pmd_flow->rule;
- rte_memcpy(&ntuple_filter,
- &ntuple_filter_ptr->filter_info,
- sizeof(struct rte_eth_ntuple_filter));
+ memcpy(&ntuple_filter, &ntuple_filter_ptr->filter_info,
+ sizeof(struct rte_eth_ntuple_filter));
ret = txgbe_add_del_ntuple_filter(dev, &ntuple_filter, FALSE);
if (!ret) {
TAILQ_REMOVE(&filter_ntuple_list,
@@ -3582,9 +3578,8 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
case RTE_ETH_FILTER_ETHERTYPE:
ethertype_filter_ptr = (struct txgbe_ethertype_filter_ele *)
pmd_flow->rule;
- rte_memcpy(ðertype_filter,
- ðertype_filter_ptr->filter_info,
- sizeof(struct rte_eth_ethertype_filter));
+ memcpy(ðertype_filter, ðertype_filter_ptr->filter_info,
+ sizeof(struct rte_eth_ethertype_filter));
ret = txgbe_add_del_ethertype_filter(dev,
ðertype_filter, FALSE);
if (!ret) {
@@ -3596,9 +3591,8 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
case RTE_ETH_FILTER_SYN:
syn_filter_ptr = (struct txgbe_eth_syn_filter_ele *)
pmd_flow->rule;
- rte_memcpy(&syn_filter,
- &syn_filter_ptr->filter_info,
- sizeof(struct rte_eth_syn_filter));
+ memcpy(&syn_filter, &syn_filter_ptr->filter_info,
+ sizeof(struct rte_eth_syn_filter));
ret = txgbe_syn_filter_set(dev, &syn_filter, FALSE);
if (!ret) {
TAILQ_REMOVE(&filter_syn_list,
@@ -3608,9 +3602,8 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
break;
case RTE_ETH_FILTER_FDIR:
fdir_rule_ptr = (struct txgbe_fdir_rule_ele *)pmd_flow->rule;
- rte_memcpy(&fdir_rule,
- &fdir_rule_ptr->filter_info,
- sizeof(struct txgbe_fdir_rule));
+ memcpy(&fdir_rule, &fdir_rule_ptr->filter_info,
+ sizeof(struct txgbe_fdir_rule));
if (txgbe_is_pf(TXGBE_DEV_HW(dev)))
ret = txgbe_fdir_filter_program(dev, &fdir_rule, TRUE, FALSE);
else
@@ -3632,8 +3625,8 @@ txgbe_flow_destroy(struct rte_eth_dev *dev,
case RTE_ETH_FILTER_L2_TUNNEL:
l2_tn_filter_ptr = (struct txgbe_eth_l2_tunnel_conf_ele *)
pmd_flow->rule;
- rte_memcpy(&l2_tn_filter, &l2_tn_filter_ptr->filter_info,
- sizeof(struct txgbe_l2_tunnel_conf));
+ memcpy(&l2_tn_filter, &l2_tn_filter_ptr->filter_info,
+ sizeof(struct txgbe_l2_tunnel_conf));
ret = txgbe_dev_l2_tunnel_filter_del(dev, &l2_tn_filter);
if (!ret) {
TAILQ_REMOVE(&filter_l2_tunnel_list,
diff --git a/drivers/net/txgbe/txgbe_ipsec.c b/drivers/net/txgbe/txgbe_ipsec.c
index 65b6c251c6..e704732541 100644
--- a/drivers/net/txgbe/txgbe_ipsec.c
+++ b/drivers/net/txgbe/txgbe_ipsec.c
@@ -658,10 +658,10 @@ txgbe_crypto_add_ingress_sa_from_flow(const void *sess,
const struct rte_flow_item_ipv6 *ipv6 = ip_spec;
ic_session->src_ip.type = IPv6;
ic_session->dst_ip.type = IPv6;
- rte_memcpy(ic_session->src_ip.ipv6,
- &ipv6->hdr.src_addr, 16);
- rte_memcpy(ic_session->dst_ip.ipv6,
- &ipv6->hdr.dst_addr, 16);
+ memcpy(ic_session->src_ip.ipv6, &ipv6->hdr.src_addr,
+ 16);
+ memcpy(ic_session->dst_ip.ipv6, &ipv6->hdr.dst_addr,
+ 16);
} else {
const struct rte_flow_item_ipv4 *ipv4 = ip_spec;
ic_session->src_ip.type = IPv4;
diff --git a/drivers/net/txgbe/txgbe_pf.c b/drivers/net/txgbe/txgbe_pf.c
index 91f73521fe..9dd6aabce1 100644
--- a/drivers/net/txgbe/txgbe_pf.c
+++ b/drivers/net/txgbe/txgbe_pf.c
@@ -7,6 +7,7 @@
#include <errno.h>
#include <stdint.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#include <inttypes.h>
@@ -17,7 +18,6 @@
#include <rte_eal.h>
#include <rte_ether.h>
#include <ethdev_driver.h>
-#include <rte_memcpy.h>
#include <rte_malloc.h>
#include <rte_random.h>
#include <bus_pci_driver.h>
@@ -435,7 +435,7 @@ txgbe_vf_reset(struct rte_eth_dev *eth_dev, uint16_t vf, uint32_t *msgbuf)
/* reply to reset with ack and vf mac address */
msgbuf[0] = TXGBE_VF_RESET | TXGBE_VT_MSGTYPE_ACK;
- rte_memcpy(new_mac, vf_mac, RTE_ETHER_ADDR_LEN);
+ memcpy(new_mac, vf_mac, RTE_ETHER_ADDR_LEN);
/*
* Piggyback the multicast filter type so VF can compute the
* correct vectors
@@ -457,7 +457,7 @@ txgbe_vf_set_mac_addr(struct rte_eth_dev *eth_dev,
struct rte_ether_addr *ea = (struct rte_ether_addr *)new_mac;
if (rte_is_valid_assigned_ether_addr(ea)) {
- rte_memcpy(vfinfo[vf].vf_mac_addresses, new_mac, 6);
+ memcpy(vfinfo[vf].vf_mac_addresses, new_mac, 6);
return hw->mac.set_rar(hw, rar_entry, new_mac, vf, true);
}
return -1;
diff --git a/drivers/net/txgbe/txgbe_tm.c b/drivers/net/txgbe/txgbe_tm.c
index 29c7c4adfb..b69883ffa9 100644
--- a/drivers/net/txgbe/txgbe_tm.c
+++ b/drivers/net/txgbe/txgbe_tm.c
@@ -280,8 +280,8 @@ txgbe_shaper_profile_add(struct rte_eth_dev *dev,
if (!shaper_profile)
return -ENOMEM;
shaper_profile->shaper_profile_id = shaper_profile_id;
- rte_memcpy(&shaper_profile->profile, profile,
- sizeof(struct rte_tm_shaper_params));
+ memcpy(&shaper_profile->profile, profile,
+ sizeof(struct rte_tm_shaper_params));
TAILQ_INSERT_TAIL(&tm_conf->shaper_profile_list,
shaper_profile, node);
@@ -625,8 +625,8 @@ txgbe_node_add(struct rte_eth_dev *dev, uint32_t node_id,
tm_node->no = 0;
tm_node->parent = NULL;
tm_node->shaper_profile = shaper_profile;
- rte_memcpy(&tm_node->params, params,
- sizeof(struct rte_tm_node_params));
+ memcpy(&tm_node->params, params,
+ sizeof(struct rte_tm_node_params));
tm_conf->root = tm_node;
/* increase the reference counter of the shaper profile */
@@ -706,8 +706,7 @@ txgbe_node_add(struct rte_eth_dev *dev, uint32_t node_id,
tm_node->reference_count = 0;
tm_node->parent = parent_node;
tm_node->shaper_profile = shaper_profile;
- rte_memcpy(&tm_node->params, params,
- sizeof(struct rte_tm_node_params));
+ memcpy(&tm_node->params, params, sizeof(struct rte_tm_node_params));
if (parent_node_type == TXGBE_TM_NODE_TYPE_PORT) {
tm_node->no = parent_node->reference_count;
TAILQ_INSERT_TAIL(&tm_conf->tc_list,
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 42/61] net/vhost: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (40 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 41/61] net/txgbe: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 43/61] net/virtio: " Stephen Hemminger
` (19 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Maxime Coquelin, Chenbo Xia
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/vhost/rte_eth_vhost.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index 05940f2461..97d60ecf5d 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -13,7 +13,6 @@
#include <ethdev_driver.h>
#include <ethdev_vdev.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_net.h>
#include <bus_vdev_driver.h>
#include <rte_kvargs.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 43/61] net/virtio: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (41 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 42/61] net/vhost: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 44/61] net/sxe2: " Stephen Hemminger
` (18 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Maxime Coquelin, Chenbo Xia
Don't need rte_memcpy for fixed size value.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/virtio/virtio_ethdev.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 9fd746b80f..62a9d7fff9 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -10,7 +10,6 @@
#include <unistd.h>
#include <ethdev_driver.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_memzone.h>
#include <rte_malloc.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 44/61] net/sxe2: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (42 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 43/61] net/virtio: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 45/61] net/zxdh: " Stephen Hemminger
` (17 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Jie Liu
The uses of rte_memcpy() in the sxe2 driver are all in the control
path. Regular memcpy() has no performance disadvantage there
and gets more compile time checking of the arguments.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/sxe2/sxe2_cmd_chnl.c | 6 ++--
drivers/net/sxe2/sxe2_flow.c | 11 +++----
drivers/net/sxe2/sxe2_flow_parse_pattern.c | 36 ++++++++++++----------
drivers/net/sxe2/sxe2_ipsec.c | 2 +-
| 10 +++---
drivers/net/sxe2/sxe2_rx.c | 4 +--
drivers/net/sxe2/sxe2_stats.c | 25 +++++++--------
drivers/net/sxe2/sxe2_tm.c | 4 +--
8 files changed, 51 insertions(+), 47 deletions(-)
diff --git a/drivers/net/sxe2/sxe2_cmd_chnl.c b/drivers/net/sxe2/sxe2_cmd_chnl.c
index b09989fe50..077e4f8c01 100644
--- a/drivers/net/sxe2/sxe2_cmd_chnl.c
+++ b/drivers/net/sxe2/sxe2_cmd_chnl.c
@@ -961,7 +961,7 @@ int32_t sxe2_drv_rss_key_set(struct sxe2_adapter *adapter, uint8_t *key, uint16_
req->vsi_id = rte_cpu_to_le_16(adapter->vsi_ctxt.dpdk_vsi_id);
req->key_size = rte_cpu_to_le_16(key_size);
- rte_memcpy(req->key, key, key_size);
+ memcpy(req->key, key, key_size);
sxe2_drv_cmd_params_fill(adapter, ¶m, SXE2_DRV_CMD_RSS_KEY_SET,
req, buf_size,
@@ -998,7 +998,7 @@ int32_t sxe2_drv_rss_lut_set(struct sxe2_adapter *adapter, uint8_t *lut, uint16_
req->vsi_id = rte_cpu_to_le_16(adapter->vsi_ctxt.dpdk_vsi_id);
req->lut_size = rte_cpu_to_le_16(lut_size);
- rte_memcpy(req->lut, lut, lut_size);
+ memcpy(req->lut, lut, lut_size);
sxe2_drv_cmd_params_fill(adapter, ¶m, SXE2_DRV_CMD_RSS_LUT_SET,
req, buf_size,
@@ -1890,7 +1890,7 @@ int32_t sxe2_drv_sfp_eeprom_read(struct sxe2_adapter *adapter, struct sxe2_sfp_r
}
ret = 0;
- rte_memcpy(sfp_info->data, resp->data, sfp_info->len);
+ memcpy(sfp_info->data, resp->data, sfp_info->len);
l_end:
if (resp) {
diff --git a/drivers/net/sxe2/sxe2_flow.c b/drivers/net/sxe2/sxe2_flow.c
index 63cfc36968..84669478d1 100644
--- a/drivers/net/sxe2/sxe2_flow.c
+++ b/drivers/net/sxe2/sxe2_flow.c
@@ -80,8 +80,8 @@ static int32_t sxe2_flow_check_hdr_duplicate(struct sxe2_flow_item *item_new,
uint16_t size = sizeof(struct sxe2_flow_item);
union sxe2_flow_item_raw item_raw_new;
union sxe2_flow_item_raw item_raw_exist;
- rte_memcpy(&item_raw_new.item, item_new, size);
- rte_memcpy(&item_raw_exist.item, item_exist, size);
+ memcpy(&item_raw_new.item, item_new, size);
+ memcpy(&item_raw_exist.item, item_exist, size);
for (i = 0; i < size; i++) {
if (item_raw_new.raw[i] != item_raw_exist.raw[i])
@@ -416,7 +416,7 @@ static int32_t sxe2_flow_src_split_proc(struct rte_eth_dev *dev,
ret = -ENOMEM;
goto l_end;
}
- rte_memcpy(flow_new, flow, sizeof(struct sxe2_flow));
+ *flow_new = *flow;
TAILQ_INSERT_TAIL(sxe2_flow_list, flow_new, next);
flow_new->meta.flow_src_vsi =
flow_src_vsi[SXE2_MAX_DRV_TYPE_DPDK][idx];
@@ -437,7 +437,7 @@ static int32_t sxe2_flow_src_split_proc(struct rte_eth_dev *dev,
ret = -ENOMEM;
goto l_end;
}
- rte_memcpy(flow_new, flow, sizeof(struct sxe2_flow));
+ *flow_new = *flow;
TAILQ_INSERT_TAIL(sxe2_flow_list, flow_new, next);
flow_new->meta.flow_src_vsi =
flow_src_vsi[SXE2_MAX_DRV_TYPE_KERNEL][idx];
@@ -697,8 +697,7 @@ static int32_t sxe2_flow_tunnel_split_proc(struct rte_eth_dev *dev __rte_unused,
ret = -ENOMEM;
goto l_end;
}
- rte_memcpy(sxe2_flow_new, sxe2_flow_exist,
- sizeof(struct sxe2_flow));
+ *sxe2_flow_new = *sxe2_flow_exist;
pattern = &sxe2_flow_new->pattern_outer;
sxe2_flow_new->meta.tunnel_type =
SXE2_FLOW_TUNNEL_TYPE_GRE;
diff --git a/drivers/net/sxe2/sxe2_flow_parse_pattern.c b/drivers/net/sxe2/sxe2_flow_parse_pattern.c
index f5bf8922c6..d5a14398a7 100644
--- a/drivers/net/sxe2/sxe2_flow_parse_pattern.c
+++ b/drivers/net/sxe2/sxe2_flow_parse_pattern.c
@@ -787,20 +787,20 @@ static int32_t sxe2_flow_parse_pattern_eth(const struct rte_flow_item *item,
sxe2_set_bit(SXE2_FLOW_FLD_ID_ETH_DA, pattern->map_mask);
sxe2_set_bit(SXE2_FLOW_FLD_ID_ETH_DA, pattern->map_spec);
- rte_memcpy(pattern->item_spec.eth.dst_addr, dst_addr_spec,
- RTE_ETHER_ADDR_LEN);
- rte_memcpy(pattern->item_mask.eth.dst_addr, dst_addr_mask,
- RTE_ETHER_ADDR_LEN);
+ memcpy(pattern->item_spec.eth.dst_addr, dst_addr_spec,
+ RTE_ETHER_ADDR_LEN);
+ memcpy(pattern->item_mask.eth.dst_addr, dst_addr_mask,
+ RTE_ETHER_ADDR_LEN);
}
if (!rte_is_zero_ether_addr(src_addr_mask)) {
if (!rte_is_broadcast_ether_addr(src_addr_mask))
sxe2_set_bit(SXE2_FLOW_FLD_ID_ETH_SA, pattern->map_mask);
sxe2_set_bit(SXE2_FLOW_FLD_ID_ETH_SA, pattern->map_spec);
- rte_memcpy(pattern->item_spec.eth.src_addr, src_addr_spec,
- RTE_ETHER_ADDR_LEN);
- rte_memcpy(pattern->item_mask.eth.src_addr, src_addr_mask,
- RTE_ETHER_ADDR_LEN);
+ memcpy(pattern->item_spec.eth.src_addr, src_addr_spec,
+ RTE_ETHER_ADDR_LEN);
+ memcpy(pattern->item_mask.eth.src_addr, src_addr_mask,
+ RTE_ETHER_ADDR_LEN);
}
if (type_mask != 0) {
if (type_mask != UINT16_MAX) {
@@ -1130,10 +1130,12 @@ static int32_t sxe2_flow_parse_pattern_ipv6(const struct rte_flow_item *item,
sizeof(ipv6_addr_mask)) != 0)
sxe2_set_bit(SXE2_FLOW_FLD_ID_IPV6_SA, pattern->map_mask);
sxe2_set_bit(SXE2_FLOW_FLD_ID_IPV6_SA, pattern->map_spec);
- rte_memcpy(&pattern->item_spec.ipv6.saddr, &ipv6_spec->hdr.src_addr,
- sizeof(ipv6_spec->hdr.src_addr));
- rte_memcpy(&pattern->item_mask.ipv6.saddr, &ipv6_mask->hdr.src_addr,
- sizeof(ipv6_mask->hdr.src_addr));
+ memcpy(&pattern->item_spec.ipv6.saddr,
+ &ipv6_spec->hdr.src_addr,
+ sizeof(ipv6_spec->hdr.src_addr));
+ memcpy(&pattern->item_mask.ipv6.saddr,
+ &ipv6_mask->hdr.src_addr,
+ sizeof(ipv6_mask->hdr.src_addr));
}
if (memcmp(&ipv6_mask->hdr.dst_addr, ipv6_addr_empty,
sizeof(ipv6_addr_empty)) != 0) {
@@ -1141,10 +1143,12 @@ static int32_t sxe2_flow_parse_pattern_ipv6(const struct rte_flow_item *item,
sizeof(ipv6_addr_mask)) != 0)
sxe2_set_bit(SXE2_FLOW_FLD_ID_IPV6_DA, pattern->map_mask);
sxe2_set_bit(SXE2_FLOW_FLD_ID_IPV6_DA, pattern->map_spec);
- rte_memcpy(&pattern->item_spec.ipv6.daddr, &ipv6_spec->hdr.dst_addr,
- sizeof(ipv6_spec->hdr.dst_addr));
- rte_memcpy(&pattern->item_mask.ipv6.daddr, &ipv6_mask->hdr.dst_addr,
- sizeof(ipv6_mask->hdr.dst_addr));
+ memcpy(&pattern->item_spec.ipv6.daddr,
+ &ipv6_spec->hdr.dst_addr,
+ sizeof(ipv6_spec->hdr.dst_addr));
+ memcpy(&pattern->item_mask.ipv6.daddr,
+ &ipv6_mask->hdr.dst_addr,
+ sizeof(ipv6_mask->hdr.dst_addr));
}
if (ipv6_mask->hdr.vtc_flow) {
vtc_flow_mask = rte_be_to_cpu_32(ipv6_mask->hdr.vtc_flow);
diff --git a/drivers/net/sxe2/sxe2_ipsec.c b/drivers/net/sxe2/sxe2_ipsec.c
index e783a51b85..81cf250fd2 100644
--- a/drivers/net/sxe2/sxe2_ipsec.c
+++ b/drivers/net/sxe2/sxe2_ipsec.c
@@ -1159,7 +1159,7 @@ int sxe2_ipsec_pkt_metadata_set(void *device, struct rte_security_session *sessi
md = RTE_MBUF_DYNFIELD(m, sxe2_sctx->ipsec_ctx.md_offset, struct sxe2_ipsec_pkt_metadata *);
- memcpy(md, &sxe2_sess->pkt_metadata_template, sizeof(struct sxe2_ipsec_pkt_metadata));
+ *md = sxe2_sess->pkt_metadata_template;
md->esp_head_offset = offset;
PMD_LOG_INFO(DRV, "ipsec metadata set, offset:%u, said:%u, mode:%u, algo:%u.", offset,
--git a/drivers/net/sxe2/sxe2_rss.c b/drivers/net/sxe2/sxe2_rss.c
index 1d56613043..6451096561 100644
--- a/drivers/net/sxe2/sxe2_rss.c
+++ b/drivers/net/sxe2/sxe2_rss.c
@@ -35,7 +35,7 @@ int32_t sxe2_rss_hash_key_init(struct rte_eth_dev *dev)
for (i = 0; i < rss_ctxt->rss_key_size; i++)
rss_ctxt->rss_key[i] = (uint8_t)rte_rand();
} else {
- rte_memcpy(rss_ctxt->rss_key, rss_conf->rss_key,
+ memcpy(rss_ctxt->rss_key, rss_conf->rss_key,
RTE_MIN(rss_conf->rss_key_len, rss_ctxt->rss_key_size));
}
@@ -421,7 +421,7 @@ int32_t sxe2_dev_rss_reta_update(struct rte_eth_dev *dev,
ret = -ENOMEM;
goto l_end;
}
- rte_memcpy(lut_tmp, rss_ctxt->rss_lut, reta_size);
+ memcpy(lut_tmp, rss_ctxt->rss_lut, reta_size);
for (i = 0; i < reta_size; i++) {
idx = i / RTE_ETH_RETA_GROUP_SIZE;
@@ -436,7 +436,7 @@ int32_t sxe2_dev_rss_reta_update(struct rte_eth_dev *dev,
goto l_end;
}
- rte_memcpy(rss_ctxt->rss_lut, lut_tmp, reta_size);
+ memcpy(rss_ctxt->rss_lut, lut_tmp, reta_size);
l_end:
if (lut_tmp)
@@ -514,7 +514,7 @@ static int32_t sxe2_rss_hash_key_update(struct rte_eth_dev *dev,
goto l_end;
}
- rte_memcpy(rss_ctxt->rss_key, rss_conf->rss_key, rss_conf->rss_key_len);
+ memcpy(rss_ctxt->rss_key, rss_conf->rss_key, rss_conf->rss_key_len);
l_end:
return ret;
}
@@ -575,7 +575,7 @@ int32_t sxe2_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
if (rss_conf->rss_key) {
rss_conf->rss_key_len = rss_ctxt->rss_key_size;
- rte_memcpy(rss_conf->rss_key, rss_ctxt->rss_key, rss_ctxt->rss_key_size);
+ memcpy(rss_conf->rss_key, rss_ctxt->rss_key, rss_ctxt->rss_key_size);
}
rss_conf->rss_hf = rss_ctxt->rss_hf;
rss_conf->algorithm = rss_ctxt->hash_func;
diff --git a/drivers/net/sxe2/sxe2_rx.c b/drivers/net/sxe2/sxe2_rx.c
index d700c60083..c84e767b25 100644
--- a/drivers/net/sxe2/sxe2_rx.c
+++ b/drivers/net/sxe2/sxe2_rx.c
@@ -311,8 +311,8 @@ int32_t __rte_cold sxe2_rx_queue_setup(struct rte_eth_dev *dev,
if (rx_nseg > 1) {
for (i = 0; i < rx_nseg; i++) {
- rte_memcpy(&rxq->rx_seg[i], &rx_conf->rx_seg[i].split,
- sizeof(struct rte_eth_rxseg_split));
+ memcpy(&rxq->rx_seg[i], &rx_conf->rx_seg[i].split,
+ sizeof(struct rte_eth_rxseg_split));
}
rxq->mb_pool = rxq->rx_seg[0].mp;
} else {
diff --git a/drivers/net/sxe2/sxe2_stats.c b/drivers/net/sxe2/sxe2_stats.c
index 3ad8fe2fe9..6dc52ac4ab 100644
--- a/drivers/net/sxe2/sxe2_stats.c
+++ b/drivers/net/sxe2/sxe2_stats.c
@@ -288,18 +288,19 @@ static void sxe2_stats_update(struct sxe2_adapter *adapter)
stats->rx_frame_good_bad = hw_stats->rx_frame_good_bad;
stats->rx_unicast_good = hw_stats->rx_unicast_good;
stats->rx_vlan_packets = hw_stats->rx_vlan_packets;
- rte_memcpy(stats->rx_prio_buf_discard, hw_stats->rx_prio_buf_discard,
- sizeof(hw_stats->rx_prio_buf_discard));
- rte_memcpy(stats->prio_xoff_rx, hw_stats->prio_xoff_rx,
- sizeof(hw_stats->prio_xoff_rx));
- rte_memcpy(stats->prio_xon_rx, hw_stats->prio_xon_rx,
- sizeof(hw_stats->prio_xon_rx));
- rte_memcpy(stats->prio_xon_tx, hw_stats->prio_xon_tx,
- sizeof(hw_stats->prio_xon_tx));
- rte_memcpy(stats->prio_xoff_tx, hw_stats->prio_xoff_tx,
- sizeof(hw_stats->prio_xoff_tx));
- rte_memcpy(stats->prio_xon_2_xoff, hw_stats->prio_xon_2_xoff,
- sizeof(hw_stats->prio_xon_2_xoff));
+ memcpy(stats->rx_prio_buf_discard,
+ hw_stats->rx_prio_buf_discard,
+ sizeof(hw_stats->rx_prio_buf_discard));
+ memcpy(stats->prio_xoff_rx, hw_stats->prio_xoff_rx,
+ sizeof(hw_stats->prio_xoff_rx));
+ memcpy(stats->prio_xon_rx, hw_stats->prio_xon_rx,
+ sizeof(hw_stats->prio_xon_rx));
+ memcpy(stats->prio_xon_tx, hw_stats->prio_xon_tx,
+ sizeof(hw_stats->prio_xon_tx));
+ memcpy(stats->prio_xoff_tx, hw_stats->prio_xoff_tx,
+ sizeof(hw_stats->prio_xoff_tx));
+ memcpy(stats->prio_xon_2_xoff, hw_stats->prio_xon_2_xoff,
+ sizeof(hw_stats->prio_xon_2_xoff));
stats->imissed = hw_stats->rx_out_of_buffer +
hw_stats->rx_qblock_drop;
diff --git a/drivers/net/sxe2/sxe2_tm.c b/drivers/net/sxe2/sxe2_tm.c
index 4c4f793cd5..893e1afa6d 100644
--- a/drivers/net/sxe2/sxe2_tm.c
+++ b/drivers/net/sxe2/sxe2_tm.c
@@ -421,8 +421,8 @@ static int32_t sxe2_tm_shaper_profile_add(struct rte_eth_dev *dev, uint32_t shap
goto l_end;
}
- rte_memcpy(&shaper_profile->profile, profile,
- sizeof(struct rte_tm_shaper_params));
+ memcpy(&shaper_profile->profile, profile,
+ sizeof(struct rte_tm_shaper_params));
shaper_profile->id = shaper_profile_id;
TAILQ_INSERT_TAIL(&adapter->tm_ctxt.profile_list, shaper_profile, node);
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 45/61] net/zxdh: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (43 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 44/61] net/sxe2: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 46/61] net/memif: use memcpy for fixed size data Stephen Hemminger
` (16 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Junlong Wang, Ming Ran
The uses of rte_memcpy() in the control path of the zxdh driver
have no performance benefit over regular memcpy(), and regular
memcpy() gets more compile time checking of the arguments.
The only remaining rte_memcpy() is in zxdh_xmit_fill_net_hdr()
which is on the transmit fast path.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/zxdh/zxdh_common.c | 7 ++--
drivers/net/zxdh/zxdh_flow.c | 67 +++++++++++++++++++---------------
drivers/net/zxdh/zxdh_msg.c | 15 ++++----
drivers/net/zxdh/zxdh_mtr.c | 10 ++---
drivers/net/zxdh/zxdh_np.c | 1 -
drivers/net/zxdh/zxdh_queue.c | 8 ++--
drivers/net/zxdh/zxdh_tables.c | 21 ++++++-----
7 files changed, 70 insertions(+), 59 deletions(-)
diff --git a/drivers/net/zxdh/zxdh_common.c b/drivers/net/zxdh/zxdh_common.c
index 2b821b1dc8..1dff77aee8 100644
--- a/drivers/net/zxdh/zxdh_common.c
+++ b/drivers/net/zxdh/zxdh_common.c
@@ -7,7 +7,6 @@
#include <ethdev_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include "zxdh_ethdev.h"
#include "zxdh_logs.h"
@@ -79,7 +78,7 @@ zxdh_fill_common_msg(struct zxdh_hw *hw, struct zxdh_pci_bar_msg *desc,
msg_data->pcie_id = hw->pcie_id;
msg_data->slen = buff_size;
if (buff_size != 0)
- rte_memcpy(msg_data + 1, buff, buff_size);
+ memcpy(msg_data + 1, buff, buff_size);
return 0;
}
@@ -123,7 +122,7 @@ zxdh_common_rsp_check(struct zxdh_msg_recviver_mem *msg_rsp,
return -1;
}
if (len != 0)
- rte_memcpy(buff, rsp_hdr + 1, len);
+ memcpy(buff, rsp_hdr + 1, len);
return 0;
}
@@ -228,7 +227,7 @@ zxdh_get_res_info(struct zxdh_res_para *dev, uint8_t field, uint8_t *res, uint16
return ret;
}
*len = tbl_reps->len;
- rte_memcpy(res, (recv_buf + ZXDH_REPS_HEADER_OFFSET +
+ memcpy(res, (recv_buf + ZXDH_REPS_HEADER_OFFSET +
sizeof(struct zxdh_tbl_msg_reps_header)), *len);
return ret;
}
diff --git a/drivers/net/zxdh/zxdh_flow.c b/drivers/net/zxdh/zxdh_flow.c
index 56ac34c6e3..ee6275c337 100644
--- a/drivers/net/zxdh/zxdh_flow.c
+++ b/drivers/net/zxdh/zxdh_flow.c
@@ -94,9 +94,9 @@ static void
zxdh_adjust_flow_op_rsp_memory_layout(void *old_data,
size_t old_size, void *new_data)
{
- rte_memcpy(new_data, old_data, sizeof(struct zxdh_flow));
+ memcpy(new_data, old_data, sizeof(struct zxdh_flow));
memset((char *)new_data + sizeof(struct zxdh_flow), 0, 4);
- rte_memcpy((char *)new_data + sizeof(struct zxdh_flow) + 4,
+ memcpy((char *)new_data + sizeof(struct zxdh_flow) + 4,
(char *)old_data + sizeof(struct zxdh_flow),
old_size - sizeof(struct zxdh_flow));
}
@@ -1328,14 +1328,14 @@ static int fd_flow_parse_pattern(struct rte_eth_dev *dev, const struct rte_flow_
ipv4_mask->hdr.type_of_service;
key->frag_flag = (ipv4_spec->hdr.fragment_offset != 0) ? 1 : 0;
key_mask->frag_flag = (ipv4_mask->hdr.fragment_offset != 0) ? 1 : 0;
- rte_memcpy((uint32_t *)key->src_ip + 3,
- &ipv4_spec->hdr.src_addr, 4);
- rte_memcpy((uint32_t *)key->dst_ip + 3,
- &ipv4_spec->hdr.dst_addr, 4);
- rte_memcpy((uint32_t *)key_mask->src_ip + 3,
- &ipv4_mask->hdr.src_addr, 4);
- rte_memcpy((uint32_t *)key_mask->dst_ip + 3,
- &ipv4_mask->hdr.dst_addr, 4);
+ memcpy((uint32_t *)key->src_ip + 3,
+ &ipv4_spec->hdr.src_addr, 4);
+ memcpy((uint32_t *)key->dst_ip + 3,
+ &ipv4_spec->hdr.dst_addr, 4);
+ memcpy((uint32_t *)key_mask->src_ip + 3,
+ &ipv4_mask->hdr.src_addr, 4);
+ memcpy((uint32_t *)key_mask->dst_ip + 3,
+ &ipv4_mask->hdr.dst_addr, 4);
}
break;
case RTE_FLOW_ITEM_TYPE_IPV6:
@@ -1364,14 +1364,14 @@ static int fd_flow_parse_pattern(struct rte_eth_dev *dev, const struct rte_flow_
key->nw_proto = ipv6_spec->hdr.proto;
key_mask->nw_proto = ipv6_mask->hdr.proto;
- rte_memcpy(key->src_ip,
- &ipv6_spec->hdr.src_addr, 16);
- rte_memcpy(key->dst_ip,
- &ipv6_spec->hdr.dst_addr, 16);
- rte_memcpy(key_mask->src_ip,
- &ipv6_mask->hdr.src_addr, 16);
- rte_memcpy(key_mask->dst_ip,
- &ipv6_mask->hdr.dst_addr, 16);
+ memcpy(key->src_ip, &ipv6_spec->hdr.src_addr,
+ 16);
+ memcpy(key->dst_ip, &ipv6_spec->hdr.dst_addr,
+ 16);
+ memcpy(key_mask->src_ip,
+ &ipv6_mask->hdr.src_addr, 16);
+ memcpy(key_mask->dst_ip,
+ &ipv6_mask->hdr.dst_addr, 16);
}
break;
case RTE_FLOW_ITEM_TYPE_TCP:
@@ -1477,8 +1477,8 @@ static int fd_flow_parse_pattern(struct rte_eth_dev *dev, const struct rte_flow_
"Invalid vxlan mask");
return -rte_errno;
}
- rte_memcpy(key->vni, vxlan_spec->vni, 3);
- rte_memcpy(key_mask->vni, vxlan_mask->vni, 3);
+ memcpy(key->vni, vxlan_spec->vni, 3);
+ memcpy(key_mask->vni, vxlan_mask->vni, 3);
break;
}
case RTE_FLOW_ACTION_TYPE_VOID:
@@ -1573,10 +1573,14 @@ fd_flow_parse_vxlan_encap(struct rte_eth_dev *dev __rte_unused,
switch (items->type) {
case RTE_FLOW_ITEM_TYPE_ETH:
item_eth = items->spec;
- rte_memcpy(&dh_flow->encap0.dst_mac1, item_eth->dst.addr_bytes, 2);
- rte_memcpy(&dh_flow->encap1.src_mac1, item_eth->src.addr_bytes, 2);
- rte_memcpy(&dh_flow->encap0.dst_mac2, &item_eth->dst.addr_bytes[2], 4);
- rte_memcpy(&dh_flow->encap1.src_mac2, &item_eth->src.addr_bytes[2], 4);
+ memcpy(&dh_flow->encap0.dst_mac1,
+ item_eth->dst.addr_bytes, 2);
+ memcpy(&dh_flow->encap1.src_mac1,
+ item_eth->src.addr_bytes, 2);
+ memcpy(&dh_flow->encap0.dst_mac2,
+ &item_eth->dst.addr_bytes[2], 4);
+ memcpy(&dh_flow->encap1.src_mac2,
+ &item_eth->src.addr_bytes[2], 4);
dh_flow->encap0.dst_mac1 = rte_bswap16(dh_flow->encap0.dst_mac1);
dh_flow->encap1.src_mac1 = rte_bswap16(dh_flow->encap1.src_mac1);
dh_flow->encap0.dst_mac2 = rte_bswap32(dh_flow->encap0.dst_mac2);
@@ -1592,9 +1596,11 @@ fd_flow_parse_vxlan_encap(struct rte_eth_dev *dev __rte_unused,
dh_flow->encap0.tos = item_ipv4->hdr.type_of_service;
dh_flow->encap0.ttl = item_ipv4->hdr.time_to_live;
addr = rte_bswap32(item_ipv4->hdr.src_addr);
- rte_memcpy((uint32_t *)dh_flow->encap1.sip.ip_addr + 3, &addr, 4);
+ memcpy((uint32_t *)dh_flow->encap1.sip.ip_addr + 3,
+ &addr, 4);
addr = rte_bswap32(item_ipv4->hdr.dst_addr);
- rte_memcpy((uint32_t *)dh_flow->encap0.dip.ip_addr + 3, &addr, 4);
+ memcpy((uint32_t *)dh_flow->encap0.dip.ip_addr + 3,
+ &addr, 4);
break;
case RTE_FLOW_ITEM_TYPE_IPV6:
item_ipv6 = items->spec;
@@ -1603,7 +1609,8 @@ fd_flow_parse_vxlan_encap(struct rte_eth_dev *dev __rte_unused,
(item_ipv6->hdr.vtc_flow & RTE_IPV6_HDR_TC_MASK) >>
RTE_IPV6_HDR_TC_SHIFT;
dh_flow->encap0.ttl = item_ipv6->hdr.hop_limits;
- rte_memcpy(dh_flow->encap1.sip.ip_addr, &item_ipv6->hdr.src_addr, 16);
+ memcpy(dh_flow->encap1.sip.ip_addr,
+ &item_ipv6->hdr.src_addr, 16);
dh_flow->encap1.sip.ip_addr[0] =
rte_bswap32(dh_flow->encap1.sip.ip_addr[0]);
dh_flow->encap1.sip.ip_addr[1] =
@@ -1612,7 +1619,8 @@ fd_flow_parse_vxlan_encap(struct rte_eth_dev *dev __rte_unused,
rte_bswap32(dh_flow->encap1.sip.ip_addr[2]);
dh_flow->encap1.sip.ip_addr[3] =
rte_bswap32(dh_flow->encap1.sip.ip_addr[3]);
- rte_memcpy(dh_flow->encap0.dip.ip_addr, &item_ipv6->hdr.dst_addr, 16);
+ memcpy(dh_flow->encap0.dip.ip_addr,
+ &item_ipv6->hdr.dst_addr, 16);
dh_flow->encap0.dip.ip_addr[0] =
rte_bswap32(dh_flow->encap0.dip.ip_addr[0]);
dh_flow->encap0.dip.ip_addr[1] =
@@ -1909,7 +1917,8 @@ vf_flow_msg_process(enum zxdh_msg_type msg_type, struct rte_eth_dev *dev,
if (msg_type == ZXDH_FLOW_HW_ADD)
dh_flow->flowentry.hw_idx = flow_rsp->dh_flow.flowentry.hw_idx;
if (count)
- rte_memcpy((void *)count, &flow_rsp->count, sizeof(flow_rsp->count));
+ memcpy((void *)count, &flow_rsp->count,
+ sizeof(flow_rsp->count));
return ret;
}
diff --git a/drivers/net/zxdh/zxdh_msg.c b/drivers/net/zxdh/zxdh_msg.c
index 4b01daf37a..64aa0ac5f9 100644
--- a/drivers/net/zxdh/zxdh_msg.c
+++ b/drivers/net/zxdh/zxdh_msg.c
@@ -3,9 +3,9 @@
*/
#include <stdbool.h>
+#include <string.h>
#include <rte_common.h>
-#include <rte_memcpy.h>
#include <rte_spinlock.h>
#include <rte_cycles.h>
#include <inttypes.h>
@@ -899,7 +899,7 @@ zxdh_bar_msg_ack_async_msg_proc(struct zxdh_bar_msg_header *msg_header,
}
uint8_t *reps_buffer = (uint8_t *)reps_info->reps_addr;
- rte_memcpy(reps_buffer + 4, receiver_buff, msg_header->len);
+ memcpy(reps_buffer + 4, receiver_buff, msg_header->len);
*(uint16_t *)(reps_buffer + 1) = msg_header->len;
*(uint8_t *)(reps_info->reps_addr) = ZXDH_REPS_HEADER_REPLYED;
@@ -1406,13 +1406,13 @@ zxdh_vf_port_uninit(struct zxdh_hw *pf_hw, uint16_t vport,
}
*res_len += strlen(str);
- rte_memcpy(reply_data_addr, str, strlen(str) + 1);
+ memcpy(reply_data_addr, str, strlen(str) + 1);
ZXDH_SET(msg_reply_body, res_info, flag, ZXDH_REPS_SUCC);
return ret;
proc_end:
*res_len += strlen(str);
- rte_memcpy(reply_data_addr, str, strlen(str) + 1);
+ memcpy(reply_data_addr, str, strlen(str) + 1);
ZXDH_SET(msg_reply_body, res_info, flag, ZXDH_REPS_FAIL);
return ret;
}
@@ -1458,7 +1458,7 @@ zxdh_add_vf_mac_table(struct zxdh_hw *hw, uint16_t vport,
success:
sprintf(str, " vport 0x%x set mac ret 0x%x\n", port.vport, ret);
*reply_len = strlen(str) + ZXDH_MSG_REPLYBODY_HEAD;
- rte_memcpy(reply_data_addr, str, strlen(str) + 1);
+ memcpy(reply_data_addr, str, strlen(str) + 1);
ZXDH_SET(msg_reply_body, reply_body, flag, ZXDH_REPS_SUCC);
PMD_DRV_LOG(DEBUG, " reply len %d", *reply_len);
return ret;
@@ -1499,7 +1499,7 @@ zxdh_del_vf_mac_table(struct zxdh_hw *hw, uint16_t vport,
sprintf(str, "vport 0x%x del mac ret 0x%x\n", port.vport, ret);
*res_len = strlen(str) + ZXDH_MSG_REPLYBODY_HEAD;
- rte_memcpy(reply_data_addr, str, strlen(str) + 1);
+ memcpy(reply_data_addr, str, strlen(str) + 1);
ZXDH_SET(msg_reply_body, res_info, flag, ZXDH_REPS_SUCC);
return ret;
@@ -2331,7 +2331,8 @@ zxdh_vf_flow_hw_get(struct zxdh_hw *pf_hw, uint16_t vport,
}
PMD_DRV_LOG(INFO, " res len :%d", *res_len);
dh_flow = flow_rsp_addr;
- rte_memcpy(&dh_flow->flowentry, &flow_entry->dh_flow.flowentry, sizeof(dh_flow->flowentry));
+ memcpy(&dh_flow->flowentry, &flow_entry->dh_flow.flowentry,
+ sizeof(dh_flow->flowentry));
ZXDH_SET(msg_reply_body, res_info, flag, ZXDH_REPS_SUCC);
return 0;
}
diff --git a/drivers/net/zxdh/zxdh_mtr.c b/drivers/net/zxdh/zxdh_mtr.c
index b23f6535a8..48318a6941 100644
--- a/drivers/net/zxdh/zxdh_mtr.c
+++ b/drivers/net/zxdh/zxdh_mtr.c
@@ -590,9 +590,8 @@ static int zxdh_hw_profile_config(struct rte_eth_dev *dev, uint16_t hw_profile_i
zxdh_plcr_profile_cfg->car_type = CAR_A;
zxdh_plcr_profile_cfg->packet_mode = mp->profile.packet_mode;
zxdh_plcr_profile_cfg->hw_profile_id = hw_profile_id;
- rte_memcpy(&zxdh_plcr_profile_cfg->plcr_param,
- &mp->plcr_param,
- sizeof(zxdh_plcr_profile_cfg->plcr_param));
+ memcpy(&zxdh_plcr_profile_cfg->plcr_param, &mp->plcr_param,
+ sizeof(zxdh_plcr_profile_cfg->plcr_param));
zxdh_msg_head_build(hw, ZXDH_PLCR_CAR_PROFILE_CFG_SET, &msg_info);
ret = zxdh_vf_send_msg_to_pf(dev,
@@ -685,7 +684,7 @@ zxdh_meter_profile_add(struct rte_eth_dev *dev,
mp->meter_profile_id = meter_profile_id;
mp->dpdk_port_id = dev->data->port_id;
mp->hw_profile_id = UINT16_MAX;
- rte_memcpy(&mp->profile, profile, sizeof(struct rte_mtr_meter_profile));
+ memcpy(&mp->profile, profile, sizeof(struct rte_mtr_meter_profile));
ret = zxdh_mtr_profile_offload(dev, mp, profile, error);
if (ret) {
@@ -772,7 +771,8 @@ zxdh_meter_policy_add(struct rte_eth_dev *dev,
memset(mtr_policy, 0, sizeof(struct zxdh_meter_policy));
mtr_policy->policy_id = policy_id;
mtr_policy->dpdk_port_id = dev->data->port_id;
- rte_memcpy(&mtr_policy->policy, policy, sizeof(struct rte_mtr_meter_policy_params));
+ memcpy(&mtr_policy->policy, policy,
+ sizeof(struct rte_mtr_meter_policy_params));
/* Add to list. */
TAILQ_INSERT_TAIL(&zxdh_shared_data->mtr_policy_list, mtr_policy, next);
mtr_policy->ref_cnt++;
diff --git a/drivers/net/zxdh/zxdh_np.c b/drivers/net/zxdh/zxdh_np.c
index b078ec5b6c..41542a89d8 100644
--- a/drivers/net/zxdh/zxdh_np.c
+++ b/drivers/net/zxdh/zxdh_np.c
@@ -9,7 +9,6 @@
#include <rte_log.h>
#include <rte_debug.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include "zxdh_np.h"
#include "zxdh_logs.h"
diff --git a/drivers/net/zxdh/zxdh_queue.c b/drivers/net/zxdh/zxdh_queue.c
index 7162593b16..c47bc44710 100644
--- a/drivers/net/zxdh/zxdh_queue.c
+++ b/drivers/net/zxdh/zxdh_queue.c
@@ -244,8 +244,8 @@ zxdh_dev_rx_queue_setup(struct rte_eth_dev *dev,
hw->queue_conf->queue_changed = 1;
}
- rte_memcpy(&hw->queue_conf->conf[queue_idx].zxdh_rx_conf,
- rx_conf, sizeof(struct rte_eth_rxconf));
+ memcpy(&hw->queue_conf->conf[queue_idx].zxdh_rx_conf, rx_conf,
+ sizeof(struct rte_eth_rxconf));
hw->queue_conf->conf[queue_idx].rx_nb_desc = valid_nb_desc;
hw->queue_conf->conf[queue_idx].queue_mp = mp;
@@ -336,8 +336,8 @@ zxdh_dev_tx_queue_setup(struct rte_eth_dev *dev,
hw->queue_conf->queue_changed = 1;
}
- rte_memcpy(&hw->queue_conf->conf[queue_idx].zxdh_tx_conf,
- tx_conf, sizeof(struct rte_eth_txconf));
+ memcpy(&hw->queue_conf->conf[queue_idx].zxdh_tx_conf, tx_conf,
+ sizeof(struct rte_eth_txconf));
hw->queue_conf->conf[queue_idx].tx_nb_desc = valid_nb_desc;
return 0;
diff --git a/drivers/net/zxdh/zxdh_tables.c b/drivers/net/zxdh/zxdh_tables.c
index 233d53a7e8..5ee1a7dea8 100644
--- a/drivers/net/zxdh/zxdh_tables.c
+++ b/drivers/net/zxdh/zxdh_tables.c
@@ -248,7 +248,8 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad
int32_t ret;
if (rte_is_unicast_ether_addr(addr)) {
- rte_memcpy(unicast_table.key.dmac_addr, addr, sizeof(struct rte_ether_addr));
+ memcpy(unicast_table.key.dmac_addr, addr,
+ sizeof(struct rte_ether_addr));
unicast_table.key.sriov_vlan_tpid = srv_tpid;
unicast_table.key.sriov_vlan_id = srv_vlanid;
@@ -286,8 +287,8 @@ zxdh_add_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad
} else {
for (group_id = 0; group_id < 4; group_id++) {
multicast_table.key.vf_group_id = group_id;
- rte_memcpy(multicast_table.key.mac_addr,
- addr, sizeof(struct rte_ether_addr));
+ memcpy(multicast_table.key.mac_addr, addr,
+ sizeof(struct rte_ether_addr));
ZXDH_DTB_HASH_ENTRY_INFO_T dtb_hash_entry = {
.p_actu_key = (uint8_t *)&multicast_table.key,
.p_rst = (uint8_t *)&multicast_table.entry
@@ -353,7 +354,8 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad
int32_t ret = 0;
if (rte_is_unicast_ether_addr(addr)) {
- rte_memcpy(unicast_table.key.dmac_addr, addr, sizeof(struct rte_ether_addr));
+ memcpy(unicast_table.key.dmac_addr, addr,
+ sizeof(struct rte_ether_addr));
unicast_table.key.sriov_vlan_id = srv_vlanid;
unicast_table.key.sriov_vlan_tpid = srv_tpid;
unicast_table.entry.hit_flag = 0;
@@ -385,7 +387,8 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad
}
} else {
multicast_table.key.vf_group_id = vport_num.vfid / 64;
- rte_memcpy(multicast_table.key.mac_addr, addr, sizeof(struct rte_ether_addr));
+ memcpy(multicast_table.key.mac_addr, addr,
+ sizeof(struct rte_ether_addr));
ZXDH_DTB_HASH_ENTRY_INFO_T dtb_hash_entry = {
.p_actu_key = (uint8_t *)&multicast_table.key,
@@ -416,8 +419,8 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad
for (group_id = 0; group_id < ZXDH_MC_GROUP_NUM; group_id++) {
multicast_table.key.vf_group_id = group_id;
- rte_memcpy(multicast_table.key.mac_addr, addr,
- sizeof(struct rte_ether_addr));
+ memcpy(multicast_table.key.mac_addr, addr,
+ sizeof(struct rte_ether_addr));
ZXDH_DTB_HASH_ENTRY_INFO_T dtb_hash_entry = {
.p_actu_key = (uint8_t *)&multicast_table.key,
.p_rst = (uint8_t *)&multicast_table.entry
@@ -441,8 +444,8 @@ zxdh_del_mac_table(struct zxdh_hw *hw, uint16_t vport, struct rte_ether_addr *ad
if (del_flag) {
for (group_id = 0; group_id < ZXDH_MC_GROUP_NUM; group_id++) {
multicast_table.key.vf_group_id = group_id;
- rte_memcpy(multicast_table.key.mac_addr, addr,
- sizeof(struct rte_ether_addr));
+ memcpy(multicast_table.key.mac_addr, addr,
+ sizeof(struct rte_ether_addr));
ZXDH_DTB_HASH_ENTRY_INFO_T dtb_hash_entry = {
.p_actu_key = (uint8_t *)&multicast_table.key,
.p_rst = (uint8_t *)&multicast_table.entry
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 46/61] net/memif: use memcpy for fixed size data
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (44 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 45/61] net/zxdh: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 47/61] net/ice: " Stephen Hemminger
` (15 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Jakub Grajciar
The regular libc memcpy is inline for fix sizes and has
better analysis coverage.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/memif/memif_socket.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/memif/memif_socket.c b/drivers/net/memif/memif_socket.c
index 649f8d0e61..f5a3354c46 100644
--- a/drivers/net/memif/memif_socket.c
+++ b/drivers/net/memif/memif_socket.c
@@ -48,7 +48,7 @@ memif_msg_send(int fd, memif_msg_t *msg, int afd)
cmsg->cmsg_len = CMSG_LEN(sizeof(int));
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
- rte_memcpy(CMSG_DATA(cmsg), &afd, sizeof(int));
+ memcpy(CMSG_DATA(cmsg), &afd, sizeof(int));
}
return sendmsg(fd, &mh, 0);
@@ -675,7 +675,7 @@ memif_msg_receive(struct memif_control_channel *cc)
if (cmsg->cmsg_type == SCM_CREDENTIALS)
cr = (struct ucred *)CMSG_DATA(cmsg);
else if (cmsg->cmsg_type == SCM_RIGHTS)
- rte_memcpy(&afd, CMSG_DATA(cmsg), sizeof(int));
+ memcpy(&afd, CMSG_DATA(cmsg), sizeof(int));
}
cmsg = CMSG_NXTHDR(&mh, cmsg);
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 47/61] net/ice: use memcpy for fixed size data
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (45 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 46/61] net/memif: use memcpy for fixed size data Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 48/61] test-bbdev: remove unnecessary include rte_memcpy.h Stephen Hemminger
` (14 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Bruce Richardson, Anatoly Burakov
The regular libc memcpy is inline for fix sizes and has
better analysis coverage.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/intel/ice/ice_fdir_filter.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/intel/ice/ice_fdir_filter.c b/drivers/net/intel/ice/ice_fdir_filter.c
index d7ddd32f90..6d6fa04e72 100644
--- a/drivers/net/intel/ice/ice_fdir_filter.c
+++ b/drivers/net/intel/ice/ice_fdir_filter.c
@@ -2873,8 +2873,8 @@ ice_fdir_parse_action(struct ice_adapter *ad,
const struct rte_flow_action_count *act_count = act->conf;
filter->input.cnt_ena = ICE_FXD_FLTR_QW0_STAT_ENA_PKTS;
- rte_memcpy(&filter->act_count, act_count,
- sizeof(filter->act_count));
+ memcpy(&filter->act_count, act_count,
+ sizeof(filter->act_count));
break;
}
default:
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 48/61] test-bbdev: remove unnecessary include rte_memcpy.h
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (46 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 47/61] net/ice: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 49/61] drivers/mempool: use memcpy for fixed size data Stephen Hemminger
` (13 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Nicolas Chautru
rte_memcpy not used here.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-bbdev/test_bbdev.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/test-bbdev/test_bbdev.c b/app/test-bbdev/test_bbdev.c
index 2422312f6b..5028e844ea 100644
--- a/app/test-bbdev/test_bbdev.c
+++ b/app/test-bbdev/test_bbdev.c
@@ -6,7 +6,6 @@
#include <rte_hexdump.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_cycles.h>
#include <rte_bus_vdev.h>
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 49/61] drivers/mempool: use memcpy for fixed size data
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (47 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 48/61] test-bbdev: remove unnecessary include rte_memcpy.h Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 50/61] ml/cnxk: " Stephen Hemminger
` (12 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Hemant Agrawal, Sachin Saxena
The regular libc memcpy is inline for fix sizes and has
better analysis coverage.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/mempool/dpaa/dpaa_mempool.c | 4 ++--
drivers/mempool/dpaa2/dpaa2_hw_mempool.c | 5 ++---
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/mempool/dpaa/dpaa_mempool.c b/drivers/mempool/dpaa/dpaa_mempool.c
index 2f8555a026..d041e09942 100644
--- a/drivers/mempool/dpaa/dpaa_mempool.c
+++ b/drivers/mempool/dpaa/dpaa_mempool.c
@@ -124,8 +124,8 @@ dpaa_mbuf_create_pool(struct rte_mempool *mp)
return -ENOMEM;
}
- rte_memcpy(bp_info, (void *)&rte_dpaa_bpid_info[bpid],
- sizeof(struct dpaa_bp_info));
+ memcpy(bp_info, (void *)&rte_dpaa_bpid_info[bpid],
+ sizeof(struct dpaa_bp_info));
mp->pool_data = (void *)bp_info;
DPAA_MEMPOOL_INFO("BMAN pool created for bpid =%d", bpid);
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
index ee001d8ce0..f20e8dbdee 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
@@ -17,7 +17,6 @@
#include <rte_mbuf.h>
#include <ethdev_driver.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_string_fns.h>
#include <rte_cycles.h>
#include <rte_kvargs.h>
@@ -143,8 +142,8 @@ rte_hw_mbuf_create_pool(struct rte_mempool *mp)
rte_dpaa2_bpid_info[bpid].bp_list = bp_list;
rte_dpaa2_bpid_info[bpid].bpid = bpid;
- rte_memcpy(bp_info, (void *)&rte_dpaa2_bpid_info[bpid],
- sizeof(struct dpaa2_bp_info));
+ memcpy(bp_info, (void *)&rte_dpaa2_bpid_info[bpid],
+ sizeof(struct dpaa2_bp_info));
mp->pool_data = (void *)bp_info;
DPAA2_MEMPOOL_DEBUG("BP List created for bpid =%d", dpbp_attr.bpid);
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 50/61] ml/cnxk: use memcpy for fixed size data
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (48 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 49/61] drivers/mempool: use memcpy for fixed size data Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 51/61] drivers/event: " Stephen Hemminger
` (11 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Srikanth Yalavarthi
The regular libc memcpy is inline for fix sizes and has
better analysis coverage.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/ml/cnxk/cn10k_ml_model.c | 8 +++++---
drivers/ml/cnxk/cn10k_ml_ops.c | 8 +++++---
drivers/ml/cnxk/tvmrt_ml_model.c | 9 +++++----
drivers/ml/cnxk/tvmrt_ml_ops.c | 6 +++---
4 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/drivers/ml/cnxk/cn10k_ml_model.c b/drivers/ml/cnxk/cn10k_ml_model.c
index fa978529f5..7e2c460fb4 100644
--- a/drivers/ml/cnxk/cn10k_ml_model.c
+++ b/drivers/ml/cnxk/cn10k_ml_model.c
@@ -564,7 +564,7 @@ cn10k_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *mo
/* Set model info */
memset(info, 0, sizeof(struct rte_ml_model_info));
- rte_memcpy(info->name, metadata->model.name, MRVL_ML_MODEL_NAME_LEN);
+ memcpy(info->name, metadata->model.name, MRVL_ML_MODEL_NAME_LEN);
snprintf(info->version, RTE_ML_STR_MAX, "%u.%u.%u.%u", metadata->model.version[0],
metadata->model.version[1], metadata->model.version[2],
metadata->model.version[3]);
@@ -583,7 +583,8 @@ cn10k_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *mo
/* Set input info */
for (i = 0; i < info->nb_inputs; i++) {
- rte_memcpy(input[i].name, io_info->input[i].name, MRVL_ML_INPUT_NAME_LEN);
+ memcpy(input[i].name, io_info->input[i].name,
+ MRVL_ML_INPUT_NAME_LEN);
input[i].nb_dims = io_info->input[i].nb_dims;
input[i].shape = &io_info->input[i].shape[0];
input[i].type = io_info->input[i].qtype;
@@ -596,7 +597,8 @@ cn10k_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *mo
/* Set output info */
for (i = 0; i < info->nb_outputs; i++) {
- rte_memcpy(output[i].name, io_info->output[i].name, MRVL_ML_INPUT_NAME_LEN);
+ memcpy(output[i].name, io_info->output[i].name,
+ MRVL_ML_INPUT_NAME_LEN);
output[i].nb_dims = io_info->output[i].nb_dims;
output[i].shape = &io_info->output[i].shape[0];
output[i].type = io_info->output[i].qtype;
diff --git a/drivers/ml/cnxk/cn10k_ml_ops.c b/drivers/ml/cnxk/cn10k_ml_ops.c
index 597806b787..79a03dc10b 100644
--- a/drivers/ml/cnxk/cn10k_ml_ops.c
+++ b/drivers/ml/cnxk/cn10k_ml_ops.c
@@ -668,7 +668,8 @@ cn10k_ml_layer_load(void *device, uint16_t model_id, const char *layer_name, uin
}
/* Copy metadata to internal buffer */
- rte_memcpy(&layer->glow.metadata, buffer, sizeof(struct cn10k_ml_model_metadata));
+ memcpy(&layer->glow.metadata, buffer,
+ sizeof(struct cn10k_ml_model_metadata));
cn10k_ml_model_metadata_update(&layer->glow.metadata);
/* Enable support for batch_size of 256 */
@@ -745,11 +746,12 @@ cn10k_ml_model_load(struct cnxk_ml_dev *cnxk_mldev, struct rte_ml_model_params *
model->subtype = ML_CNXK_MODEL_SUBTYPE_GLOW_MRVL;
/* Copy metadata to internal buffer */
- rte_memcpy(&model->glow.metadata, params->addr, sizeof(struct cn10k_ml_model_metadata));
+ memcpy(&model->glow.metadata, params->addr,
+ sizeof(struct cn10k_ml_model_metadata));
cn10k_ml_model_metadata_update(&model->glow.metadata);
/* Set model name */
- rte_memcpy(model->name, (char *)model->glow.metadata.model.name, 64);
+ memcpy(model->name, (char *)model->glow.metadata.model.name, 64);
/* Enable support for batch_size of 256 */
if (model->glow.metadata.model.batch_size == 0)
diff --git a/drivers/ml/cnxk/tvmrt_ml_model.c b/drivers/ml/cnxk/tvmrt_ml_model.c
index 319c53a05b..f0bc616148 100644
--- a/drivers/ml/cnxk/tvmrt_ml_model.c
+++ b/drivers/ml/cnxk/tvmrt_ml_model.c
@@ -848,7 +848,7 @@ tvmrt_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *mo
if (model->subtype == ML_CNXK_MODEL_SUBTYPE_TVM_MRVL)
goto tvm_mrvl_model;
- rte_memcpy(info->name, model->name, RTE_ML_STR_MAX);
+ memcpy(info->name, model->name, RTE_ML_STR_MAX);
snprintf(info->version, RTE_ML_STR_MAX, "%u.%u.%u.%u", 0, 0, 0, 0);
info->model_id = model->model_id;
info->device_id = cnxk_mldev->mldev->data->dev_id;
@@ -863,7 +863,8 @@ tvmrt_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *mo
/* Set input info */
for (i = 0; i < info->nb_inputs; i++) {
- rte_memcpy(input[i].name, model->tvmrt.info.input[i].name, MRVL_ML_INPUT_NAME_LEN);
+ memcpy(input[i].name, model->tvmrt.info.input[i].name,
+ MRVL_ML_INPUT_NAME_LEN);
input[i].nb_dims = model->tvmrt.info.input[i].nb_dims;
input[i].shape = &model->tvmrt.info.input[i].shape[0];
input[i].type = model->tvmrt.info.input[i].qtype;
@@ -876,8 +877,8 @@ tvmrt_ml_model_info_set(struct cnxk_ml_dev *cnxk_mldev, struct cnxk_ml_model *mo
/* Set output info */
for (i = 0; i < info->nb_outputs; i++) {
- rte_memcpy(output[i].name, model->tvmrt.info.output[i].name,
- MRVL_ML_OUTPUT_NAME_LEN);
+ memcpy(output[i].name, model->tvmrt.info.output[i].name,
+ MRVL_ML_OUTPUT_NAME_LEN);
output[i].nb_dims = model->tvmrt.info.output[i].nb_dims;
output[i].shape = &model->tvmrt.info.output[i].shape[0];
output[i].type = model->tvmrt.info.output[i].qtype;
diff --git a/drivers/ml/cnxk/tvmrt_ml_ops.c b/drivers/ml/cnxk/tvmrt_ml_ops.c
index f6b3a51c51..191f93486a 100644
--- a/drivers/ml/cnxk/tvmrt_ml_ops.c
+++ b/drivers/ml/cnxk/tvmrt_ml_ops.c
@@ -229,7 +229,7 @@ tvmrt_ml_model_load(struct cnxk_ml_dev *cnxk_mldev, struct rte_ml_model_params *
/* Copy mod.so */
model->tvmrt.so.buffer = mz->addr;
model->tvmrt.so.size = object[0].size;
- rte_memcpy(model->tvmrt.so.name, object[0].name, RTE_ML_STR_MAX);
+ memcpy(model->tvmrt.so.name, object[0].name, RTE_ML_STR_MAX);
rte_memcpy(model->tvmrt.so.buffer, object[0].buffer, object[0].size);
rte_free(object[0].buffer);
@@ -238,7 +238,7 @@ tvmrt_ml_model_load(struct cnxk_ml_dev *cnxk_mldev, struct rte_ml_model_params *
RTE_PTR_ADD(model->tvmrt.so.buffer,
RTE_ALIGN_CEIL(model->tvmrt.so.size, RTE_CACHE_LINE_MIN_SIZE));
model->tvmrt.json.size = object[1].size;
- rte_memcpy(model->tvmrt.json.name, object[1].name, RTE_ML_STR_MAX);
+ memcpy(model->tvmrt.json.name, object[1].name, RTE_ML_STR_MAX);
rte_memcpy(model->tvmrt.json.buffer, object[1].buffer, object[1].size);
rte_free(object[1].buffer);
@@ -247,7 +247,7 @@ tvmrt_ml_model_load(struct cnxk_ml_dev *cnxk_mldev, struct rte_ml_model_params *
RTE_PTR_ADD(model->tvmrt.json.buffer,
RTE_ALIGN_CEIL(model->tvmrt.json.size, RTE_CACHE_LINE_MIN_SIZE));
model->tvmrt.params.size = object[2].size;
- rte_memcpy(model->tvmrt.params.name, object[2].name, RTE_ML_STR_MAX);
+ memcpy(model->tvmrt.params.name, object[2].name, RTE_ML_STR_MAX);
rte_memcpy(model->tvmrt.params.buffer, object[2].buffer, object[2].size);
rte_free(object[2].buffer);
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 51/61] drivers/event: use memcpy for fixed size data
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (49 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 50/61] ml/cnxk: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 52/61] baseband/la12xx: " Stephen Hemminger
` (10 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Pavan Nikhilesh, Shijith Thotton,
Tirthendu Sarkar, Hemant Agrawal, Sachin Saxena, Jerin Jacob
The regular libc memcpy is inline for fix sizes and has
better analysis coverage.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/event/cnxk/cnxk_eventdev_selftest.c | 1 -
drivers/event/cnxk/cnxk_tim_evdev.c | 4 ++--
drivers/event/dlb2/dlb2.c | 4 ++--
drivers/event/dpaa/dpaa_eventdev.c | 1 -
drivers/event/dpaa2/dpaa2_eventdev.c | 3 +--
drivers/event/dpaa2/dpaa2_eventdev_selftest.c | 1 -
drivers/event/octeontx/ssovf_evdev_selftest.c | 1 -
drivers/event/octeontx/timvf_evdev.c | 4 ++--
8 files changed, 7 insertions(+), 12 deletions(-)
diff --git a/drivers/event/cnxk/cnxk_eventdev_selftest.c b/drivers/event/cnxk/cnxk_eventdev_selftest.c
index 8f3d0982e9..adef6b3f2d 100644
--- a/drivers/event/cnxk/cnxk_eventdev_selftest.c
+++ b/drivers/event/cnxk/cnxk_eventdev_selftest.c
@@ -13,7 +13,6 @@
#include <rte_lcore.h>
#include <rte_malloc.h>
#include <rte_mbuf.h>
-#include <rte_memcpy.h>
#include <rte_per_lcore.h>
#include <rte_random.h>
#include <rte_test.h>
diff --git a/drivers/event/cnxk/cnxk_tim_evdev.c b/drivers/event/cnxk/cnxk_tim_evdev.c
index 8cdb8a72dd..a523b93d24 100644
--- a/drivers/event/cnxk/cnxk_tim_evdev.c
+++ b/drivers/event/cnxk/cnxk_tim_evdev.c
@@ -141,8 +141,8 @@ cnxk_tim_ring_info_get(const struct rte_event_timer_adapter *adptr,
adptr_info->min_resolution_ns = tim_ring->ena_periodic ?
tim_ring->max_tout :
tim_ring->tck_nsec;
- rte_memcpy(&adptr_info->conf, &adptr->data->conf,
- sizeof(struct rte_event_timer_adapter_conf));
+ memcpy(&adptr_info->conf, &adptr->data->conf,
+ sizeof(struct rte_event_timer_adapter_conf));
}
static int
diff --git a/drivers/event/dlb2/dlb2.c b/drivers/event/dlb2/dlb2.c
index 084875f1c8..7e781ed920 100644
--- a/drivers/event/dlb2/dlb2.c
+++ b/drivers/event/dlb2/dlb2.c
@@ -1832,7 +1832,7 @@ dlb2_hw_create_ldb_port(struct dlb2_eventdev *dlb2,
qm_port->issued_releases = 0;
/* Save config message too. */
- rte_memcpy(&qm_port->cfg.ldb, &cfg, sizeof(qm_port->cfg.ldb));
+ memcpy(&qm_port->cfg.ldb, &cfg, sizeof(qm_port->cfg.ldb));
/* update state */
qm_port->state = PORT_STARTED; /* enabled at create time */
@@ -2026,7 +2026,7 @@ dlb2_hw_create_dir_port(struct dlb2_eventdev *dlb2,
qm_port->issued_releases = 0;
/* Save config message too. */
- rte_memcpy(&qm_port->cfg.dir, &cfg, sizeof(qm_port->cfg.dir));
+ memcpy(&qm_port->cfg.dir, &cfg, sizeof(qm_port->cfg.dir));
/* update state */
qm_port->state = PORT_STARTED; /* enabled at create time */
diff --git a/drivers/event/dpaa/dpaa_eventdev.c b/drivers/event/dpaa/dpaa_eventdev.c
index e5d93afca2..bea89cb12d 100644
--- a/drivers/event/dpaa/dpaa_eventdev.c
+++ b/drivers/event/dpaa/dpaa_eventdev.c
@@ -19,7 +19,6 @@
#include <rte_lcore.h>
#include <rte_log.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_memory.h>
#include <rte_memzone.h>
#include <rte_pci.h>
diff --git a/drivers/event/dpaa2/dpaa2_eventdev.c b/drivers/event/dpaa2/dpaa2_eventdev.c
index 95d9154b11..f6fecd9740 100644
--- a/drivers/event/dpaa2/dpaa2_eventdev.c
+++ b/drivers/event/dpaa2/dpaa2_eventdev.c
@@ -20,7 +20,6 @@
#include <rte_lcore.h>
#include <rte_log.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_memory.h>
#include <rte_pci.h>
#include <bus_vdev_driver.h>
@@ -159,7 +158,7 @@ dpaa2_eventdev_enqueue_burst(void *port, const struct rte_event ev[],
"Unable to allocate event object");
goto send_partial;
}
- rte_memcpy(ev_temp, event, sizeof(struct rte_event));
+ memcpy(ev_temp, event, sizeof(struct rte_event));
DPAA2_SET_FD_ADDR((&fd_arr[loop]), (size_t)ev_temp);
DPAA2_SET_FD_LEN((&fd_arr[loop]),
sizeof(struct rte_event));
diff --git a/drivers/event/dpaa2/dpaa2_eventdev_selftest.c b/drivers/event/dpaa2/dpaa2_eventdev_selftest.c
index 9d4938efe6..8a9a14f628 100644
--- a/drivers/event/dpaa2/dpaa2_eventdev_selftest.c
+++ b/drivers/event/dpaa2/dpaa2_eventdev_selftest.c
@@ -12,7 +12,6 @@
#include <rte_hexdump.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_lcore.h>
#include <rte_per_lcore.h>
diff --git a/drivers/event/octeontx/ssovf_evdev_selftest.c b/drivers/event/octeontx/ssovf_evdev_selftest.c
index b54ae126d2..c0a0c789de 100644
--- a/drivers/event/octeontx/ssovf_evdev_selftest.c
+++ b/drivers/event/octeontx/ssovf_evdev_selftest.c
@@ -14,7 +14,6 @@
#include <rte_hexdump.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_launch.h>
#include <rte_lcore.h>
#include <rte_per_lcore.h>
diff --git a/drivers/event/octeontx/timvf_evdev.c b/drivers/event/octeontx/timvf_evdev.c
index b404b1db61..712e2bb973 100644
--- a/drivers/event/octeontx/timvf_evdev.c
+++ b/drivers/event/octeontx/timvf_evdev.c
@@ -42,8 +42,8 @@ timvf_ring_info_get(const struct rte_event_timer_adapter *adptr,
struct timvf_ring *timr = adptr->data->adapter_priv;
adptr_info->max_tmo_ns = timr->max_tout;
adptr_info->min_resolution_ns = timr->tck_nsec;
- rte_memcpy(&adptr_info->conf, &adptr->data->conf,
- sizeof(struct rte_event_timer_adapter_conf));
+ memcpy(&adptr_info->conf, &adptr->data->conf,
+ sizeof(struct rte_event_timer_adapter_conf));
}
static int
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 52/61] baseband/la12xx: use memcpy for fixed size data
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (50 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 51/61] drivers/event: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 53/61] baseband/acc: replace use of rte_memcpy Stephen Hemminger
` (9 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Gagandeep Singh, Hemant Agrawal
The regular libc memcpy is inline for fix sizes and has
better analysis coverage.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/baseband/la12xx/bbdev_la12xx.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/baseband/la12xx/bbdev_la12xx.c b/drivers/baseband/la12xx/bbdev_la12xx.c
index 1116dacc4b..791ed5e5f6 100644
--- a/drivers/baseband/la12xx/bbdev_la12xx.c
+++ b/drivers/baseband/la12xx/bbdev_la12xx.c
@@ -599,8 +599,8 @@ dequeue_single_op(struct bbdev_la12xx_q_priv *q_priv, void *dst)
op = q_priv->bbdev_op[ci];
- rte_memcpy(dst, q_priv->msg_ch_vaddr[ci],
- sizeof(struct bbdev_ipc_enqueue_op));
+ memcpy(dst, q_priv->msg_ch_vaddr[ci],
+ sizeof(struct bbdev_ipc_enqueue_op));
/* Move Consumer Index forward */
ci++;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 53/61] baseband/acc: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (51 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 52/61] baseband/la12xx: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 54/61] drivers/*/qat: use memcpy for fixed size data Stephen Hemminger
` (8 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Nicolas Chautru
Using rte_memcpy is not needed here.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/baseband/acc/rte_acc100_pmd.c | 7 ++++---
drivers/baseband/acc/rte_vrb_pmd.c | 21 ++++++++++-----------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/drivers/baseband/acc/rte_acc100_pmd.c b/drivers/baseband/acc/rte_acc100_pmd.c
index cbcacc7aa3..7261ac937d 100644
--- a/drivers/baseband/acc/rte_acc100_pmd.c
+++ b/drivers/baseband/acc/rte_acc100_pmd.c
@@ -2890,7 +2890,7 @@ enqueue_ldpc_dec_one_op_cb(struct acc_queue *q, struct rte_bbdev_dec_op *op,
dec->q_m = 1;
dec->cb_params.e = dec->n_cb - dec->n_filler;
dec->rv_index = 0;
- rte_memcpy(in, q->derm_buffer, dec->cb_params.e);
+ memcpy(in, q->derm_buffer, dec->cb_params.e);
/* Capture counter when pre-processing is used */
q_data->queue_stats.enqueue_warn_count++;
#else
@@ -2988,7 +2988,8 @@ enqueue_ldpc_dec_one_op_tb(struct acc_queue *q, struct rte_bbdev_dec_op *op,
desc = acc_desc(q, total_enqueued_cbs);
desc->req.data_ptrs[0].address = q->ring_addr_iova + fcw_offset;
desc->req.data_ptrs[0].blen = ACC_FCW_LD_BLEN;
- rte_memcpy(&desc->req.fcw_ld, &desc_first->req.fcw_ld, ACC_FCW_LD_BLEN);
+ memcpy(&desc->req.fcw_ld, &desc_first->req.fcw_ld,
+ ACC_FCW_LD_BLEN);
ret = acc100_dma_desc_ld_fill(op, &desc->req, &input,
h_output, &in_offset, &h_out_offset,
&h_out_length,
@@ -4266,7 +4267,7 @@ acc100_configure(const char *dev_name, struct rte_acc_conf *conf)
struct acc_device *d = bbdev->data->dev_private;
/* Store configuration */
- rte_memcpy(&d->acc_conf, conf, sizeof(d->acc_conf));
+ memcpy(&d->acc_conf, conf, sizeof(d->acc_conf));
value = acc_reg_read(d, HwPfPcieGpexBridgeControl);
bool firstCfg = (value != ACC100_CFG_PCI_BRIDGE);
diff --git a/drivers/baseband/acc/rte_vrb_pmd.c b/drivers/baseband/acc/rte_vrb_pmd.c
index 1f85e33462..cb3ef51fcb 100644
--- a/drivers/baseband/acc/rte_vrb_pmd.c
+++ b/drivers/baseband/acc/rte_vrb_pmd.c
@@ -2593,15 +2593,13 @@ vrb_enqueue_ldpc_dec_one_op_cb(struct acc_queue *q, struct rte_bbdev_dec_op *op,
uint8_t *prev_ptr = (uint8_t *) prev_desc;
uint8_t *new_ptr = (uint8_t *) desc;
/* Copy first 4 words and BDESCs. */
- rte_memcpy(new_ptr, prev_ptr, ACC_5GUL_SIZE_0);
- rte_memcpy(new_ptr + ACC_5GUL_OFFSET_0,
- prev_ptr + ACC_5GUL_OFFSET_0,
- ACC_5GUL_SIZE_1);
+ memcpy(new_ptr, prev_ptr, ACC_5GUL_SIZE_0);
+ memcpy(new_ptr + ACC_5GUL_OFFSET_0,
+ prev_ptr + ACC_5GUL_OFFSET_0, ACC_5GUL_SIZE_1);
desc->req.op_addr = prev_desc->req.op_addr;
/* Copy FCW. */
- rte_memcpy(new_ptr + ACC_DESC_FCW_OFFSET,
- prev_ptr + ACC_DESC_FCW_OFFSET,
- ACC_FCW_LD_BLEN);
+ memcpy(new_ptr + ACC_DESC_FCW_OFFSET,
+ prev_ptr + ACC_DESC_FCW_OFFSET, ACC_FCW_LD_BLEN);
vrb_dma_desc_ld_update(op, &desc->req, input, h_output,
&in_offset, &h_out_offset,
&h_out_length, harq_layout);
@@ -2709,7 +2707,8 @@ vrb_enqueue_ldpc_dec_one_op_tb(struct acc_queue *q, struct rte_bbdev_dec_op *op,
fcw_offset = (desc_idx << 8) + ACC_DESC_FCW_OFFSET;
desc->req.data_ptrs[0].address = q->ring_addr_iova + fcw_offset;
desc->req.data_ptrs[0].blen = ACC_FCW_LD_BLEN;
- rte_memcpy(&desc->req.fcw_ld, &desc_first->req.fcw_ld, ACC_FCW_LD_BLEN);
+ memcpy(&desc->req.fcw_ld, &desc_first->req.fcw_ld,
+ ACC_FCW_LD_BLEN);
desc->req.fcw_ld.tb_trailer_size = (c - r - 1) * trail_len;
ret = vrb_dma_desc_ld_fill(op, &desc->req, &input,
h_output, &in_offset, &h_out_offset,
@@ -4140,7 +4139,7 @@ enqueue_mldts_split_op(struct acc_queue *q, struct rte_bbdev_mldts_op *op,
if (symb == 0)
desc->req.cbs_in_tb = num_syms;
else
- rte_memcpy(&desc->req.fcw_mldts, fcw, ACC_FCW_MLDTS_BLEN);
+ memcpy(&desc->req.fcw_mldts, fcw, ACC_FCW_MLDTS_BLEN);
desc->req.data_ptrs[1].address = rte_pktmbuf_iova_offset(input_q, in_offset);
desc->req.data_ptrs[1].blen = q_size;
in_offset += q_size;
@@ -4490,7 +4489,7 @@ vrb1_configure(const char *dev_name, struct rte_acc_conf *conf)
struct acc_device *d = bbdev->data->dev_private;
/* Store configuration. */
- rte_memcpy(&d->acc_conf, conf, sizeof(d->acc_conf));
+ memcpy(&d->acc_conf, conf, sizeof(d->acc_conf));
/* Check we are already out of PG. */
status = acc_reg_read(d, VRB1_PfHiSectionPowerGatingAck);
@@ -4897,7 +4896,7 @@ vrb2_configure(const char *dev_name, struct rte_acc_conf *conf)
struct acc_device *d = bbdev->data->dev_private;
/* Store configuration. */
- rte_memcpy(&d->acc_conf, conf, sizeof(d->acc_conf));
+ memcpy(&d->acc_conf, conf, sizeof(d->acc_conf));
/* Explicitly releasing AXI as this may be stopped after PF FLR/BME. */
address = VRB2_PfDmaAxiControl;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 54/61] drivers/*/qat: use memcpy for fixed size data
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (52 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 53/61] baseband/acc: replace use of rte_memcpy Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 55/61] hash: replace use of rte_memcpy Stephen Hemminger
` (7 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Kai Ji, Fan Zhang, Ashish Gupta
The regular libc memcpy is inline for fix sizes and has
better analysis coverage.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/common/qat/qat_qp.c | 10 ++++-----
drivers/compress/qat/qat_comp.c | 8 +++----
drivers/crypto/qat/qat_sym_session.c | 33 ++++++++++++++--------------
3 files changed, 24 insertions(+), 27 deletions(-)
diff --git a/drivers/common/qat/qat_qp.c b/drivers/common/qat/qat_qp.c
index fe28cb160d..6ea4548bba 100644
--- a/drivers/common/qat/qat_qp.c
+++ b/drivers/common/qat/qat_qp.c
@@ -871,9 +871,8 @@ qat_cq_get_fw_cipher_crc_cap(struct qat_qp *qp)
return -EINVAL;
}
- rte_memcpy(src_data_addr,
- cipher_crc_cap_check_plaintext,
- sizeof(cipher_crc_cap_check_plaintext));
+ memcpy(src_data_addr, cipher_crc_cap_check_plaintext,
+ sizeof(cipher_crc_cap_check_plaintext));
phy_src_addr = rte_mem_virt2iova(src_data_addr);
if (phy_src_addr == 0 || phy_src_addr == RTE_BAD_IOVA) {
@@ -892,9 +891,8 @@ qat_cq_get_fw_cipher_crc_cap(struct qat_qp *qp)
auth_param = (void *)((uint8_t *)cipher_param +
ICP_QAT_FW_HASH_REQUEST_PARAMETERS_OFFSET);
- rte_memcpy(cipher_param->u.cipher_IV_array,
- cipher_crc_cap_check_iv,
- sizeof(cipher_crc_cap_check_iv));
+ memcpy(cipher_param->u.cipher_IV_array, cipher_crc_cap_check_iv,
+ sizeof(cipher_crc_cap_check_iv));
cipher_param->cipher_offset = cipher_crc_cap_check_cipher_offset;
cipher_param->cipher_length =
diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c
index 559948a46a..5bcbefe395 100644
--- a/drivers/compress/qat/qat_comp.c
+++ b/drivers/compress/qat/qat_comp.c
@@ -375,7 +375,7 @@ qat_comp_build_multiple_requests(void *in_op, struct qat_qp *qp,
QAT_DP_LOG(DEBUG, "op %p, parent_cookie %p", op, parent_cookie);
/* copy original op to the local variable for restoring later */
- rte_memcpy(&op_backup, op, sizeof(op_backup));
+ memcpy(&op_backup, op, sizeof(op_backup));
parent_cookie->nb_child_responses = 0;
parent_cookie->nb_children = 0;
@@ -401,7 +401,7 @@ qat_comp_build_multiple_requests(void *in_op, struct qat_qp *qp,
}
/* prepare local dst mbuf */
- rte_memcpy(&dst_mbuf, op->m_dst, sizeof(dst_mbuf));
+ memcpy(&dst_mbuf, op->m_dst, sizeof(dst_mbuf));
rte_pktmbuf_reset(&dst_mbuf);
dst_mbuf.buf_len = dst_data_size;
dst_mbuf.data_len = dst_data_size;
@@ -457,7 +457,7 @@ qat_comp_build_multiple_requests(void *in_op, struct qat_qp *qp,
if (ret < 0) {
QAT_DP_LOG(WARNING, "Failed to build child descriptor");
/* restore op and clear cookie */
- rte_memcpy(op, &op_backup, sizeof(op_backup));
+ memcpy(op, &op_backup, sizeof(op_backup));
parent_cookie->split_op = 0;
parent_cookie->nb_children = 0;
return ret;
@@ -468,7 +468,7 @@ qat_comp_build_multiple_requests(void *in_op, struct qat_qp *qp,
}
/* restore backed up original op */
- rte_memcpy(op, &op_backup, sizeof(op_backup));
+ memcpy(op, &op_backup, sizeof(op_backup));
if (nb_descr != num_descriptors_built)
QAT_DP_LOG(ERR, "split op. expected %d, built %d",
diff --git a/drivers/crypto/qat/qat_sym_session.c b/drivers/crypto/qat/qat_sym_session.c
index d89c20cad6..1197537545 100644
--- a/drivers/crypto/qat/qat_sym_session.c
+++ b/drivers/crypto/qat/qat_sym_session.c
@@ -1585,8 +1585,8 @@ static int qat_sym_do_precomputes_ipsec_mb(enum icp_qat_hw_auth_algo hash_alg,
uint8_t *input = in;
uint8_t *out = p_state_buf;
- rte_memcpy(input, qat_aes_xcbc_key_seed,
- ICP_QAT_HW_AES_XCBC_MAC_STATE2_SZ);
+ memcpy(input, qat_aes_xcbc_key_seed,
+ ICP_QAT_HW_AES_XCBC_MAC_STATE2_SZ);
for (i = 0; i < HASH_XCBC_PRECOMP_KEY_NUM; i++) {
if (aes_ipsecmb_job(input, out, m, auth_key, auth_keylen)) {
memset(input -
@@ -2101,8 +2101,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
cdesc->cd_cur_ptr += sizeof(struct icp_qat_hw_auth_setup);
switch (cdesc->qat_hash_alg) {
case ICP_QAT_HW_AUTH_ALGO_SM3:
- rte_memcpy(cdesc->cd_cur_ptr, sm3InitialState,
- sizeof(sm3InitialState));
+ memcpy(cdesc->cd_cur_ptr, sm3InitialState,
+ sizeof(sm3InitialState));
state1_size = qat_hash_get_state1_size(
cdesc->qat_hash_alg);
state2_size = ICP_QAT_HW_SM3_STATE2_SZ;
@@ -2113,9 +2113,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
hash_2->auth_config.config =
ICP_QAT_HW_AUTH_CONFIG_BUILD(ICP_QAT_HW_AUTH_MODE2,
cdesc->qat_hash_alg, digestsize);
- rte_memcpy(cdesc->cd_cur_ptr + state1_size + state2_size +
- sizeof(*hash_2), sm3InitialState,
- sizeof(sm3InitialState));
+ memcpy(cdesc->cd_cur_ptr + state1_size + state2_size + sizeof(*hash_2),
+ sm3InitialState, sizeof(sm3InitialState));
hash_cd_ctrl->inner_state1_sz = state1_size;
hash_cd_ctrl->inner_state2_sz = state2_size;
hash_cd_ctrl->inner_state2_offset =
@@ -2154,8 +2153,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
case ICP_QAT_HW_AUTH_ALGO_SHA1:
if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
/* Plain SHA-1 */
- rte_memcpy(cdesc->cd_cur_ptr, sha1InitialState,
- sizeof(sha1InitialState));
+ memcpy(cdesc->cd_cur_ptr, sha1InitialState,
+ sizeof(sha1InitialState));
state1_size = qat_hash_get_state1_size(
cdesc->qat_hash_alg);
break;
@@ -2174,8 +2173,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
case ICP_QAT_HW_AUTH_ALGO_SHA224:
if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
/* Plain SHA-224 */
- rte_memcpy(cdesc->cd_cur_ptr, sha224InitialState,
- sizeof(sha224InitialState));
+ memcpy(cdesc->cd_cur_ptr, sha224InitialState,
+ sizeof(sha224InitialState));
state1_size = qat_hash_get_state1_size(
cdesc->qat_hash_alg);
break;
@@ -2193,8 +2192,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
case ICP_QAT_HW_AUTH_ALGO_SHA256:
if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
/* Plain SHA-256 */
- rte_memcpy(cdesc->cd_cur_ptr, sha256InitialState,
- sizeof(sha256InitialState));
+ memcpy(cdesc->cd_cur_ptr, sha256InitialState,
+ sizeof(sha256InitialState));
state1_size = qat_hash_get_state1_size(
cdesc->qat_hash_alg);
break;
@@ -2212,8 +2211,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
case ICP_QAT_HW_AUTH_ALGO_SHA384:
if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
/* Plain SHA-384 */
- rte_memcpy(cdesc->cd_cur_ptr, sha384InitialState,
- sizeof(sha384InitialState));
+ memcpy(cdesc->cd_cur_ptr, sha384InitialState,
+ sizeof(sha384InitialState));
state1_size = qat_hash_get_state1_size(
cdesc->qat_hash_alg);
break;
@@ -2231,8 +2230,8 @@ static int qat_sym_cd_auth_set(struct qat_sym_session *cdesc,
case ICP_QAT_HW_AUTH_ALGO_SHA512:
if (cdesc->auth_mode == ICP_QAT_HW_AUTH_MODE0) {
/* Plain SHA-512 */
- rte_memcpy(cdesc->cd_cur_ptr, sha512InitialState,
- sizeof(sha512InitialState));
+ memcpy(cdesc->cd_cur_ptr, sha512InitialState,
+ sizeof(sha512InitialState));
state1_size = qat_hash_get_state1_size(
cdesc->qat_hash_alg);
break;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 55/61] hash: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (53 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 54/61] drivers/*/qat: use memcpy for fixed size data Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 56/61] rib: remove rte_memcpy include Stephen Hemminger
` (6 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Yipeng Wang, Sameh Gobriel, Bruce Richardson,
Vladimir Medvedkin
Don't need to use rte_memcpy to copy small key value here.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/hash/rte_thash.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/hash/rte_thash.c b/lib/hash/rte_thash.c
index fcd41248b9..931bb55f0e 100644
--- a/lib/hash/rte_thash.c
+++ b/lib/hash/rte_thash.c
@@ -3,13 +3,13 @@
*/
#include <stdalign.h>
+#include <string.h>
#include <sys/queue.h>
#include <eal_export.h>
#include <rte_thash.h>
#include <rte_tailq.h>
#include <rte_random.h>
-#include <rte_memcpy.h>
#include <rte_errno.h>
#include <rte_eal_memconfig.h>
#include <rte_log.h>
@@ -263,7 +263,7 @@ rte_thash_init_ctx(const char *name, uint32_t key_len, uint32_t reta_sz,
ctx->flags = flags;
if (key)
- rte_memcpy(ctx->hash_key, key, key_len);
+ memcpy(ctx->hash_key, key, key_len);
else {
for (i = 0; i < key_len; i++)
ctx->hash_key[i] = rte_rand();
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 56/61] rib: remove rte_memcpy include
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (54 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 55/61] hash: replace use of rte_memcpy Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 57/61] pcapng: replace use of rte_memcpy Stephen Hemminger
` (5 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Vladimir Medvedkin
The rte_memcpy function is no longer used in this library.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/rib/rte_rib6.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/rib/rte_rib6.h b/lib/rib/rte_rib6.h
index e3fb464ae6..2e554579d1 100644
--- a/lib/rib/rte_rib6.h
+++ b/lib/rib/rte_rib6.h
@@ -14,7 +14,6 @@
* Level compressed tree implementation for IPv6 Longest Prefix Match
*/
-#include <rte_memcpy.h>
#include <rte_ip6.h>
#ifdef __cplusplus
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 57/61] pcapng: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (55 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 56/61] rib: remove rte_memcpy include Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 58/61] efd: " Stephen Hemminger
` (4 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Reshma Pattan
The rte_memcpy is only in the wrapper for Windows where
writev() is not present. Using memcpy is safer.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/pcapng/rte_pcapng.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/pcapng/rte_pcapng.c b/lib/pcapng/rte_pcapng.c
index b5d1026891..4c84e855cf 100644
--- a/lib/pcapng/rte_pcapng.c
+++ b/lib/pcapng/rte_pcapng.c
@@ -95,7 +95,7 @@ static ssize_t writev(int fd, const struct iovec *iov, int iovcnt)
ptr = tmp_buf;
for (i = 0; i < iovcnt; i++) {
- rte_memcpy(ptr, iov[i].iov_base, iov[i].iov_len);
+ memcpy(ptr, iov[i].iov_base, iov[i].iov_len);
ptr += iov[i].iov_len;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 58/61] efd: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (56 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 57/61] pcapng: replace use of rte_memcpy Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 59/61] net/xsc: " Stephen Hemminger
` (3 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Yipeng Wang
Copying small key with rte_memcpy is better done with memcpy
which enables more analysis checks.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
lib/efd/rte_efd.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/lib/efd/rte_efd.c b/lib/efd/rte_efd.c
index 4dfc0ec9a4..09b0b01d90 100644
--- a/lib/efd/rte_efd.c
+++ b/lib/efd/rte_efd.c
@@ -18,7 +18,6 @@
#include <rte_malloc.h>
#include <rte_prefetch.h>
#include <rte_branch_prediction.h>
-#include <rte_memcpy.h>
#include <rte_ring.h>
#include <rte_jhash.h>
#include <rte_hash_crc.h>
@@ -1060,7 +1059,7 @@ efd_compute_update(struct rte_efd_table * const table,
rte_prefetch0(new_k);
new_idx = (uint32_t) ((uintptr_t) slot_id);
- rte_memcpy(EFD_KEY(new_idx, table), key, table->key_len);
+ memcpy(EFD_KEY(new_idx, table), key, table->key_len);
current_group->key_idx[current_group->num_rules] = new_idx;
current_group->value[current_group->num_rules] = value;
current_group->bin_id[current_group->num_rules] = *bin_id;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 59/61] net/xsc: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (57 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 58/61] efd: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 5:12 ` [PATCH 60/61] net/pcap: " Stephen Hemminger
` (2 subsequent siblings)
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Renyong Wan, Na Na, Rong Qian, Xiaoxiong Zhang,
Dongwei Xu
The use of rte_memcpy() when building the RSS hash key mailbox
command is control path only. Regular memcpy() has no performance
disadvantage there and gets more compile time checking of the
arguments.
The remaining uses of rte_memcpy() in xsc_tx_elts_store() are left
alone since that is on the transmit fast path.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/xsc/xsc_dev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/xsc/xsc_dev.c b/drivers/net/xsc/xsc_dev.c
index 478f489516..baec15d153 100644
--- a/drivers/net/xsc/xsc_dev.c
+++ b/drivers/net/xsc/xsc_dev.c
@@ -159,7 +159,7 @@ xsc_dev_rss_key_modify(struct xsc_dev *xdev, uint8_t *rss_key, uint8_t rss_key_l
in.hdr.opcode = rte_cpu_to_be_16(XSC_CMD_OP_MODIFY_NIC_HCA);
key_len = RTE_MIN(rss_key_len, XSC_RSS_HASH_KEY_LEN);
- rte_memcpy(in.rss.hash_key, rss_key, key_len);
+ memcpy(in.rss.hash_key, rss_key, key_len);
rss_caps_mask |= RTE_BIT32(XSC_RSS_HASH_KEY_UPDATE);
in.rss.caps_mask = rss_caps_mask;
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 60/61] net/pcap: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (58 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 59/61] net/xsc: " Stephen Hemminger
@ 2026-08-20 5:12 ` 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
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
The pcap driver is not used for high speed production traffic, so
any marginal performance difference from using regular memcpy() does
not matter. Regular memcpy() gets more compile time checking of the
arguments.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/pcap/pcap_ethdev.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/net/pcap/pcap_ethdev.c b/drivers/net/pcap/pcap_ethdev.c
index 08d3ab9e91..a22e41200a 100644
--- a/drivers/net/pcap/pcap_ethdev.c
+++ b/drivers/net/pcap/pcap_ethdev.c
@@ -25,7 +25,6 @@
#include <ethdev_vdev.h>
#include <rte_kvargs.h>
#include <rte_malloc.h>
-#include <rte_memcpy.h>
#include <rte_mbuf.h>
#include <rte_mbuf_dyn.h>
#include <bus_vdev_driver.h>
@@ -233,7 +232,7 @@ eth_pcap_rx_jumbo(struct rte_mempool *mb_pool, struct rte_mbuf *mbuf,
uint16_t len = rte_pktmbuf_tailroom(mbuf);
struct rte_mbuf *m = mbuf;
- rte_memcpy(rte_pktmbuf_append(mbuf, len), data, len);
+ memcpy(rte_pktmbuf_append(mbuf, len), data, len);
data_len -= len;
data += len;
@@ -253,7 +252,7 @@ eth_pcap_rx_jumbo(struct rte_mempool *mb_pool, struct rte_mbuf *mbuf,
/* Copy next segment. */
len = RTE_MIN(rte_pktmbuf_tailroom(m), data_len);
- rte_memcpy(rte_pktmbuf_append(m, len), data, len);
+ memcpy(rte_pktmbuf_append(m, len), data, len);
mbuf->nb_segs++;
data_len -= len;
@@ -282,7 +281,7 @@ eth_pcap_rx_infinite(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
if (err)
return i;
- rte_memcpy(rte_pktmbuf_mtod(bufs[i], void *),
+ memcpy(rte_pktmbuf_mtod(bufs[i], void *),
rte_pktmbuf_mtod(pcap_buf, void *),
pcap_buf->data_len);
bufs[i]->data_len = pcap_buf->data_len;
@@ -389,7 +388,7 @@ eth_pcap_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
uint32_t len = header->caplen;
if (len <= rte_pktmbuf_tailroom(mbuf)) {
/* pcap packet will fit in the mbuf, can copy it */
- rte_memcpy(rte_pktmbuf_mtod(mbuf, void *), packet, len);
+ memcpy(rte_pktmbuf_mtod(mbuf, void *), packet, len);
mbuf->data_len = len;
} else if (pcap_q->rx_scatter) {
/* Scatter into multi-segment mbufs. */
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* [PATCH 61/61] power: replace use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (59 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 60/61] net/pcap: " Stephen Hemminger
@ 2026-08-20 5:12 ` Stephen Hemminger
2026-08-20 7:31 ` [PATCH 00/61] reduce " Morten Brørup
61 siblings, 0 replies; 64+ messages in thread
From: Stephen Hemminger @ 2026-08-20 5:12 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Anatoly Burakov, Sivaprasad Tummala
All the uses of rte_memcpy() in the power drivers are in the
frequency list query API, which is control path only. Regular
memcpy() has no performance disadvantage there and gets more
compile time checking of the arguments.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/power/acpi/acpi_cpufreq.c | 4 ++--
drivers/power/amd_pstate/amd_pstate_cpufreq.c | 4 ++--
drivers/power/amd_uncore/amd_uncore.c | 5 ++---
drivers/power/cppc/cppc_cpufreq.c | 4 ++--
drivers/power/intel_pstate/intel_pstate_cpufreq.c | 3 +--
drivers/power/intel_uncore/intel_uncore.c | 5 ++---
6 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/drivers/power/acpi/acpi_cpufreq.c b/drivers/power/acpi/acpi_cpufreq.c
index af85a8cdec..03769a0276 100644
--- a/drivers/power/acpi/acpi_cpufreq.c
+++ b/drivers/power/acpi/acpi_cpufreq.c
@@ -5,8 +5,8 @@
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
+#include <string.h>
-#include <rte_memcpy.h>
#include <rte_stdatomic.h>
#include <rte_string_fns.h>
@@ -364,7 +364,7 @@ power_acpi_cpufreq_freqs(unsigned int lcore_id, uint32_t *freqs, uint32_t num)
POWER_LOG(ERR, "Buffer size is not enough");
return 0;
}
- rte_memcpy(freqs, pi->freqs, pi->nb_freqs * sizeof(uint32_t));
+ memcpy(freqs, pi->freqs, pi->nb_freqs * sizeof(uint32_t));
return pi->nb_freqs;
}
diff --git a/drivers/power/amd_pstate/amd_pstate_cpufreq.c b/drivers/power/amd_pstate/amd_pstate_cpufreq.c
index af9c1309f3..7efaf7b944 100644
--- a/drivers/power/amd_pstate/amd_pstate_cpufreq.c
+++ b/drivers/power/amd_pstate/amd_pstate_cpufreq.c
@@ -5,8 +5,8 @@
*/
#include <stdlib.h>
+#include <string.h>
-#include <rte_memcpy.h>
#include <rte_stdatomic.h>
#include "amd_pstate_cpufreq.h"
@@ -483,7 +483,7 @@ power_amd_pstate_cpufreq_freqs(unsigned int lcore_id, uint32_t *freqs, uint32_t
POWER_LOG(ERR, "Buffer size is not enough");
return 0;
}
- rte_memcpy(freqs, pi->freqs, pi->nb_freqs * sizeof(uint32_t));
+ memcpy(freqs, pi->freqs, pi->nb_freqs * sizeof(uint32_t));
return pi->nb_freqs;
}
diff --git a/drivers/power/amd_uncore/amd_uncore.c b/drivers/power/amd_uncore/amd_uncore.c
index c3e95cdc08..f9dc0c814f 100644
--- a/drivers/power/amd_uncore/amd_uncore.c
+++ b/drivers/power/amd_uncore/amd_uncore.c
@@ -5,8 +5,7 @@
#include <errno.h>
#include <dirent.h>
#include <fnmatch.h>
-
-#include <rte_memcpy.h>
+#include <string.h>
#include "amd_uncore.h"
#include "power_common.h"
@@ -269,7 +268,7 @@ power_amd_uncore_freqs(unsigned int pkg, unsigned int die, uint32_t *freqs, uint
POWER_LOG(ERR, "Buffer size is not enough");
return 0;
}
- rte_memcpy(freqs, ui->freqs, ui->nb_freqs * sizeof(uint32_t));
+ memcpy(freqs, ui->freqs, ui->nb_freqs * sizeof(uint32_t));
return ui->nb_freqs;
}
diff --git a/drivers/power/cppc/cppc_cpufreq.c b/drivers/power/cppc/cppc_cpufreq.c
index aed44c1212..b4bfe1865f 100644
--- a/drivers/power/cppc/cppc_cpufreq.c
+++ b/drivers/power/cppc/cppc_cpufreq.c
@@ -4,8 +4,8 @@
*/
#include <stdlib.h>
+#include <string.h>
-#include <rte_memcpy.h>
#include <rte_stdatomic.h>
#include "cppc_cpufreq.h"
@@ -469,7 +469,7 @@ power_cppc_cpufreq_freqs(unsigned int lcore_id, uint32_t *freqs, uint32_t num)
POWER_LOG(ERR, "Buffer size is not enough");
return 0;
}
- rte_memcpy(freqs, pi->freqs, pi->nb_freqs * sizeof(uint32_t));
+ memcpy(freqs, pi->freqs, pi->nb_freqs * sizeof(uint32_t));
return pi->nb_freqs;
}
diff --git a/drivers/power/intel_pstate/intel_pstate_cpufreq.c b/drivers/power/intel_pstate/intel_pstate_cpufreq.c
index dfbb5635a1..da0ea562c7 100644
--- a/drivers/power/intel_pstate/intel_pstate_cpufreq.c
+++ b/drivers/power/intel_pstate/intel_pstate_cpufreq.c
@@ -11,7 +11,6 @@
#include <errno.h>
#include <inttypes.h>
-#include <rte_memcpy.h>
#include <rte_stdatomic.h>
#include "rte_power_pmd_mgmt.h"
@@ -679,7 +678,7 @@ power_pstate_cpufreq_freqs(unsigned int lcore_id, uint32_t *freqs, uint32_t num)
POWER_LOG(ERR, "Buffer size is not enough");
return 0;
}
- rte_memcpy(freqs, pi->freqs, pi->nb_freqs * sizeof(uint32_t));
+ memcpy(freqs, pi->freqs, pi->nb_freqs * sizeof(uint32_t));
return pi->nb_freqs;
}
diff --git a/drivers/power/intel_uncore/intel_uncore.c b/drivers/power/intel_uncore/intel_uncore.c
index 6759ea1445..2cbcf864d5 100644
--- a/drivers/power/intel_uncore/intel_uncore.c
+++ b/drivers/power/intel_uncore/intel_uncore.c
@@ -5,8 +5,7 @@
#include <errno.h>
#include <dirent.h>
#include <fnmatch.h>
-
-#include <rte_memcpy.h>
+#include <string.h>
#include "intel_uncore.h"
#include "power_common.h"
@@ -394,7 +393,7 @@ power_intel_uncore_freqs(unsigned int pkg, unsigned int die, uint32_t *freqs, ui
POWER_LOG(ERR, "Buffer size is not enough");
return 0;
}
- rte_memcpy(freqs, ui->freqs, ui->nb_freqs * sizeof(uint32_t));
+ memcpy(freqs, ui->freqs, ui->nb_freqs * sizeof(uint32_t));
return ui->nb_freqs;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 64+ messages in thread* RE: [PATCH 00/61] reduce use of rte_memcpy
2026-08-20 5:11 [PATCH 00/61] reduce use of rte_memcpy Stephen Hemminger
` (60 preceding siblings ...)
2026-08-20 5:12 ` [PATCH 61/61] power: " Stephen Hemminger
@ 2026-08-20 7:31 ` Morten Brørup
61 siblings, 0 replies; 64+ messages in thread
From: Morten Brørup @ 2026-08-20 7:31 UTC (permalink / raw)
To: Stephen Hemminger, dev, Konstantin Ananyev, Bruce Richardson
About replacing rte_memcpy with memcpy()...
> From: Stephen Hemminger [mailto:stephen@networkplumber.org]
> Sent: Thursday, 20 August 2026 07.12
>
> The DPDK function rte_memcpy() only exists as an optimization
> for shortcomings in performance of libc memcpy() on some platforms.
Yes, and those platforms should benefit from it.
E.g. the vhost performance improvements for Haswell and Broadwell [1].
Where similar performance improvements implemented in the relevant compilers (GCC, Clang, MSVC)?
[1]: https://github.com/DPDK/dpdk/commit/4b42e90ef0e421dc777f2b2e377eb237cd3675fa
IMO, performance should remain a high priority for DPDK.
> Many platforms have no special rte_memcpy() and just use memcpy().
>
> But many analysis and test tools know that memcpy() is a special
> case and check for overwrite, bounds errors etc. Therefore memcpy()
> should be preferred wherever possible.
I think this is the only substantial benefit of replacing rte_memcpy() with memcpy()!
Could we reap this benefit by having special builds for such tools, where rte_memcpy() is modified to use memcpy() instead?
Then we wouldn't have to compromise on performance.
Also, rte_memcpy() used to have a pragma disabling bounds checks due to some Intel drivers using [0] instead of []; the pragma was removed from rte_memcpy() when the Intel drivers were fixed.
I'm not sufficiently familiar with analysis/test tools to say what they can detect when using memcpy() instead of the copy methods used by rte_memcpy().
>
> This patch series introduces a coccinelle script to find
> calls to rte_memcpy() where size is fixed, and change them to
> regular memcpy(). This was the starting point for this cleanup.
>
> There is also some cleanups to include rte_memcpy.h and string.h
> where needed. Often the includes were happening by some other
> header. And also removal of rte_memcpy.h where no longer needed.
>
> The result is a 46% reduction in use of rte_memcpy.
> The remaining rte_memcpy can be cleaned up later:
> - drivers with active maintenance (like mlx5);
> - changes to rte_memcpy which need benchmarking;
> - test code for rte_memcpy can be removed as last step.
>
> No functional change, no warnings in all compilers including LTO.
memcpy() does not always use inline vector instructions for fixed size copy [2].
[2]: https://inbox.dpdk.org/dev/98CBD80474FA8B44BF855DF32C47DC35F659B8@smartserver.smartshare.dk/
Another disadvantage of rte_memcpy() is the lack of developer guidance.
It is not well documented when to use rte_memcpy() and when to use memcpy().
We discussed something similar on the Tech Board meeting yesterday; it is not well documented when to use which type of "ring" (normal, RTS, HTS), so maybe we could remove one of them.
But removing an option is not an improvement, if the removed option would have been the better choice for some use cases.
PS: The general guidance for rte_memcpy() usage is something like:
rte_memcpy() only in fast path,
memcpy() everywhere else,
assignment "=" when copying fixed size structures.
^ permalink raw reply [flat|nested] 64+ messages in thread