]> git.proxmox.com Git - ceph.git/blob - ceph/src/seastar/dpdk/examples/performance-thread/common/lthread_diag.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / seastar / dpdk / examples / performance-thread / common / lthread_diag.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2015 Intel Corporation
3 */
4
5 #ifndef LTHREAD_DIAG_H_
6 #define LTHREAD_DIAG_H_
7
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11
12 #include <stdint.h>
13 #include <inttypes.h>
14
15 #include <rte_log.h>
16 #include <rte_common.h>
17
18 #include "lthread_api.h"
19 #include "lthread_diag_api.h"
20
21 extern diag_callback diag_cb;
22
23 extern const char *diag_event_text[];
24 extern uint64_t diag_mask;
25
26 /* max size of name strings */
27 #define LT_MAX_NAME_SIZE 64
28
29 #if LTHREAD_DIAG
30 #define DISPLAY_OBJCACHE_QUEUES 1
31
32 /*
33 * Generate a diagnostic trace or event in the case where an object is created.
34 *
35 * The value returned by the callback is stored in the object.
36 *
37 * @ param obj
38 * pointer to the object that was created
39 * @ param ev
40 * the event code
41 *
42 */
43 #define DIAG_CREATE_EVENT(obj, ev) do { \
44 struct lthread *ct = RTE_PER_LCORE(this_sched)->current_lthread;\
45 if ((BIT(ev) & diag_mask) && (ev < LT_DIAG_EVENT_MAX)) { \
46 (obj)->diag_ref = (diag_cb)(rte_rdtsc(), \
47 ct, \
48 (ev), \
49 0, \
50 diag_event_text[(ev)], \
51 (uint64_t)obj, \
52 0); \
53 } \
54 } while (0)
55
56 /*
57 * Generate a diagnostic trace event.
58 *
59 * @ param obj
60 * pointer to the lthread, cond or mutex object
61 * @ param ev
62 * the event code
63 * @ param p1
64 * object specific value ( see lthread_diag_api.h )
65 * @ param p2
66 * object specific value ( see lthread_diag_api.h )
67 */
68 #define DIAG_EVENT(obj, ev, p1, p2) do { \
69 struct lthread *ct = RTE_PER_LCORE(this_sched)->current_lthread;\
70 if ((BIT(ev) & diag_mask) && (ev < LT_DIAG_EVENT_MAX)) { \
71 (diag_cb)(rte_rdtsc(), \
72 ct, \
73 ev, \
74 (obj)->diag_ref, \
75 diag_event_text[(ev)], \
76 (uint64_t)(p1), \
77 (uint64_t)(p2)); \
78 } \
79 } while (0)
80
81 #define DIAG_COUNT_DEFINE(x) rte_atomic64_t count_##x
82 #define DIAG_COUNT_INIT(o, x) rte_atomic64_init(&((o)->count_##x))
83 #define DIAG_COUNT_INC(o, x) rte_atomic64_inc(&((o)->count_##x))
84 #define DIAG_COUNT_DEC(o, x) rte_atomic64_dec(&((o)->count_##x))
85 #define DIAG_COUNT(o, x) rte_atomic64_read(&((o)->count_##x))
86
87 #define DIAG_USED
88
89 #else
90
91 /* no diagnostics configured */
92
93 #define DISPLAY_OBJCACHE_QUEUES 0
94
95 #define DIAG_CREATE_EVENT(obj, ev)
96 #define DIAG_EVENT(obj, ev, p1, p)
97
98 #define DIAG_COUNT_DEFINE(x)
99 #define DIAG_COUNT_INIT(o, x) do {} while (0)
100 #define DIAG_COUNT_INC(o, x) do {} while (0)
101 #define DIAG_COUNT_DEC(o, x) do {} while (0)
102 #define DIAG_COUNT(o, x) 0
103
104 #define DIAG_USED __rte_unused
105
106 #endif /* LTHREAD_DIAG */
107
108 #ifdef __cplusplus
109 }
110 #endif
111
112 #endif /* LTHREAD_DIAG_H_ */