From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: Jerin Jacob <jerinj@marvell.com>,
Sunil Kumar Kori <skori@marvell.com>,
Tyler Retzlaff <roretzla@linux.microsoft.com>,
Thomas Monjalon <thomas@monjalon.net>,
Ferruh Yigit <ferruh.yigit@amd.com>,
Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Subject: [PATCH 1/2] trace: support expression for blob length
Date: Fri, 24 Jan 2025 17:14:07 +0100 [thread overview]
Message-ID: <20250124161408.310581-1-david.marchand@redhat.com> (raw)
Support any expression as a blob length by using an intermediate
variable in the trace point emitter itself.
This also avoids any side effect on the passed variable.
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
lib/eal/include/rte_trace_point.h | 11 +++++----
lib/eal/include/rte_trace_point_register.h | 3 ++-
lib/ethdev/ethdev_trace.h | 27 ++++++----------------
3 files changed, 15 insertions(+), 26 deletions(-)
diff --git a/lib/eal/include/rte_trace_point.h b/lib/eal/include/rte_trace_point.h
index b24db3b6da..62a972db92 100644
--- a/lib/eal/include/rte_trace_point.h
+++ b/lib/eal/include/rte_trace_point.h
@@ -392,13 +392,14 @@ do { \
#define rte_trace_point_emit_blob(in, len) \
do { \
+ uint8_t size = len; \
if (unlikely(in == NULL)) \
return; \
- if (len > RTE_TRACE_BLOB_LEN_MAX) \
- len = RTE_TRACE_BLOB_LEN_MAX; \
- __rte_trace_point_emit(len, uint8_t); \
- memcpy(mem, in, len); \
- memset(RTE_PTR_ADD(mem, len), 0, RTE_TRACE_BLOB_LEN_MAX - len); \
+ if (size > RTE_TRACE_BLOB_LEN_MAX) \
+ size = RTE_TRACE_BLOB_LEN_MAX; \
+ __rte_trace_point_emit(size, uint8_t); \
+ memcpy(mem, in, size); \
+ memset(RTE_PTR_ADD(mem, size), 0, RTE_TRACE_BLOB_LEN_MAX - size); \
mem = RTE_PTR_ADD(mem, RTE_TRACE_BLOB_LEN_MAX); \
} while (0)
diff --git a/lib/eal/include/rte_trace_point_register.h b/lib/eal/include/rte_trace_point_register.h
index 748c931830..cb1015eb88 100644
--- a/lib/eal/include/rte_trace_point_register.h
+++ b/lib/eal/include/rte_trace_point_register.h
@@ -51,8 +51,9 @@ do { \
#define rte_trace_point_emit_blob(in, len) \
do { \
+ uint8_t size = len; \
RTE_SET_USED(in); \
- __rte_trace_point_emit(len, uint8_t); \
+ __rte_trace_point_emit(size, uint8_t); \
__rte_trace_point_emit_field(RTE_TRACE_BLOB_LEN_MAX, \
RTE_STR(in)"[" RTE_STR(RTE_TRACE_BLOB_LEN_MAX)"]", \
RTE_STR(uint8_t)); \
diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h
index 5951ae2d99..c65b78590a 100644
--- a/lib/ethdev/ethdev_trace.h
+++ b/lib/ethdev/ethdev_trace.h
@@ -860,10 +860,8 @@ RTE_TRACE_POINT(
rte_ethdev_trace_mac_addr_add,
RTE_TRACE_POINT_ARGS(uint16_t port_id,
const struct rte_ether_addr *addr, uint32_t pool, int ret),
- uint8_t len = RTE_ETHER_ADDR_LEN;
-
rte_trace_point_emit_u16(port_id);
- rte_trace_point_emit_blob(addr->addr_bytes, len);
+ rte_trace_point_emit_blob(addr->addr_bytes, RTE_ETHER_ADDR_LEN);
rte_trace_point_emit_u32(pool);
rte_trace_point_emit_int(ret);
)
@@ -872,20 +870,16 @@ RTE_TRACE_POINT(
rte_ethdev_trace_mac_addr_remove,
RTE_TRACE_POINT_ARGS(uint16_t port_id,
const struct rte_ether_addr *addr),
- uint8_t len = RTE_ETHER_ADDR_LEN;
-
rte_trace_point_emit_u16(port_id);
- rte_trace_point_emit_blob(addr->addr_bytes, len);
+ rte_trace_point_emit_blob(addr->addr_bytes, RTE_ETHER_ADDR_LEN);
)
RTE_TRACE_POINT(
rte_ethdev_trace_default_mac_addr_set,
RTE_TRACE_POINT_ARGS(uint16_t port_id,
const struct rte_ether_addr *addr),
- uint8_t len = RTE_ETHER_ADDR_LEN;
-
rte_trace_point_emit_u16(port_id);
- rte_trace_point_emit_blob(addr->addr_bytes, len);
+ rte_trace_point_emit_blob(addr->addr_bytes, RTE_ETHER_ADDR_LEN);
)
RTE_TRACE_POINT(
@@ -1102,11 +1096,9 @@ RTE_TRACE_POINT(
RTE_TRACE_POINT_ARGS(uint16_t port_id,
const struct rte_ether_addr *mc_addr_set, uint32_t nb_mc_addr,
int ret),
- uint8_t len = nb_mc_addr * RTE_ETHER_ADDR_LEN;
-
rte_trace_point_emit_u16(port_id);
rte_trace_point_emit_u32(nb_mc_addr);
- rte_trace_point_emit_blob(mc_addr_set, len);
+ rte_trace_point_emit_blob(mc_addr_set, nb_mc_addr * RTE_ETHER_ADDR_LEN);
rte_trace_point_emit_int(ret);
)
@@ -1214,13 +1206,10 @@ RTE_TRACE_POINT(
rte_ethdev_trace_get_dcb_info,
RTE_TRACE_POINT_ARGS(uint16_t port_id,
const struct rte_eth_dcb_info *dcb_info, int ret),
- uint8_t num_user_priorities = RTE_ETH_DCB_NUM_USER_PRIORITIES;
- uint8_t num_tcs = RTE_ETH_DCB_NUM_TCS;
-
rte_trace_point_emit_u16(port_id);
rte_trace_point_emit_u8(dcb_info->nb_tcs);
- rte_trace_point_emit_blob(dcb_info->prio_tc, num_user_priorities);
- rte_trace_point_emit_blob(dcb_info->tc_bws, num_tcs);
+ rte_trace_point_emit_blob(dcb_info->prio_tc, RTE_ETH_DCB_NUM_USER_PRIORITIES);
+ rte_trace_point_emit_blob(dcb_info->tc_bws, RTE_ETH_DCB_NUM_TCS);
rte_trace_point_emit_int(ret);
)
@@ -2126,10 +2115,8 @@ RTE_TRACE_POINT_FP(
rte_eth_trace_macaddr_get,
RTE_TRACE_POINT_ARGS(uint16_t port_id,
const struct rte_ether_addr *mac_addr),
- uint8_t len = RTE_ETHER_ADDR_LEN;
-
rte_trace_point_emit_u16(port_id);
- rte_trace_point_emit_blob(mac_addr->addr_bytes, len);
+ rte_trace_point_emit_blob(mac_addr->addr_bytes, RTE_ETHER_ADDR_LEN);
)
/* Called in loop in examples/ip_pipeline */
--
2.47.1
next reply other threads:[~2025-01-24 16:25 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-24 16:14 David Marchand [this message]
2025-01-24 16:14 ` [PATCH 2/2] dmadev: avoid copies in tracepoints David Marchand
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=20250124161408.310581-1-david.marchand@redhat.com \
--to=david.marchand@redhat.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=jerinj@marvell.com \
--cc=roretzla@linux.microsoft.com \
--cc=skori@marvell.com \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).