xref: /linux/tools/perf/util/bpf_skel/lock_data.h (revision 7685b334d1e4927cc73b62c65293ba65748d9c52)
1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 /* Data structures shared between BPF and tools. */
3 #ifndef UTIL_BPF_SKEL_LOCK_DATA_H
4 #define UTIL_BPF_SKEL_LOCK_DATA_H
5 
6 struct tstamp_data {
7 	u64 timestamp;
8 	u64 lock;
9 	u32 flags;
10 	s32 stack_id;
11 };
12 
13 struct contention_key {
14 	s32 stack_id;
15 	u32 pid;
16 	u64 lock_addr_or_cgroup;
17 };
18 
19 #define TASK_COMM_LEN  16
20 
21 struct contention_task_data {
22 	char comm[TASK_COMM_LEN];
23 };
24 
25 /* default buffer size */
26 #define MAX_ENTRIES  16384
27 
28 /*
29  * Upper bits of the flags in the contention_data are used to identify
30  * some well-known locks which do not have symbols (non-global locks).
31  */
32 #define LCD_F_MMAP_LOCK		(1U << 31)
33 #define LCD_F_SIGHAND_LOCK	(1U << 30)
34 
35 #define LCB_F_SLAB_ID_SHIFT	16
36 #define LCB_F_SLAB_ID_START	(1U << 16)
37 #define LCB_F_SLAB_ID_END	(1U << 26)
38 #define LCB_F_SLAB_ID_MASK	0x03FF0000U
39 
40 #define LCB_F_TYPE_MAX		(1U << 7)
41 #define LCB_F_TYPE_MASK		0x0000007FU
42 
43 #define SLAB_NAME_MAX  28
44 
45 struct contention_data {
46 	u64 total_time;
47 	u64 min_time;
48 	u64 max_time;
49 	u32 count;
50 	u32 flags;
51 };
52 
53 enum lock_aggr_mode {
54 	LOCK_AGGR_ADDR = 0,
55 	LOCK_AGGR_TASK,
56 	LOCK_AGGR_CALLER,
57 	LOCK_AGGR_CGROUP,
58 };
59 
60 enum lock_class_sym {
61 	LOCK_CLASS_NONE,
62 	LOCK_CLASS_RQLOCK,
63 };
64 
65 struct slab_cache_data {
66 	u32 id;
67 	char name[SLAB_NAME_MAX];
68 };
69 
70 #endif /* UTIL_BPF_SKEL_LOCK_DATA_H */
71