Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'introduce btf_tracing_ids'

Song Liu says:

====================

Changes v2 => v3:
1. Fix bug in task_iter.c. (Kernel test robot <lkp@intel.com>)

Changes v1 => v2:
1. Add patch 2/2. (Alexei)

1/2 fixes issue with btf_task_struct_ids w/o CONFIG_DEBUG_INFO_BTF.
2/2 replaces btf_task_struct_ids with easier to understand btf_tracing_ids.
====================

Signed-off-by: Alexei Starovoitov <ast@kernel.org>

+33 -25
+16 -4
include/linux/btf_ids.h
··· 73 73 __BTF_ID_LIST(name, local) \ 74 74 extern u32 name[]; 75 75 76 - #define BTF_ID_LIST_GLOBAL(name) \ 76 + #define BTF_ID_LIST_GLOBAL(name, n) \ 77 77 __BTF_ID_LIST(name, globl) 78 78 79 79 /* The BTF_ID_LIST_SINGLE macro defines a BTF_ID_LIST with ··· 83 83 BTF_ID_LIST(name) \ 84 84 BTF_ID(prefix, typename) 85 85 #define BTF_ID_LIST_GLOBAL_SINGLE(name, prefix, typename) \ 86 - BTF_ID_LIST_GLOBAL(name) \ 86 + BTF_ID_LIST_GLOBAL(name, 1) \ 87 87 BTF_ID(prefix, typename) 88 88 89 89 /* ··· 149 149 #define BTF_ID_LIST(name) static u32 name[5]; 150 150 #define BTF_ID(prefix, name) 151 151 #define BTF_ID_UNUSED 152 - #define BTF_ID_LIST_GLOBAL(name) u32 name[1]; 152 + #define BTF_ID_LIST_GLOBAL(name, n) u32 name[n]; 153 153 #define BTF_ID_LIST_SINGLE(name, prefix, typename) static u32 name[1]; 154 154 #define BTF_ID_LIST_GLOBAL_SINGLE(name, prefix, typename) u32 name[1]; 155 155 #define BTF_SET_START(name) static struct btf_id_set name = { 0 }; ··· 189 189 extern u32 btf_sock_ids[]; 190 190 #endif 191 191 192 - extern u32 btf_task_struct_ids[]; 192 + #define BTF_TRACING_TYPE_xxx \ 193 + BTF_TRACING_TYPE(BTF_TRACING_TYPE_TASK, task_struct) \ 194 + BTF_TRACING_TYPE(BTF_TRACING_TYPE_FILE, file) \ 195 + BTF_TRACING_TYPE(BTF_TRACING_TYPE_VMA, vm_area_struct) 196 + 197 + enum { 198 + #define BTF_TRACING_TYPE(name, type) name, 199 + BTF_TRACING_TYPE_xxx 200 + #undef BTF_TRACING_TYPE 201 + MAX_BTF_TRACING_TYPE, 202 + }; 203 + 204 + extern u32 btf_tracing_ids[]; 193 205 194 206 #endif
+2 -2
kernel/bpf/bpf_task_storage.c
··· 323 323 .ret_type = RET_PTR_TO_MAP_VALUE_OR_NULL, 324 324 .arg1_type = ARG_CONST_MAP_PTR, 325 325 .arg2_type = ARG_PTR_TO_BTF_ID, 326 - .arg2_btf_id = &btf_task_struct_ids[0], 326 + .arg2_btf_id = &btf_tracing_ids[BTF_TRACING_TYPE_TASK], 327 327 .arg3_type = ARG_PTR_TO_MAP_VALUE_OR_NULL, 328 328 .arg4_type = ARG_ANYTHING, 329 329 }; ··· 334 334 .ret_type = RET_INTEGER, 335 335 .arg1_type = ARG_CONST_MAP_PTR, 336 336 .arg2_type = ARG_PTR_TO_BTF_ID, 337 - .arg2_btf_id = &btf_task_struct_ids[0], 337 + .arg2_btf_id = &btf_tracing_ids[BTF_TRACING_TYPE_TASK], 338 338 };
+4 -4
kernel/bpf/btf.c
··· 6354 6354 .arg4_type = ARG_ANYTHING, 6355 6355 }; 6356 6356 6357 - BTF_ID_LIST_GLOBAL(btf_task_struct_ids) 6358 - BTF_ID(struct, task_struct) 6359 - BTF_ID(struct, file) 6360 - BTF_ID(struct, vm_area_struct) 6357 + BTF_ID_LIST_GLOBAL(btf_tracing_ids, MAX_BTF_TRACING_TYPE) 6358 + #define BTF_TRACING_TYPE(name, type) BTF_ID(struct, type) 6359 + BTF_TRACING_TYPE_xxx 6360 + #undef BTF_TRACING_TYPE 6361 6361 6362 6362 /* BTF ID set registration API for modules */ 6363 6363
+1 -1
kernel/bpf/stackmap.c
··· 489 489 .gpl_only = false, 490 490 .ret_type = RET_INTEGER, 491 491 .arg1_type = ARG_PTR_TO_BTF_ID, 492 - .arg1_btf_id = &btf_task_struct_ids[0], 492 + .arg1_btf_id = &btf_tracing_ids[BTF_TRACING_TYPE_TASK], 493 493 .arg2_type = ARG_PTR_TO_UNINIT_MEM, 494 494 .arg3_type = ARG_CONST_SIZE_OR_ZERO, 495 495 .arg4_type = ARG_ANYTHING,
+6 -6
kernel/bpf/task_iter.c
··· 622 622 .func = bpf_find_vma, 623 623 .ret_type = RET_INTEGER, 624 624 .arg1_type = ARG_PTR_TO_BTF_ID, 625 - .arg1_btf_id = &btf_task_struct_ids[0], 625 + .arg1_btf_id = &btf_tracing_ids[BTF_TRACING_TYPE_TASK], 626 626 .arg2_type = ARG_ANYTHING, 627 627 .arg3_type = ARG_PTR_TO_FUNC, 628 628 .arg4_type = ARG_PTR_TO_STACK_OR_NULL, ··· 652 652 init_irq_work(&work->irq_work, do_mmap_read_unlock); 653 653 } 654 654 655 - task_reg_info.ctx_arg_info[0].btf_id = btf_task_struct_ids[0]; 655 + task_reg_info.ctx_arg_info[0].btf_id = btf_tracing_ids[BTF_TRACING_TYPE_TASK]; 656 656 ret = bpf_iter_reg_target(&task_reg_info); 657 657 if (ret) 658 658 return ret; 659 659 660 - task_file_reg_info.ctx_arg_info[0].btf_id = btf_task_struct_ids[0]; 661 - task_file_reg_info.ctx_arg_info[1].btf_id = btf_task_struct_ids[1]; 660 + task_file_reg_info.ctx_arg_info[0].btf_id = btf_tracing_ids[BTF_TRACING_TYPE_TASK]; 661 + task_file_reg_info.ctx_arg_info[1].btf_id = btf_tracing_ids[BTF_TRACING_TYPE_FILE]; 662 662 ret = bpf_iter_reg_target(&task_file_reg_info); 663 663 if (ret) 664 664 return ret; 665 665 666 - task_vma_reg_info.ctx_arg_info[0].btf_id = btf_task_struct_ids[0]; 667 - task_vma_reg_info.ctx_arg_info[1].btf_id = btf_task_struct_ids[2]; 666 + task_vma_reg_info.ctx_arg_info[0].btf_id = btf_tracing_ids[BTF_TRACING_TYPE_TASK]; 667 + task_vma_reg_info.ctx_arg_info[1].btf_id = btf_tracing_ids[BTF_TRACING_TYPE_VMA]; 668 668 return bpf_iter_reg_target(&task_vma_reg_info); 669 669 } 670 670 late_initcall(task_iter_init);
+1 -1
kernel/bpf/verifier.c
··· 6147 6147 callee->regs[BPF_REG_2].type = PTR_TO_BTF_ID; 6148 6148 __mark_reg_known_zero(&callee->regs[BPF_REG_2]); 6149 6149 callee->regs[BPF_REG_2].btf = btf_vmlinux; 6150 - callee->regs[BPF_REG_2].btf_id = btf_task_struct_ids[2]; 6150 + callee->regs[BPF_REG_2].btf_id = btf_tracing_ids[BTF_TRACING_TYPE_VMA], 6151 6151 6152 6152 /* pointer to stack or null */ 6153 6153 callee->regs[BPF_REG_3] = caller->regs[BPF_REG_4];
+2 -2
kernel/trace/bpf_trace.c
··· 764 764 .func = bpf_get_current_task_btf, 765 765 .gpl_only = true, 766 766 .ret_type = RET_PTR_TO_BTF_ID, 767 - .ret_btf_id = &btf_task_struct_ids[0], 767 + .ret_btf_id = &btf_tracing_ids[BTF_TRACING_TYPE_TASK], 768 768 }; 769 769 770 770 BPF_CALL_1(bpf_task_pt_regs, struct task_struct *, task) ··· 779 779 .func = bpf_task_pt_regs, 780 780 .gpl_only = true, 781 781 .arg1_type = ARG_PTR_TO_BTF_ID, 782 - .arg1_btf_id = &btf_task_struct_ids[0], 782 + .arg1_btf_id = &btf_tracing_ids[BTF_TRACING_TYPE_TASK], 783 783 .ret_type = RET_PTR_TO_BTF_ID, 784 784 .ret_btf_id = &bpf_task_pt_regs_ids[0], 785 785 };
+1 -5
net/core/filter.c
··· 10611 10611 bpf_dispatcher_change_prog(BPF_DISPATCHER_PTR(xdp), prev_prog, prog); 10612 10612 } 10613 10613 10614 - #ifdef CONFIG_DEBUG_INFO_BTF 10615 - BTF_ID_LIST_GLOBAL(btf_sock_ids) 10614 + BTF_ID_LIST_GLOBAL(btf_sock_ids, MAX_BTF_SOCK_TYPE) 10616 10615 #define BTF_SOCK_TYPE(name, type) BTF_ID(struct, type) 10617 10616 BTF_SOCK_TYPE_xxx 10618 10617 #undef BTF_SOCK_TYPE 10619 - #else 10620 - u32 btf_sock_ids[MAX_BTF_SOCK_TYPE]; 10621 - #endif 10622 10618 10623 10619 BPF_CALL_1(bpf_skc_to_tcp6_sock, struct sock *, sk) 10624 10620 {