Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright(C) 2020 Marvell International Ltd. 3 : : */ 4 : : 5 : : #ifndef __EAL_TRACE_H 6 : : #define __EAL_TRACE_H 7 : : 8 : : #include <rte_cycles.h> 9 : : #include <rte_log.h> 10 : : #include <rte_malloc.h> 11 : : #include <rte_spinlock.h> 12 : : #include <rte_trace.h> 13 : : #include <rte_trace_point.h> 14 : : #include <rte_uuid.h> 15 : : 16 : : #include "eal_private.h" 17 : : #include "eal_thread.h" 18 : : 19 : : #define trace_err(...) \ 20 : : RTE_LOG_LINE_PREFIX(ERR, EAL, "%s():%u ", __func__ RTE_LOG_COMMA __LINE__, __VA_ARGS__) 21 : : 22 : : #define trace_crit(...) \ 23 : : RTE_LOG_LINE_PREFIX(CRIT, EAL, "%s():%u ", __func__ RTE_LOG_COMMA __LINE__, __VA_ARGS__) 24 : : 25 : : #define TRACE_CTF_MAGIC 0xC1FC1FC1 26 : : #define TRACE_MAX_ARGS 32 27 : : 28 : : struct trace_point { 29 : : STAILQ_ENTRY(trace_point) next; 30 : : rte_trace_point_t *handle; 31 : : const char *name; 32 : : char *ctf_field; 33 : : }; 34 : : 35 : : enum trace_area_e { 36 : : TRACE_AREA_HEAP, 37 : : TRACE_AREA_HUGEPAGE, 38 : : }; 39 : : 40 : : struct thread_mem_meta { 41 : : void *mem; 42 : : enum trace_area_e area; 43 : : }; 44 : : 45 : : struct trace_arg { 46 : : STAILQ_ENTRY(trace_arg) next; 47 : : char *val; 48 : : }; 49 : : 50 : : struct trace { 51 : : char *dir; 52 : : int register_errno; 53 : : RTE_ATOMIC(uint32_t) status; 54 : : enum rte_trace_mode mode; 55 : : rte_uuid_t uuid; 56 : : uint32_t buff_len; 57 : : STAILQ_HEAD(, trace_arg) args; 58 : : uint32_t nb_trace_points; 59 : : uint32_t nb_trace_mem_list; 60 : : struct thread_mem_meta *lcore_meta; 61 : : uint64_t epoch_sec; 62 : : uint64_t epoch_nsec; 63 : : uint64_t uptime_ticks; 64 : : char *ctf_meta; 65 : : uint32_t ctf_meta_offset_freq; 66 : : uint32_t ctf_meta_offset_freq_off_s; 67 : : uint32_t ctf_meta_offset_freq_off; 68 : : RTE_ATOMIC(uint16_t) ctf_fixup_done; 69 : : rte_spinlock_t lock; 70 : : }; 71 : : 72 : : /* Helper functions */ 73 : : static inline uint16_t 74 : : trace_id_get(rte_trace_point_t *trace) 75 : : { 76 [ - + - + : 105592 : return (*trace & __RTE_TRACE_FIELD_ID_MASK) >> - + ] 77 : : __RTE_TRACE_FIELD_ID_SHIFT; 78 : : } 79 : : 80 : : static inline size_t 81 : : trace_mem_sz(uint32_t len) 82 : : { 83 [ - + ]: 7 : return len + sizeof(struct __rte_trace_header); 84 : : } 85 : : 86 : : /* Trace object functions */ 87 : : struct trace *trace_obj_get(void); 88 : : 89 : : /* Trace point list functions */ 90 : : STAILQ_HEAD(trace_point_head, trace_point); 91 : : struct trace_point_head *trace_list_head_get(void); 92 : : 93 : : /* Util functions */ 94 : : const char *trace_mode_to_string(enum rte_trace_mode mode); 95 : : const char *trace_area_to_string(enum trace_area_e area); 96 : : int trace_args_apply(const char *arg); 97 : : void trace_bufsz_args_apply(void); 98 : : bool trace_has_duplicate_entry(void); 99 : : void trace_uuid_generate(void); 100 : : int trace_metadata_create(void); 101 : : void trace_metadata_destroy(void); 102 : : char *trace_metadata_fixup_field(const char *field); 103 : : int trace_epoch_time_save(void); 104 : : void trace_mem_free(void); 105 : : void trace_mem_per_thread_free(void); 106 : : 107 : : /* EAL interface */ 108 : : int eal_trace_init(void); 109 : : void eal_trace_fini(void); 110 : : int eal_trace_args_save(const char *val); 111 : : void eal_trace_args_free(void); 112 : : int eal_trace_dir_args_save(const char *val); 113 : : int eal_trace_mode_args_save(const char *val); 114 : : int eal_trace_bufsz_args_save(const char *val); 115 : : 116 : : #endif /* __EAL_TRACE_H */