From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: Chengwen Feng <fengchengwen@huawei.com>,
Kevin Laatz <kevin.laatz@intel.com>,
Bruce Richardson <bruce.richardson@intel.com>,
Jerin Jacob <jerinj@marvell.com>,
Sunil Kumar Kori <skori@marvell.com>,
Tyler Retzlaff <roretzla@linux.microsoft.com>
Subject: [PATCH v4 3/5] trace: support dereferencing pointers
Date: Tue, 4 Mar 2025 17:06:31 +0100 [thread overview]
Message-ID: <20250304160633.385185-4-david.marchand@redhat.com> (raw)
In-Reply-To: <20250304160633.385185-1-david.marchand@redhat.com>
Rather than use an intermediate variable, add new helpers that handle
dereferencing pointers.
Update dmadev traces accordingly (and adjust the emitter type).
Signed-off-by: David Marchand <david.marchand@redhat.com>
---
Changes since v3:
- started from scratch with different approach, added new helpers
to avoid touching ctf metadata,
Changes since v2:
- split this change out of patch 2, as it required updating CTF metadata
fixup,
---
lib/dmadev/rte_dmadev_trace_fp.h | 12 ++---
lib/eal/include/rte_trace_point.h | 52 ++++++++++++++--------
lib/eal/include/rte_trace_point_register.h | 9 ++--
3 files changed, 41 insertions(+), 32 deletions(-)
diff --git a/lib/dmadev/rte_dmadev_trace_fp.h b/lib/dmadev/rte_dmadev_trace_fp.h
index f5b96838bc..f2656c6726 100644
--- a/lib/dmadev/rte_dmadev_trace_fp.h
+++ b/lib/dmadev/rte_dmadev_trace_fp.h
@@ -37,10 +37,9 @@ RTE_TRACE_POINT_FP(
enum rte_dma_vchan_status __status = 0;
status = &__status;
#endif /* _RTE_TRACE_POINT_REGISTER_H_ */
- int vchan_status = *status;
rte_trace_point_emit_i16(dev_id);
rte_trace_point_emit_u16(vchan);
- rte_trace_point_emit_int(vchan_status);
+ rte_trace_point_emit_int_ptr(status);
rte_trace_point_emit_int(ret);
)
@@ -107,13 +106,11 @@ RTE_TRACE_POINT_FP(
last_idx = &__last_idx;
has_error = &__has_error;
#endif /* _RTE_TRACE_POINT_REGISTER_H_ */
- int has_error_val = *has_error;
- int last_idx_val = *last_idx;
rte_trace_point_emit_i16(dev_id);
rte_trace_point_emit_u16(vchan);
rte_trace_point_emit_u16(nb_cpls);
- rte_trace_point_emit_int(last_idx_val);
- rte_trace_point_emit_int(has_error_val);
+ rte_trace_point_emit_u16_ptr(last_idx);
+ rte_trace_point_emit_u8_ptr(has_error);
rte_trace_point_emit_u16(ret);
)
@@ -126,11 +123,10 @@ RTE_TRACE_POINT_FP(
uint16_t __last_idx = 0;
last_idx = &__last_idx;
#endif /* _RTE_TRACE_POINT_REGISTER_H_ */
- int last_idx_val = *last_idx;
rte_trace_point_emit_i16(dev_id);
rte_trace_point_emit_u16(vchan);
rte_trace_point_emit_u16(nb_cpls);
- rte_trace_point_emit_int(last_idx_val);
+ rte_trace_point_emit_u16_ptr(last_idx);
rte_trace_point_emit_ptr(status);
rte_trace_point_emit_u16(ret);
)
diff --git a/lib/eal/include/rte_trace_point.h b/lib/eal/include/rte_trace_point.h
index b24db3b6da..0780460759 100644
--- a/lib/eal/include/rte_trace_point.h
+++ b/lib/eal/include/rte_trace_point.h
@@ -376,10 +376,10 @@ do { \
return; \
__rte_trace_point_emit_header_generic(t)
-#define __rte_trace_point_emit(in, type) \
+#define __rte_trace_point_emit(name, in, type) \
do { \
- memcpy(mem, &(in), sizeof(in)); \
- mem = RTE_PTR_ADD(mem, sizeof(in)); \
+ memcpy(mem, in, sizeof(*in)); \
+ mem = RTE_PTR_ADD(mem, sizeof(*in)); \
} while (0)
#define rte_trace_point_emit_string(in) \
@@ -396,7 +396,7 @@ do { \
return; \
if (len > RTE_TRACE_BLOB_LEN_MAX) \
len = RTE_TRACE_BLOB_LEN_MAX; \
- __rte_trace_point_emit(len, uint8_t); \
+ __rte_trace_point_emit(RTE_STR(len), &len, uint8_t); \
memcpy(mem, in, len); \
memset(RTE_PTR_ADD(mem, len), 0, RTE_TRACE_BLOB_LEN_MAX - len); \
mem = RTE_PTR_ADD(mem, RTE_TRACE_BLOB_LEN_MAX); \
@@ -406,7 +406,7 @@ do { \
#define __rte_trace_point_emit_header_generic(t) RTE_SET_USED(t)
#define __rte_trace_point_emit_header_fp(t) RTE_SET_USED(t)
-#define __rte_trace_point_emit(in, type) RTE_SET_USED(in)
+#define __rte_trace_point_emit(name, in, type) RTE_SET_USED(in)
#define rte_trace_point_emit_string(in) RTE_SET_USED(in)
#define rte_trace_point_emit_blob(in, len) \
do { \
@@ -418,20 +418,34 @@ do { \
#endif /* ALLOW_EXPERIMENTAL_API */
#endif /* _RTE_TRACE_POINT_REGISTER_H_ */
-#define rte_trace_point_emit_u64(in) __rte_trace_point_emit(in, uint64_t)
-#define rte_trace_point_emit_i64(in) __rte_trace_point_emit(in, int64_t)
-#define rte_trace_point_emit_u32(in) __rte_trace_point_emit(in, uint32_t)
-#define rte_trace_point_emit_i32(in) __rte_trace_point_emit(in, int32_t)
-#define rte_trace_point_emit_u16(in) __rte_trace_point_emit(in, uint16_t)
-#define rte_trace_point_emit_i16(in) __rte_trace_point_emit(in, int16_t)
-#define rte_trace_point_emit_u8(in) __rte_trace_point_emit(in, uint8_t)
-#define rte_trace_point_emit_i8(in) __rte_trace_point_emit(in, int8_t)
-#define rte_trace_point_emit_int(in) __rte_trace_point_emit(in, int32_t)
-#define rte_trace_point_emit_long(in) __rte_trace_point_emit(in, long)
-#define rte_trace_point_emit_size_t(in) __rte_trace_point_emit(in, size_t)
-#define rte_trace_point_emit_float(in) __rte_trace_point_emit(in, float)
-#define rte_trace_point_emit_double(in) __rte_trace_point_emit(in, double)
-#define rte_trace_point_emit_ptr(in) __rte_trace_point_emit(in, uintptr_t)
+#define rte_trace_point_emit_u64(in) __rte_trace_point_emit(RTE_STR(in), &in, uint64_t)
+#define rte_trace_point_emit_i64(in) __rte_trace_point_emit(RTE_STR(in), &in, int64_t)
+#define rte_trace_point_emit_u32(in) __rte_trace_point_emit(RTE_STR(in), &in, uint32_t)
+#define rte_trace_point_emit_i32(in) __rte_trace_point_emit(RTE_STR(in), &in, int32_t)
+#define rte_trace_point_emit_u16(in) __rte_trace_point_emit(RTE_STR(in), &in, uint16_t)
+#define rte_trace_point_emit_i16(in) __rte_trace_point_emit(RTE_STR(in), &in, int16_t)
+#define rte_trace_point_emit_u8(in) __rte_trace_point_emit(RTE_STR(in), &in, uint8_t)
+#define rte_trace_point_emit_i8(in) __rte_trace_point_emit(RTE_STR(in), &in, int8_t)
+#define rte_trace_point_emit_int(in) __rte_trace_point_emit(RTE_STR(in), &in, int32_t)
+#define rte_trace_point_emit_long(in) __rte_trace_point_emit(RTE_STR(in), &in, long)
+#define rte_trace_point_emit_size_t(in) __rte_trace_point_emit(RTE_STR(in), &in, size_t)
+#define rte_trace_point_emit_float(in) __rte_trace_point_emit(RTE_STR(in), &in, float)
+#define rte_trace_point_emit_double(in) __rte_trace_point_emit(RTE_STR(in), &in, double)
+#define rte_trace_point_emit_ptr(in) __rte_trace_point_emit(RTE_STR(in), &in, uintptr_t)
+
+#define rte_trace_point_emit_u64_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, uint64_t)
+#define rte_trace_point_emit_i64_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, int64_t)
+#define rte_trace_point_emit_u32_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, uint32_t)
+#define rte_trace_point_emit_i32_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, int32_t)
+#define rte_trace_point_emit_u16_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, uint16_t)
+#define rte_trace_point_emit_i16_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, int16_t)
+#define rte_trace_point_emit_u8_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, uint8_t)
+#define rte_trace_point_emit_i8_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, int8_t)
+#define rte_trace_point_emit_int_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, int32_t)
+#define rte_trace_point_emit_long_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, long)
+#define rte_trace_point_emit_size_t_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, size_t)
+#define rte_trace_point_emit_float_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, float)
+#define rte_trace_point_emit_double_ptr(in) __rte_trace_point_emit(RTE_STR(in)"_val", in, double)
#endif /* __DOXYGEN__ */
diff --git a/lib/eal/include/rte_trace_point_register.h b/lib/eal/include/rte_trace_point_register.h
index 748c931830..ff861c1fba 100644
--- a/lib/eal/include/rte_trace_point_register.h
+++ b/lib/eal/include/rte_trace_point_register.h
@@ -35,11 +35,10 @@ RTE_INIT(trace##_init) \
#define __rte_trace_point_emit_header_fp(t) \
__rte_trace_point_emit_header_generic(t)
-#define __rte_trace_point_emit(in, type) \
+#define __rte_trace_point_emit(name, in, type) \
do { \
- RTE_BUILD_BUG_ON(sizeof(type) != sizeof(typeof(in))); \
- __rte_trace_point_emit_field(sizeof(type), RTE_STR(in), \
- RTE_STR(type)); \
+ RTE_BUILD_BUG_ON(sizeof(type) != sizeof(typeof(*in))); \
+ __rte_trace_point_emit_field(sizeof(type), name, RTE_STR(type)); \
} while (0)
#define rte_trace_point_emit_string(in) \
@@ -52,7 +51,7 @@ do { \
#define rte_trace_point_emit_blob(in, len) \
do { \
RTE_SET_USED(in); \
- __rte_trace_point_emit(len, uint8_t); \
+ __rte_trace_point_emit(RTE_STR(len), &len, 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)); \
--
2.48.1
next prev parent reply other threads:[~2025-03-04 16:07 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-24 16:14 [PATCH 1/2] trace: support expression for blob length David Marchand
2025-01-24 16:14 ` [PATCH 2/2] dmadev: avoid copies in tracepoints David Marchand
2025-01-27 8:25 ` [EXTERNAL] [PATCH 1/2] trace: support expression for blob length Jerin Jacob
2025-01-30 14:58 ` [PATCH v2 1/3] " David Marchand
2025-01-30 14:58 ` [PATCH v2 2/3] dmadev: avoid copies in tracepoints David Marchand
2025-01-30 14:58 ` [PATCH v2 3/3] trace: fix undefined behavior in register David Marchand
2025-01-30 19:10 ` Stephen Hemminger
2025-01-30 21:06 ` David Marchand
2025-02-07 8:49 ` David Marchand
2025-02-07 11:39 ` [EXTERNAL] " Sunil Kumar Kori
2025-02-10 9:02 ` Sunil Kumar Kori
2025-02-10 9:36 ` David Marchand
2025-02-10 13:37 ` [EXTERNAL] " Jerin Jacob
2025-02-10 14:04 ` David Marchand
2025-02-10 13:38 ` [EXTERNAL] [PATCH v2 1/3] trace: support expression for blob length Jerin Jacob
2025-02-10 17:44 ` [PATCH v3 0/6] Trace point framework enhancement for dmadev David Marchand
2025-02-10 17:44 ` [PATCH v3 1/6] ci: check traces validity David Marchand
2025-02-10 17:44 ` [PATCH v3 2/6] trace: support dereferencing arguments David Marchand
2025-02-11 8:44 ` [EXTERNAL] " Sunil Kumar Kori
2025-02-11 9:53 ` David Marchand
2025-02-12 5:08 ` Sunil Kumar Kori
2025-02-10 17:44 ` [PATCH v3 3/6] trace: support expression for blob length David Marchand
2025-02-10 17:44 ` [PATCH v3 4/6] trace: support dumping binary inside a struct David Marchand
2025-02-11 8:52 ` [EXTERNAL] " Sunil Kumar Kori
2025-02-11 9:54 ` David Marchand
2025-02-12 5:14 ` Sunil Kumar Kori
2025-02-18 14:28 ` David Marchand
2025-02-19 11:17 ` Jerin Jacob
2025-02-10 17:44 ` [PATCH v3 5/6] dmadev: avoid copies in tracepoints David Marchand
2025-02-10 17:44 ` [PATCH v3 6/6] trace: fix undefined behavior in register David Marchand
2025-02-11 8:41 ` [EXTERNAL] [PATCH v3 0/6] Trace point framework enhancement for dmadev Sunil Kumar Kori
2025-03-04 16:06 ` [PATCH v4 0/5] " David Marchand
2025-03-04 16:06 ` [PATCH v4 1/5] ci: check traces validity David Marchand
2025-03-04 16:06 ` [PATCH v4 2/5] dmadev: avoid copies in tracepoints David Marchand
2025-03-04 16:06 ` David Marchand [this message]
2025-03-05 5:19 ` [EXTERNAL] [PATCH v4 3/5] trace: support dereferencing pointers Sunil Kumar Kori
2025-03-04 16:06 ` [PATCH v4 4/5] trace: support expression for blob length David Marchand
2025-03-05 5:20 ` [EXTERNAL] " Sunil Kumar Kori
2025-03-04 16:06 ` [PATCH v4 5/5] trace: fix undefined behavior in register David Marchand
2025-03-05 5:20 ` [EXTERNAL] " Sunil Kumar Kori
2025-03-05 17:49 ` [PATCH v4 0/5] Trace point framework enhancement for dmadev 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=20250304160633.385185-4-david.marchand@redhat.com \
--to=david.marchand@redhat.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=fengchengwen@huawei.com \
--cc=jerinj@marvell.com \
--cc=kevin.laatz@intel.com \
--cc=roretzla@linux.microsoft.com \
--cc=skori@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.