DPDK 25.03.0-rc0
rte_trace_point_register.h
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2020 Marvell International Ltd.
3 */
4
5#ifndef _RTE_TRACE_POINT_REGISTER_H_
6#define _RTE_TRACE_POINT_REGISTER_H_
7
8#ifdef _RTE_TRACE_POINT_H_
9#error for registration, include this file first before <rte_trace_point.h>
10#endif
11
12#include <rte_per_lcore.h>
13#include <rte_trace_point.h>
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19RTE_DECLARE_PER_LCORE(volatile int, trace_point_sz);
20
21#define RTE_TRACE_POINT_REGISTER(trace, name) \
22rte_trace_point_t __rte_section("__rte_trace_point") __##trace; \
23static const char __##trace##_name[] = RTE_STR(name); \
24RTE_INIT(trace##_init) \
25{ \
26 if (!rte_trace_feature_is_enabled()) \
27 return; \
28 __rte_trace_point_register(&__##trace, __##trace##_name, \
29 (void (*)(void)) trace); \
30}
31
32#define __rte_trace_point_emit_header_generic(t) \
33 RTE_PER_LCORE(trace_point_sz) = __RTE_TRACE_EVENT_HEADER_SZ
34
35#define __rte_trace_point_emit_header_fp(t) \
36 __rte_trace_point_emit_header_generic(t)
37
38#define __rte_trace_point_emit(in, type) \
39do { \
40 RTE_BUILD_BUG_ON(sizeof(type) != sizeof(typeof(in))); \
41 __rte_trace_point_emit_field(sizeof(type), RTE_STR(in), \
42 RTE_STR(type)); \
43} while (0)
44
45#define rte_trace_point_emit_string(in) \
46do { \
47 RTE_SET_USED(in); \
48 __rte_trace_point_emit_field(__RTE_TRACE_EMIT_STRING_LEN_MAX, \
49 RTE_STR(in)"[32]", "string_bounded_t"); \
50} while (0)
51
52#define rte_trace_point_emit_blob(in, len) \
53do { \
54 RTE_SET_USED(in); \
55 __rte_trace_point_emit(len, uint8_t); \
56 __rte_trace_point_emit_field(RTE_TRACE_BLOB_LEN_MAX, \
57 RTE_STR(in)"[" RTE_STR(RTE_TRACE_BLOB_LEN_MAX)"]", \
58 RTE_STR(uint8_t)); \
59} while (0)
60
61#ifdef __cplusplus
62}
63#endif
64
65#endif /* _RTE_TRACE_POINT_REGISTER_H_ */
#define RTE_DECLARE_PER_LCORE(type, name)
Definition: rte_per_lcore.h:39