Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / perf / util / bpf_skel / vmlinux / vmlinux.h
blob4dcad7b682bdee9c0d4f30389a227b97fc2648c2
1 #ifndef __VMLINUX_H
2 #define __VMLINUX_H
4 #include <linux/stddef.h> // for define __always_inline
5 #include <linux/bpf.h>
6 #include <linux/types.h>
7 #include <linux/perf_event.h>
8 #include <stdbool.h>
10 // non-UAPI kernel data structures, used in the .bpf.c BPF tool component.
12 // Just the fields used in these tools preserving the access index so that
13 // libbpf can fixup offsets with the ones used in the kernel when loading the
14 // BPF bytecode, if they differ from what is used here.
16 typedef __u8 u8;
17 typedef __u32 u32;
18 typedef __s32 s32;
19 typedef __u64 u64;
20 typedef __s64 s64;
22 typedef int pid_t;
24 typedef __s64 time64_t;
26 struct timespec64 {
27 time64_t tv_sec;
28 long int tv_nsec;
31 enum cgroup_subsys_id {
32 perf_event_cgrp_id = 8,
35 enum {
36 HI_SOFTIRQ = 0,
37 TIMER_SOFTIRQ,
38 NET_TX_SOFTIRQ,
39 NET_RX_SOFTIRQ,
40 BLOCK_SOFTIRQ,
41 IRQ_POLL_SOFTIRQ,
42 TASKLET_SOFTIRQ,
43 SCHED_SOFTIRQ,
44 HRTIMER_SOFTIRQ,
45 RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */
47 NR_SOFTIRQS
50 typedef struct {
51 s64 counter;
52 } __attribute__((preserve_access_index)) atomic64_t;
54 typedef atomic64_t atomic_long_t;
56 struct raw_spinlock {
57 int rawlock;
58 } __attribute__((preserve_access_index));
60 typedef struct raw_spinlock raw_spinlock_t;
62 typedef struct {
63 struct raw_spinlock rlock;
64 } __attribute__((preserve_access_index)) spinlock_t;
66 struct sighand_struct {
67 spinlock_t siglock;
68 } __attribute__((preserve_access_index));
70 struct rw_semaphore {
71 atomic_long_t owner;
72 } __attribute__((preserve_access_index));
74 struct mutex {
75 atomic_long_t owner;
76 } __attribute__((preserve_access_index));
78 struct kernfs_node {
79 u64 id;
80 } __attribute__((preserve_access_index));
82 struct cgroup {
83 struct kernfs_node *kn;
84 int level;
85 } __attribute__((preserve_access_index));
87 struct cgroup_subsys_state {
88 struct cgroup *cgroup;
89 } __attribute__((preserve_access_index));
91 struct css_set {
92 struct cgroup_subsys_state *subsys[13];
93 struct cgroup *dfl_cgrp;
94 } __attribute__((preserve_access_index));
96 struct mm_struct {
97 struct rw_semaphore mmap_lock;
98 } __attribute__((preserve_access_index));
100 struct task_struct {
101 unsigned int flags;
102 struct mm_struct *mm;
103 pid_t pid;
104 pid_t tgid;
105 char comm[16];
106 struct sighand_struct *sighand;
107 struct css_set *cgroups;
108 } __attribute__((preserve_access_index));
110 struct trace_entry {
111 short unsigned int type;
112 unsigned char flags;
113 unsigned char preempt_count;
114 int pid;
115 } __attribute__((preserve_access_index));
117 struct trace_event_raw_irq_handler_entry {
118 struct trace_entry ent;
119 int irq;
120 u32 __data_loc_name;
121 char __data[];
122 } __attribute__((preserve_access_index));
124 struct trace_event_raw_irq_handler_exit {
125 struct trace_entry ent;
126 int irq;
127 int ret;
128 char __data[];
129 } __attribute__((preserve_access_index));
131 struct trace_event_raw_softirq {
132 struct trace_entry ent;
133 unsigned int vec;
134 char __data[];
135 } __attribute__((preserve_access_index));
137 struct trace_event_raw_workqueue_execute_start {
138 struct trace_entry ent;
139 void *work;
140 void *function;
141 char __data[];
142 } __attribute__((preserve_access_index));
144 struct trace_event_raw_workqueue_execute_end {
145 struct trace_entry ent;
146 void *work;
147 void *function;
148 char __data[];
149 } __attribute__((preserve_access_index));
151 struct trace_event_raw_workqueue_activate_work {
152 struct trace_entry ent;
153 void *work;
154 char __data[];
155 } __attribute__((preserve_access_index));
157 struct perf_sample_data {
158 u64 addr;
159 u64 period;
160 union perf_sample_weight weight;
161 u64 txn;
162 union perf_mem_data_src data_src;
163 u64 ip;
164 struct {
165 u32 pid;
166 u32 tid;
167 } tid_entry;
168 u64 time;
169 u64 id;
170 struct {
171 u32 cpu;
172 } cpu_entry;
173 u64 phys_addr;
174 u64 cgroup;
175 u64 data_page_size;
176 u64 code_page_size;
177 } __attribute__((__aligned__(64))) __attribute__((preserve_access_index));
179 struct perf_event {
180 struct perf_event *parent;
181 u64 id;
182 } __attribute__((preserve_access_index));
184 struct bpf_perf_event_data_kern {
185 struct perf_sample_data *data;
186 struct perf_event *event;
187 } __attribute__((preserve_access_index));
190 * If 'struct rq' isn't defined for lock_contention.bpf.c, for the sake of
191 * rq___old and rq___new, then the type for the 'runqueue' variable ends up
192 * being a forward declaration (BTF_KIND_FWD) while the kernel has it defined
193 * (BTF_KIND_STRUCT). The definition appears in vmlinux.h rather than
194 * lock_contention.bpf.c for consistency with a generated vmlinux.h.
196 struct rq {};
198 #endif // __VMLINUX_H