brintos

brintos / linux-shallow public Read only

0
0
Text · 4.5 KiB · 4dcad7b Raw
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