199 lines · c
1#ifndef __VMLINUX_H2#define __VMLINUX_H3 4#include <linux/stddef.h> // for define __always_inline5#include <linux/bpf.h>6#include <linux/types.h>7#include <linux/perf_event.h>8#include <stdbool.h>9 10// non-UAPI kernel data structures, used in the .bpf.c BPF tool component.11 12// Just the fields used in these tools preserving the access index so that13// libbpf can fixup offsets with the ones used in the kernel when loading the14// BPF bytecode, if they differ from what is used here.15 16typedef __u8 u8;17typedef __u32 u32;18typedef __s32 s32;19typedef __u64 u64;20typedef __s64 s64;21 22typedef int pid_t;23 24typedef __s64 time64_t;25 26struct timespec64 {27 time64_t tv_sec;28 long int tv_nsec;29};30 31enum cgroup_subsys_id {32 perf_event_cgrp_id = 8,33};34 35enum {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 */46 47 NR_SOFTIRQS48};49 50typedef struct {51 s64 counter;52} __attribute__((preserve_access_index)) atomic64_t;53 54typedef atomic64_t atomic_long_t;55 56struct raw_spinlock {57 int rawlock;58} __attribute__((preserve_access_index));59 60typedef struct raw_spinlock raw_spinlock_t;61 62typedef struct {63 struct raw_spinlock rlock;64} __attribute__((preserve_access_index)) spinlock_t;65 66struct sighand_struct {67 spinlock_t siglock;68} __attribute__((preserve_access_index));69 70struct rw_semaphore {71 atomic_long_t owner;72} __attribute__((preserve_access_index));73 74struct mutex {75 atomic_long_t owner;76} __attribute__((preserve_access_index));77 78struct kernfs_node {79 u64 id;80} __attribute__((preserve_access_index));81 82struct cgroup {83 struct kernfs_node *kn;84 int level;85} __attribute__((preserve_access_index));86 87struct cgroup_subsys_state {88 struct cgroup *cgroup;89} __attribute__((preserve_access_index));90 91struct css_set {92 struct cgroup_subsys_state *subsys[13];93 struct cgroup *dfl_cgrp;94} __attribute__((preserve_access_index));95 96struct mm_struct {97 struct rw_semaphore mmap_lock;98} __attribute__((preserve_access_index));99 100struct 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));109 110struct trace_entry {111 short unsigned int type;112 unsigned char flags;113 unsigned char preempt_count;114 int pid;115} __attribute__((preserve_access_index));116 117struct 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));123 124struct 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));130 131struct trace_event_raw_softirq {132 struct trace_entry ent;133 unsigned int vec;134 char __data[];135} __attribute__((preserve_access_index));136 137struct 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));143 144struct 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));150 151struct trace_event_raw_workqueue_activate_work {152 struct trace_entry ent;153 void *work;154 char __data[];155} __attribute__((preserve_access_index));156 157struct 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));178 179struct perf_event {180 struct perf_event *parent;181 u64 id;182} __attribute__((preserve_access_index));183 184struct bpf_perf_event_data_kern {185 struct perf_sample_data *data;186 struct perf_event *event;187} __attribute__((preserve_access_index));188 189/*190 * If 'struct rq' isn't defined for lock_contention.bpf.c, for the sake of191 * rq___old and rq___new, then the type for the 'runqueue' variable ends up192 * being a forward declaration (BTF_KIND_FWD) while the kernel has it defined193 * (BTF_KIND_STRUCT). The definition appears in vmlinux.h rather than194 * lock_contention.bpf.c for consistency with a generated vmlinux.h.195 */196struct rq {};197 198#endif // __VMLINUX_H199