> On Oct 13, 2023, at 8:43 AM, kernel test robot <lkp@xxxxxxxxx> wrote: > > Hi Dave, > > kernel test robot noticed the following build warnings: > > [auto build test WARNING on bpf-next/master] > > url: https://github.com/intel-lab-lkp/linux/commits/Dave-Marchevsky/bpf-Don-t-explicitly-emit-BTF-for-struct-btf_iter_num/20231011-030202 > base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master > patch link: https://lore.kernel.org/r/20231010185944.3888849-4-davemarchevsky%40fb.com > patch subject: [PATCH v6 bpf-next 3/4] bpf: Introduce task_vma open-coded iterator kfuncs > config: x86_64-rhel-8.3-rust (https://download.01.org/0day-ci/archive/20231013/202310132300.wnnctWmF-lkp@xxxxxxxxx/config ) > compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07) > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231013/202310132300.wnnctWmF-lkp@xxxxxxxxx/reproduce ) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@xxxxxxxxx> > | Closes: https://lore.kernel.org/oe-kbuild-all/202310132300.wnnctWmF-lkp@xxxxxxxxx/ > > All warnings (new ones prefixed by >>): > >>> kernel/bpf/task_iter.c:827:17: warning: no previous prototype for function 'bpf_iter_task_vma_new' [-Wmissing-prototypes] > __bpf_kfunc int bpf_iter_task_vma_new(struct bpf_iter_task_vma *it, > ^ > kernel/bpf/task_iter.c:827:13: note: declare 'static' if the function is not intended to be used outside of this translation unit > __bpf_kfunc int bpf_iter_task_vma_new(struct bpf_iter_task_vma *it, > ^ > static >>> kernel/bpf/task_iter.c:871:36: warning: no previous prototype for function 'bpf_iter_task_vma_next' [-Wmissing-prototypes] > __bpf_kfunc struct vm_area_struct *bpf_iter_task_vma_next(struct bpf_iter_task_vma *it) > ^ > kernel/bpf/task_iter.c:871:13: note: declare 'static' if the function is not intended to be used outside of this translation unit > __bpf_kfunc struct vm_area_struct *bpf_iter_task_vma_next(struct bpf_iter_task_vma *it) > ^ > static >>> kernel/bpf/task_iter.c:880:18: warning: no previous prototype for function 'bpf_iter_task_vma_destroy' [-Wmissing-prototypes] > __bpf_kfunc void bpf_iter_task_vma_destroy(struct bpf_iter_task_vma *it) > ^ > kernel/bpf/task_iter.c:880:13: note: declare 'static' if the function is not intended to be used outside of this translation unit > __bpf_kfunc void bpf_iter_task_vma_destroy(struct bpf_iter_task_vma *it) > ^ > static > 3 warnings generated. We need the following to mute these: __diag_push(); __diag_ignore_all("-Wmissing-prototypes", "kfuncs which will be used in BPF programs"); __bpf_kfunc ... __diag_pop(); Thanks, Song > > > vim +/bpf_iter_task_vma_new +827 kernel/bpf/task_iter.c > > 826 >> 827 __bpf_kfunc int bpf_iter_task_vma_new(struct bpf_iter_task_vma *it, > 828 struct task_struct *task, u64 addr) > 829 { > 830 struct bpf_iter_task_vma_kern *kit = (void *)it; > 831 bool irq_work_busy = false; > 832 int err; > 833 > 834 BUILD_BUG_ON(sizeof(struct bpf_iter_task_vma_kern) != sizeof(struct bpf_iter_task_vma)); > 835 BUILD_BUG_ON(__alignof__(struct bpf_iter_task_vma_kern) != __alignof__(struct bpf_iter_task_vma)); > 836 > 837 /* is_iter_reg_valid_uninit guarantees that kit hasn't been initialized > 838 * before, so non-NULL kit->data doesn't point to previously > 839 * bpf_mem_alloc'd bpf_iter_task_vma_kern_data > 840 */ > 841 kit->data = bpf_mem_alloc(&bpf_global_ma, sizeof(struct bpf_iter_task_vma_kern_data)); > 842 if (!kit->data) > 843 return -ENOMEM; > 844 > 845 kit->data->task = get_task_struct(task); > 846 kit->data->mm = task->mm; > 847 if (!kit->data->mm) { > 848 err = -ENOENT; > 849 goto err_cleanup_iter; > 850 } > 851 > 852 /* kit->data->work == NULL is valid after bpf_mmap_unlock_get_irq_work */ > 853 irq_work_busy = bpf_mmap_unlock_get_irq_work(&kit->data->work); > 854 if (irq_work_busy || !mmap_read_trylock(kit->data->mm)) { > 855 err = -EBUSY; > 856 goto err_cleanup_iter; > 857 } > 858 > 859 vma_iter_init(&kit->data->vmi, kit->data->mm, addr); > 860 return 0; > 861 > 862 err_cleanup_iter: > 863 if (kit->data->task) > 864 put_task_struct(kit->data->task); > 865 bpf_mem_free(&bpf_global_ma, kit->data); > 866 /* NULL kit->data signals failed bpf_iter_task_vma initialization */ > 867 kit->data = NULL; > 868 return err; > 869 } > 870 >> 871 __bpf_kfunc struct vm_area_struct *bpf_iter_task_vma_next(struct bpf_iter_task_vma *it) > 872 { > 873 struct bpf_iter_task_vma_kern *kit = (void *)it; > 874 > 875 if (!kit->data) /* bpf_iter_task_vma_new failed */ > 876 return NULL; > 877 return vma_next(&kit->data->vmi); > 878 } > 879 >> 880 __bpf_kfunc void bpf_iter_task_vma_destroy(struct bpf_iter_task_vma *it) > 881 { > 882 struct bpf_iter_task_vma_kern *kit = (void *)it; > 883 > 884 if (kit->data) { > 885 bpf_mmap_unlock_mm(kit->data->work, kit->data->mm); > 886 put_task_struct(kit->data->task); > 887 bpf_mem_free(&bpf_global_ma, kit->data); > 888 } > 889 } > 890 > > -- > 0-DAY CI Kernel Test Service > https://github.com/intel/lkp-tests/wiki