[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] 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#staging
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |