DPDK-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
	Anoob Joseph <anoobj@marvell.com>,
	Volodymyr Fialko <vfialko@marvell.com>
Subject: [PATCH v2 18/68] pdcp: replace use of rte_memcpy
Date: Fri, 21 Aug 2026 12:24:13 -0700	[thread overview]
Message-ID: <20260821192646.146382-19-stephen@networkplumber.org> (raw)
In-Reply-To: <20260821192646.146382-1-stephen@networkplumber.org>

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


  parent reply	other threads:[~2026-08-21 19:29 UTC|newest]

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

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=20260821192646.146382-19-stephen@networkplumber.org \
    --to=stephen@networkplumber.org \
    --cc=anoobj@marvell.com \
    --cc=dev@dpdk.org \
    --cc=vfialko@marvell.com \
    /path/to/YOUR_REPLY

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

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