mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-26 14:17:26 -04:00
bpf: correct broken uapi for BPF_PROG_TYPE_PERF_EVENT program type
Commit0515e5999a
("bpf: introduce BPF_PROG_TYPE_PERF_EVENT program type") introduced the bpf_perf_event_data structure which exports the pt_regs structure. This is OK for multiple architectures but fail for s390 and arm64 which do not export pt_regs. Programs using them, for example, the bpf selftest fail to compile on these architectures. For s390, exporting the pt_regs is not an option because s390 wants to allow changes to it. For arm64, there is a user_pt_regs structure that covers parts of the pt_regs structure for use by user space. To solve the broken uapi for s390 and arm64, introduce an abstract type for pt_regs and add an asm/bpf_perf_event.h file that concretes the type. An asm-generic header file covers the architectures that export pt_regs today. The arch-specific enablement for s390 and arm64 follows in separate commits. Reported-by: Thomas Richter <tmricht@linux.vnet.ibm.com> Fixes:0515e5999a
("bpf: introduce BPF_PROG_TYPE_PERF_EVENT program type") Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Reviewed-and-tested-by: Thomas Richter <tmricht@linux.vnet.ibm.com> Acked-by: Alexei Starovoitov <ast@kernel.org> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
parent
2391f0b480
commit
c895f6f703
32 changed files with 47 additions and 5 deletions
|
@ -15,6 +15,7 @@
|
|||
#define _LINUX_PERF_EVENT_H
|
||||
|
||||
#include <uapi/linux/perf_event.h>
|
||||
#include <uapi/linux/bpf_perf_event.h>
|
||||
|
||||
/*
|
||||
* Kernel-internal data types and definitions:
|
||||
|
@ -787,7 +788,7 @@ struct perf_output_handle {
|
|||
};
|
||||
|
||||
struct bpf_perf_event_data_kern {
|
||||
struct pt_regs *regs;
|
||||
bpf_user_pt_regs_t *regs;
|
||||
struct perf_sample_data *data;
|
||||
struct perf_event *event;
|
||||
};
|
||||
|
@ -1177,6 +1178,9 @@ extern void perf_bp_event(struct perf_event *event, void *data);
|
|||
(user_mode(regs) ? PERF_RECORD_MISC_USER : PERF_RECORD_MISC_KERNEL)
|
||||
# define perf_instruction_pointer(regs) instruction_pointer(regs)
|
||||
#endif
|
||||
#ifndef perf_arch_bpf_user_pt_regs
|
||||
# define perf_arch_bpf_user_pt_regs(regs) regs
|
||||
#endif
|
||||
|
||||
static inline bool has_branch_stack(struct perf_event *event)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue