Skip to content

Commit 4fd8097

Browse files
kjain101gregkh
authored andcommitted
bpf: Remove config check to enable bpf support for branch records
[ Upstream commit db52f57 ] Branch data available to BPF programs can be very useful to get stack traces out of userspace application. Commit fff7b64 ("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: fff7b64 ("bpf: Add bpf_read_branch_records() helper") Suggested-by: Peter Zijlstra <[email protected]> Signed-off-by: Kajol Jain <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]> Link: https://lore.kernel.org/bpf/[email protected] Signed-off-by: Sasha Levin <[email protected]>
1 parent 8090113 commit 4fd8097

File tree

1 file changed

+1
-5
lines changed

1 file changed

+1
-5
lines changed

kernel/trace/bpf_trace.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,9 +1400,6 @@ static const struct bpf_func_proto bpf_perf_prog_read_value_proto = {
14001400
BPF_CALL_4(bpf_read_branch_records, struct bpf_perf_event_data_kern *, ctx,
14011401
void *, buf, u32, size, u64, flags)
14021402
{
1403-
#ifndef CONFIG_X86
1404-
return -ENOENT;
1405-
#else
14061403
static const u32 br_entry_size = sizeof(struct perf_branch_entry);
14071404
struct perf_branch_stack *br_stack = ctx->data->br_stack;
14081405
u32 to_copy;
@@ -1411,7 +1408,7 @@ BPF_CALL_4(bpf_read_branch_records, struct bpf_perf_event_data_kern *, ctx,
14111408
return -EINVAL;
14121409

14131410
if (unlikely(!br_stack))
1414-
return -EINVAL;
1411+
return -ENOENT;
14151412

14161413
if (flags & BPF_F_GET_BRANCH_RECORDS_SIZE)
14171414
return br_stack->nr * br_entry_size;
@@ -1423,7 +1420,6 @@ BPF_CALL_4(bpf_read_branch_records, struct bpf_perf_event_data_kern *, ctx,
14231420
memcpy(buf, br_stack->entries, to_copy);
14241421

14251422
return to_copy;
1426-
#endif
14271423
}
14281424

14291425
static const struct bpf_func_proto bpf_read_branch_records_proto = {

0 commit comments

Comments
 (0)