linux/tools/perf/util/bpf_skel/vmlinux.h
Yang Jihong 5be6cecda0 perf bpf skels: Make vmlinux.h use bpf.h and perf_event.h in source directory
Currently, vmlinux.h uses the bpf.h and perf_event.h header files in the
system path. If the header files in compilation environment are old,
compilation may fail. For example:

  /home/yangjihong/linux/tools/perf/util/bpf_skel/.tmp/../vmlinux.h:151:27: error: field has incomplete type 'union perf_sample_weight'
          union perf_sample_weight weight;

Use the bpf.h and perf_event.h files in the source code directory to
avoid compilation compatibility problems.

Signed-off-by: Yang Jihong <yangjihong1@huawei.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Tom Rix <trix@redhat.com>
Link: https://lore.kernel.org/r/20230510064401.225051-1-yangjihong1@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2023-05-10 14:20:49 -03:00

175 lines
3.8 KiB
C

#ifndef __VMLINUX_H
#define __VMLINUX_H
#include <linux/stddef.h> // for define __always_inline
#include <linux/bpf.h>
#include <linux/types.h>
#include <linux/perf_event.h>
#include <stdbool.h>
// non-UAPI kernel data structures, used in the .bpf.c BPF tool component.
// Just the fields used in these tools preserving the access index so that
// libbpf can fixup offsets with the ones used in the kernel when loading the
// BPF bytecode, if they differ from what is used here.
typedef __u8 u8;
typedef __u32 u32;
typedef __u64 u64;
typedef __s64 s64;
typedef int pid_t;
enum cgroup_subsys_id {
perf_event_cgrp_id = 8,
};
enum {
HI_SOFTIRQ = 0,
TIMER_SOFTIRQ,
NET_TX_SOFTIRQ,
NET_RX_SOFTIRQ,
BLOCK_SOFTIRQ,
IRQ_POLL_SOFTIRQ,
TASKLET_SOFTIRQ,
SCHED_SOFTIRQ,
HRTIMER_SOFTIRQ,
RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */
NR_SOFTIRQS
};
typedef struct {
s64 counter;
} __attribute__((preserve_access_index)) atomic64_t;
typedef atomic64_t atomic_long_t;
struct raw_spinlock {
int rawlock;
} __attribute__((preserve_access_index));
typedef struct raw_spinlock raw_spinlock_t;
typedef struct {
struct raw_spinlock rlock;
} __attribute__((preserve_access_index)) spinlock_t;
struct sighand_struct {
spinlock_t siglock;
} __attribute__((preserve_access_index));
struct rw_semaphore {
atomic_long_t owner;
} __attribute__((preserve_access_index));
struct mutex {
atomic_long_t owner;
} __attribute__((preserve_access_index));
struct kernfs_node {
u64 id;
} __attribute__((preserve_access_index));
struct cgroup {
struct kernfs_node *kn;
int level;
} __attribute__((preserve_access_index));
struct cgroup_subsys_state {
struct cgroup *cgroup;
} __attribute__((preserve_access_index));
struct css_set {
struct cgroup_subsys_state *subsys[13];
struct cgroup *dfl_cgrp;
} __attribute__((preserve_access_index));
struct mm_struct {
struct rw_semaphore mmap_lock;
} __attribute__((preserve_access_index));
struct task_struct {
unsigned int flags;
struct mm_struct *mm;
pid_t pid;
pid_t tgid;
char comm[16];
struct sighand_struct *sighand;
struct css_set *cgroups;
} __attribute__((preserve_access_index));
struct trace_entry {
short unsigned int type;
unsigned char flags;
unsigned char preempt_count;
int pid;
} __attribute__((preserve_access_index));
struct trace_event_raw_irq_handler_entry {
struct trace_entry ent;
int irq;
u32 __data_loc_name;
char __data[];
} __attribute__((preserve_access_index));
struct trace_event_raw_irq_handler_exit {
struct trace_entry ent;
int irq;
int ret;
char __data[];
} __attribute__((preserve_access_index));
struct trace_event_raw_softirq {
struct trace_entry ent;
unsigned int vec;
char __data[];
} __attribute__((preserve_access_index));
struct trace_event_raw_workqueue_execute_start {
struct trace_entry ent;
void *work;
void *function;
char __data[];
} __attribute__((preserve_access_index));
struct trace_event_raw_workqueue_execute_end {
struct trace_entry ent;
void *work;
void *function;
char __data[];
} __attribute__((preserve_access_index));
struct trace_event_raw_workqueue_activate_work {
struct trace_entry ent;
void *work;
char __data[];
} __attribute__((preserve_access_index));
struct perf_sample_data {
u64 addr;
u64 period;
union perf_sample_weight weight;
u64 txn;
union perf_mem_data_src data_src;
u64 ip;
struct {
u32 pid;
u32 tid;
} tid_entry;
u64 time;
u64 id;
struct {
u32 cpu;
} cpu_entry;
u64 phys_addr;
u64 data_page_size;
u64 code_page_size;
} __attribute__((__aligned__(64))) __attribute__((preserve_access_index));
struct bpf_perf_event_data_kern {
struct perf_sample_data *data;
struct perf_event *event;
} __attribute__((preserve_access_index));
#endif // __VMLINUX_H