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