Re: [PATCH bpf-next v4 3/8] bpf: Introduce task open coded iterator kfuncs

From: kernel test robot
Date: Sat Oct 07 2023 - 11:23:15 EST


Hi Chuyi,

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/Chuyi-Zhou/cgroup-Prepare-for-using-css_task_iter_-in-BPF/20231007-204750
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link: https://lore.kernel.org/r/20231007124522.34834-4-zhouchuyi%40bytedance.com
patch subject: [PATCH bpf-next v4 3/8] bpf: Introduce task open coded iterator kfuncs
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20231007/202310072354.0oARP80g-lkp@xxxxxxxxx/config)
compiler: m68k-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231007/202310072354.0oARP80g-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/202310072354.0oARP80g-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

kernel/bpf/task_iter.c:815:17: warning: no previous prototype for 'bpf_iter_css_task_new' [-Wmissing-prototypes]
815 | __bpf_kfunc int bpf_iter_css_task_new(struct bpf_iter_css_task *it,
| ^~~~~~~~~~~~~~~~~~~~~
kernel/bpf/task_iter.c:840:33: warning: no previous prototype for 'bpf_iter_css_task_next' [-Wmissing-prototypes]
840 | __bpf_kfunc struct task_struct *bpf_iter_css_task_next(struct bpf_iter_css_task *it)
| ^~~~~~~~~~~~~~~~~~~~~~
kernel/bpf/task_iter.c:849:18: warning: no previous prototype for 'bpf_iter_css_task_destroy' [-Wmissing-prototypes]
849 | __bpf_kfunc void bpf_iter_css_task_destroy(struct bpf_iter_css_task *it)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/bpf/task_iter.c:875:17: warning: no previous prototype for 'bpf_iter_task_new' [-Wmissing-prototypes]
875 | __bpf_kfunc int bpf_iter_task_new(struct bpf_iter_task *it,
| ^~~~~~~~~~~~~~~~~
>> kernel/bpf/task_iter.c:903:33: warning: no previous prototype for 'bpf_iter_task_next' [-Wmissing-prototypes]
903 | __bpf_kfunc struct task_struct *bpf_iter_task_next(struct bpf_iter_task *it)
| ^~~~~~~~~~~~~~~~~~
>> kernel/bpf/task_iter.c:937:18: warning: no previous prototype for 'bpf_iter_task_destroy' [-Wmissing-prototypes]
937 | __bpf_kfunc void bpf_iter_task_destroy(struct bpf_iter_task *it)
| ^~~~~~~~~~~~~~~~~~~~~
In file included from <command-line>:
kernel/bpf/task_iter.c: In function 'bpf_iter_task_new':
include/linux/compiler_types.h:425:45: error: call to '__compiletime_assert_438' declared with attribute error: BUILD_BUG_ON failed: sizeof(struct bpf_iter_task_kern) != sizeof(struct bpf_iter_task)
425 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^
include/linux/compiler_types.h:406:25: note: in definition of macro '__compiletime_assert'
406 | prefix ## suffix(); \
| ^~~~~~
include/linux/compiler_types.h:425:9: note: in expansion of macro '_compiletime_assert'
425 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
| ^~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG'
50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
| ^~~~~~~~~~~~~~~~
kernel/bpf/task_iter.c:880:9: note: in expansion of macro 'BUILD_BUG_ON'
880 | BUILD_BUG_ON(sizeof(struct bpf_iter_task_kern) != sizeof(struct bpf_iter_task));
| ^~~~~~~~~~~~


vim +/bpf_iter_task_new +875 kernel/bpf/task_iter.c

814
> 815 __bpf_kfunc int bpf_iter_css_task_new(struct bpf_iter_css_task *it,
816 struct cgroup_subsys_state *css, unsigned int flags)
817 {
818 struct bpf_iter_css_task_kern *kit = (void *)it;
819
820 BUILD_BUG_ON(sizeof(struct bpf_iter_css_task_kern) != sizeof(struct bpf_iter_css_task));
821 BUILD_BUG_ON(__alignof__(struct bpf_iter_css_task_kern) !=
822 __alignof__(struct bpf_iter_css_task));
823 kit->css_it = NULL;
824 switch (flags) {
825 case CSS_TASK_ITER_PROCS | CSS_TASK_ITER_THREADED:
826 case CSS_TASK_ITER_PROCS:
827 case 0:
828 break;
829 default:
830 return -EINVAL;
831 }
832
833 kit->css_it = bpf_mem_alloc(&bpf_global_ma, sizeof(struct css_task_iter));
834 if (!kit->css_it)
835 return -ENOMEM;
836 css_task_iter_start(css, flags, kit->css_it);
837 return 0;
838 }
839
> 840 __bpf_kfunc struct task_struct *bpf_iter_css_task_next(struct bpf_iter_css_task *it)
841 {
842 struct bpf_iter_css_task_kern *kit = (void *)it;
843
844 if (!kit->css_it)
845 return NULL;
846 return css_task_iter_next(kit->css_it);
847 }
848
> 849 __bpf_kfunc void bpf_iter_css_task_destroy(struct bpf_iter_css_task *it)
850 {
851 struct bpf_iter_css_task_kern *kit = (void *)it;
852
853 if (!kit->css_it)
854 return;
855 css_task_iter_end(kit->css_it);
856 bpf_mem_free(&bpf_global_ma, kit->css_it);
857 }
858
859 struct bpf_iter_task {
860 __u64 __opaque[3];
861 } __attribute__((aligned(8)));
862
863 struct bpf_iter_task_kern {
864 struct task_struct *task;
865 struct task_struct *pos;
866 unsigned int flags;
867 } __attribute__((aligned(8)));
868
869 enum {
870 BPF_TASK_ITER_ALL_PROCS,
871 BPF_TASK_ITER_ALL_THREADS,
872 BPF_TASK_ITER_PROC_THREADS
873 };
874
> 875 __bpf_kfunc int bpf_iter_task_new(struct bpf_iter_task *it,
876 struct task_struct *task, unsigned int flags)
877 {
878 struct bpf_iter_task_kern *kit = (void *)it;
879
880 BUILD_BUG_ON(sizeof(struct bpf_iter_task_kern) != sizeof(struct bpf_iter_task));
881 BUILD_BUG_ON(__alignof__(struct bpf_iter_task_kern) !=
882 __alignof__(struct bpf_iter_task));
883
884 kit->task = kit->pos = NULL;
885 switch (flags) {
886 case BPF_TASK_ITER_ALL_THREADS:
887 case BPF_TASK_ITER_ALL_PROCS:
888 case BPF_TASK_ITER_PROC_THREADS:
889 break;
890 default:
891 return -EINVAL;
892 }
893
894 if (flags == BPF_TASK_ITER_PROC_THREADS)
895 kit->task = task;
896 else
897 kit->task = &init_task;
898 kit->pos = kit->task;
899 kit->flags = flags;
900 return 0;
901 }
902
> 903 __bpf_kfunc struct task_struct *bpf_iter_task_next(struct bpf_iter_task *it)
904 {
905 struct bpf_iter_task_kern *kit = (void *)it;
906 struct task_struct *pos;
907 unsigned int flags;
908
909 flags = kit->flags;
910 pos = kit->pos;
911
912 if (!pos)
913 goto out;
914
915 if (flags == BPF_TASK_ITER_ALL_PROCS)
916 goto get_next_task;
917
918 kit->pos = next_thread(kit->pos);
919 if (kit->pos == kit->task) {
920 if (flags == BPF_TASK_ITER_PROC_THREADS) {
921 kit->pos = NULL;
922 goto out;
923 }
924 } else
925 goto out;
926
927 get_next_task:
928 kit->pos = next_task(kit->pos);
929 kit->task = kit->pos;
930 if (kit->pos == &init_task)
931 kit->pos = NULL;
932
933 out:
934 return pos;
935 }
936
> 937 __bpf_kfunc void bpf_iter_task_destroy(struct bpf_iter_task *it)
938 {
939 }
940

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki