|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/trace: Introduce new API
commit e978b462ec9a74ec90788fca0b9d37707e1f79c4
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Mon Sep 20 13:36:12 2021 +0100
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Mon May 20 18:29:44 2024 +0100
xen/trace: Introduce new API
trace() and trace_time(), in function form for struct arguments, and macro
form for simple uint32_t list arguments.
This will be used to clean up the mess of macros which exists throughout the
codebase, as well as eventually dropping __trace_var().
There is intentionally no macro to split a 64-bit parameter in the new API,
for MISRA reasons.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxx>
---
xen/common/trace.c | 5 +++++
xen/include/xen/trace.h | 30 ++++++++++++++++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/xen/common/trace.c b/xen/common/trace.c
index 4e7b080e61..c94ce1f7dc 100644
--- a/xen/common/trace.c
+++ b/xen/common/trace.c
@@ -808,6 +808,11 @@ unlock:
tasklet_schedule(&trace_notify_dom0_tasklet);
}
+void trace(uint32_t event, unsigned int extra, const void *extra_data)
+{
+ __trace_var(event, event & TRC_HD_CYCLE_FLAG, extra, extra_data);
+}
+
void __trace_hypercall(uint32_t event, unsigned long op,
const xen_ulong_t *args)
{
diff --git a/xen/include/xen/trace.h b/xen/include/xen/trace.h
index 055883287e..9dc7e3d621 100644
--- a/xen/include/xen/trace.h
+++ b/xen/include/xen/trace.h
@@ -37,6 +37,9 @@ int tb_control(struct xen_sysctl_tbuf_op *tbc);
int trace_will_trace_event(u32 event);
+/* Create a trace record, with pre-constructed additional parameters. */
+void trace(uint32_t event, unsigned int extra, const void *extra_data);
+
void __trace_var(uint32_t event, bool cycles, unsigned int extra, const void
*);
static inline void trace_var(uint32_t event, bool cycles, unsigned int extra,
@@ -66,6 +69,9 @@ static inline int trace_will_trace_event(uint32_t event)
return 0;
}
+static inline void trace(
+ uint32_t event, unsigned int extra, const void *extra_data) {}
+
static inline void trace_var(uint32_t event, bool cycles, unsigned int extra,
const void *extra_data) {}
static inline void __trace_var(uint32_t event, bool cycles, unsigned int extra,
@@ -74,6 +80,30 @@ static inline void __trace_hypercall(uint32_t event,
unsigned long op,
const xen_ulong_t *args) {}
#endif /* CONFIG_TRACEBUFFER */
+/* Create a trace record with time included. */
+static inline void trace_time(
+ uint32_t event, unsigned int extra, const void *extra_data)
+{
+ trace(event | TRC_HD_CYCLE_FLAG, extra, extra_data);
+}
+
+/*
+ * Create a trace record, packaging up to 7 additional parameters into a
+ * uint32_t array.
+ */
+#define TRACE(_e, ...) \
+ do { \
+ if ( unlikely(tb_init_done) ) \
+ { \
+ uint32_t _d[] = { __VA_ARGS__ }; \
+ BUILD_BUG_ON(ARRAY_SIZE(_d) > TRACE_EXTRA_MAX); \
+ trace(_e, sizeof(_d), sizeof(_d) ? _d : NULL); \
+ } \
+ } while ( 0 )
+
+/* Create a trace record with time included. */
+#define TRACE_TIME(_e, ...) TRACE((_e) | TRC_HD_CYCLE_FLAG, ## __VA_ARGS__)
+
/* Convenience macros for calling the trace function. */
#define TRACE_0D(_e) \
do { \
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |