• Sumanth Korikkar's avatar
    perf bpf: Fix bpf prologue generation · d38c692f
    Sumanth Korikkar authored
    Issue:
    
    bpf_probe_read() is no longer available for architecture which has
    overlapping address space. Hence bpf prologue generation fails
    
    Fix:
    
    Use bpf_probe_read_kernel for kernel member access. For user attribute
    access in kprobes, use bpf_probe_read_user.
    
    Other:
    
    @user attribute was introduced in commit 1e032f7c ("perf-probe: Add
    user memory access attribute support")
    
    Test:
    
    1. ulimit -l 128 ; ./perf record -e tests/bpf_sched_setscheduler.c
    2. cat tests/bpf_sched_setscheduler.c
    
    static void (*bpf_trace_printk)(const char *fmt, int fmt_size, ...) =
            (void *) 6;
    static int (*bpf_probe_read_user)(void *dst, __u32 size,
                                      const void *unsafe_ptr) = (void *) 112;
    static int (*bpf_probe_read_kernel)(void *dst, __u32 size,
            const void *unsafe_ptr) = (void *) 113;
    
    SEC("func=do_sched_setscheduler  pid policy param->sched_priority@user")
    int bpf_func__setscheduler(void *ctx, int err, pid_t pid, int policy,
                    ...
    d38c692f
bpf-prologue.c 11.9 KB