lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 203/846] bpf: Remove config check to enable bpf support for branch records
    Date
    From: Kajol Jain <kjain@linux.ibm.com>

    [ Upstream commit db52f57211b4e45f0ebb274e2c877b211dc18591 ]

    Branch data available to BPF programs can be very useful to get stack traces
    out of userspace application.

    Commit fff7b64355ea ("bpf: Add bpf_read_branch_records() helper") added BPF
    support to capture branch records in x86. Enable this feature also for other
    architectures as well by removing checks specific to x86.

    If an architecture doesn't support branch records, bpf_read_branch_records()
    still has appropriate checks and it will return an -EINVAL in that scenario.
    Based on UAPI helper doc in include/uapi/linux/bpf.h, unsupported architectures
    should return -ENOENT in such case. Hence, update the appropriate check to
    return -ENOENT instead.

    Selftest 'perf_branches' result on power9 machine which has the branch stacks
    support:

    - Before this patch:

    [command]# ./test_progs -t perf_branches
    #88/1 perf_branches/perf_branches_hw:FAIL
    #88/2 perf_branches/perf_branches_no_hw:OK
    #88 perf_branches:FAIL
    Summary: 0/1 PASSED, 0 SKIPPED, 1 FAILED

    - After this patch:

    [command]# ./test_progs -t perf_branches
    #88/1 perf_branches/perf_branches_hw:OK
    #88/2 perf_branches/perf_branches_no_hw:OK
    #88 perf_branches:OK
    Summary: 1/2 PASSED, 0 SKIPPED, 0 FAILED

    Selftest 'perf_branches' result on power9 machine which doesn't have branch
    stack report:

    - After this patch:

    [command]# ./test_progs -t perf_branches
    #88/1 perf_branches/perf_branches_hw:SKIP
    #88/2 perf_branches/perf_branches_no_hw:OK
    #88 perf_branches:OK
    Summary: 1/1 PASSED, 1 SKIPPED, 0 FAILED

    Fixes: fff7b64355eac ("bpf: Add bpf_read_branch_records() helper")
    Suggested-by: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20211206073315.77432-1-kjain@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    kernel/trace/bpf_trace.c | 6 +-----
    1 file changed, 1 insertion(+), 5 deletions(-)

    diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
    index 6c1038526d1fc..5a18b861fcf75 100644
    --- a/kernel/trace/bpf_trace.c
    +++ b/kernel/trace/bpf_trace.c
    @@ -1322,9 +1322,6 @@ static const struct bpf_func_proto bpf_perf_prog_read_value_proto = {
    BPF_CALL_4(bpf_read_branch_records, struct bpf_perf_event_data_kern *, ctx,
    void *, buf, u32, size, u64, flags)
    {
    -#ifndef CONFIG_X86
    - return -ENOENT;
    -#else
    static const u32 br_entry_size = sizeof(struct perf_branch_entry);
    struct perf_branch_stack *br_stack = ctx->data->br_stack;
    u32 to_copy;
    @@ -1333,7 +1330,7 @@ BPF_CALL_4(bpf_read_branch_records, struct bpf_perf_event_data_kern *, ctx,
    return -EINVAL;

    if (unlikely(!br_stack))
    - return -EINVAL;
    + return -ENOENT;

    if (flags & BPF_F_GET_BRANCH_RECORDS_SIZE)
    return br_stack->nr * br_entry_size;
    @@ -1345,7 +1342,6 @@ BPF_CALL_4(bpf_read_branch_records, struct bpf_perf_event_data_kern *, ctx,
    memcpy(buf, br_stack->entries, to_copy);

    return to_copy;
    -#endif
    }

    static const struct bpf_func_proto bpf_read_branch_records_proto = {
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 23:41    [W:4.056 / U:0.876 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site