Re: [PATCH v6 bpf-next 3/4] bpf: Introduce task_vma open-coded iterator kfuncs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> 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





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux