mirror of https://github.com/torvalds/linux.git
Trying to build a .c file that includes <linux/bpf_perf_event.h>:
$ cat test_bpf_headers.c
#include <linux/bpf_perf_event.h>
throws the below error:
/usr/include/linux/bpf_perf_event.h:14:28: error: field ‘regs’ has incomplete type
14 | bpf_user_pt_regs_t regs;
| ^~~~
This is because we typedef bpf_user_pt_regs_t to 'struct user_pt_regs'
in arch/powerpc/include/uaps/asm/bpf_perf_event.h, but 'struct
user_pt_regs' is not exposed to userspace.
Powerpc has both pt_regs and user_pt_regs structures. However, unlike
arm64 and s390, we expose user_pt_regs to userspace as just 'pt_regs'.
As such, we should typedef bpf_user_pt_regs_t to 'struct pt_regs' for
userspace.
Within the kernel though, we want to typedef bpf_user_pt_regs_t to
'struct user_pt_regs'.
Remove arch/powerpc/include/uapi/asm/bpf_perf_event.h so that the
uapi/asm-generic version of the header is exposed to userspace.
Introduce arch/powerpc/include/asm/bpf_perf_event.h so that we can
typedef bpf_user_pt_regs_t to 'struct user_pt_regs' for use within the
kernel.
Note that this was not showing up with the bpf selftest build since
tools/include/uapi/asm/bpf_perf_event.h didn't include the powerpc
variant.
Fixes:
|
||
|---|---|---|
| .. | ||
| Kbuild | ||
| auxvec.h | ||
| bitsperlong.h | ||
| bootx.h | ||
| byteorder.h | ||
| cputable.h | ||
| eeh.h | ||
| elf.h | ||
| epapr_hcalls.h | ||
| errno.h | ||
| fcntl.h | ||
| ioctl.h | ||
| ioctls.h | ||
| ipcbuf.h | ||
| kvm.h | ||
| kvm_para.h | ||
| mman.h | ||
| msgbuf.h | ||
| nvram.h | ||
| opal-prd.h | ||
| papr_pdsm.h | ||
| perf_event.h | ||
| perf_regs.h | ||
| posix_types.h | ||
| ps3fb.h | ||
| ptrace.h | ||
| sembuf.h | ||
| setup.h | ||
| shmbuf.h | ||
| sigcontext.h | ||
| signal.h | ||
| socket.h | ||
| spu_info.h | ||
| stat.h | ||
| swab.h | ||
| termbits.h | ||
| termios.h | ||
| tm.h | ||
| types.h | ||
| ucontext.h | ||
| unistd.h | ||
| vas-api.h | ||