BPF List
 help / color / mirror / Atom feed
* [PATCH] bpf: hide cgroup functions for configs without cgroups
@ 2023-10-20 13:27 Arnd Bergmann
  2023-10-20 17:26 ` Alexei Starovoitov
  0 siblings, 1 reply; 4+ messages in thread
From: Arnd Bergmann @ 2023-10-20 13:27 UTC (permalink / raw)
  To: Yonghong Song, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Chuyi Zhou, Tejun Heo
  Cc: Arnd Bergmann, Martin KaFai Lau, Song Liu, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Oleg Nesterov,
	bpf, linux-kernel

From: Arnd Bergmann <arnd@arndb.de>

When cgroups are disabled, the newly added functions don't build:

kernel/bpf/task_iter.c: In function 'bpf_iter_css_task_new':
kernel/bpf/task_iter.c:917:14: error: 'CSS_TASK_ITER_PROCS' undeclared (first use in this function)
  917 |         case CSS_TASK_ITER_PROCS | CSS_TASK_ITER_THREADED:
      |              ^~~~~~~~~~~~~~~~~~~
kernel/bpf/task_iter.c:925:60: error: invalid application of 'sizeof' to incomplete type 'struct css_task_iter'
  925 |         kit->css_it = bpf_mem_alloc(&bpf_global_ma, sizeof(struct css_task_iter));
      |                                                            ^~~~~~

Hide them in an #ifdef section.

Fixes: 9c66dc94b62ae ("bpf: Introduce css_task open-coded iterator kfuncs")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 kernel/bpf/task_iter.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/kernel/bpf/task_iter.c b/kernel/bpf/task_iter.c
index 654601dd6b493..15a184f4f954d 100644
--- a/kernel/bpf/task_iter.c
+++ b/kernel/bpf/task_iter.c
@@ -904,6 +904,7 @@ __diag_push();
 __diag_ignore_all("-Wmissing-prototypes",
 		  "Global functions as their definitions will be in vmlinux BTF");
 
+#ifdef CONFIG_CGROUPS
 __bpf_kfunc int bpf_iter_css_task_new(struct bpf_iter_css_task *it,
 		struct cgroup_subsys_state *css, unsigned int flags)
 {
@@ -947,6 +948,7 @@ __bpf_kfunc void bpf_iter_css_task_destroy(struct bpf_iter_css_task *it)
 	css_task_iter_end(kit->css_it);
 	bpf_mem_free(&bpf_global_ma, kit->css_it);
 }
+#endif
 
 __diag_pop();
 
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] bpf: hide cgroup functions for configs without cgroups
  2023-10-20 13:27 [PATCH] bpf: hide cgroup functions for configs without cgroups Arnd Bergmann
@ 2023-10-20 17:26 ` Alexei Starovoitov
  2023-10-20 20:06   ` Arnd Bergmann
  0 siblings, 1 reply; 4+ messages in thread
From: Alexei Starovoitov @ 2023-10-20 17:26 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Yonghong Song, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Chuyi Zhou, Tejun Heo, Arnd Bergmann,
	Martin KaFai Lau, Song Liu, John Fastabend, KP Singh,
	Stanislav Fomichev, Hao Luo, Jiri Olsa, Oleg Nesterov, bpf, LKML

On Fri, Oct 20, 2023 at 6:27 AM Arnd Bergmann <arnd@kernel.org> wrote:
>
> From: Arnd Bergmann <arnd@arndb.de>
>
> When cgroups are disabled, the newly added functions don't build:
>
> kernel/bpf/task_iter.c: In function 'bpf_iter_css_task_new':
> kernel/bpf/task_iter.c:917:14: error: 'CSS_TASK_ITER_PROCS' undeclared (first use in this function)
>   917 |         case CSS_TASK_ITER_PROCS | CSS_TASK_ITER_THREADED:
>       |              ^~~~~~~~~~~~~~~~~~~
> kernel/bpf/task_iter.c:925:60: error: invalid application of 'sizeof' to incomplete type 'struct css_task_iter'
>   925 |         kit->css_it = bpf_mem_alloc(&bpf_global_ma, sizeof(struct css_task_iter));
>       |                                                            ^~~~~~
>
> Hide them in an #ifdef section.
>
> Fixes: 9c66dc94b62ae ("bpf: Introduce css_task open-coded iterator kfuncs")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
>  kernel/bpf/task_iter.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/kernel/bpf/task_iter.c b/kernel/bpf/task_iter.c
> index 654601dd6b493..15a184f4f954d 100644
> --- a/kernel/bpf/task_iter.c
> +++ b/kernel/bpf/task_iter.c
> @@ -904,6 +904,7 @@ __diag_push();
>  __diag_ignore_all("-Wmissing-prototypes",
>                   "Global functions as their definitions will be in vmlinux BTF");
>
> +#ifdef CONFIG_CGROUPS
>  __bpf_kfunc int bpf_iter_css_task_new(struct bpf_iter_css_task *it,
>                 struct cgroup_subsys_state *css, unsigned int flags)
>  {
> @@ -947,6 +948,7 @@ __bpf_kfunc void bpf_iter_css_task_destroy(struct bpf_iter_css_task *it)
>         css_task_iter_end(kit->css_it);
>         bpf_mem_free(&bpf_global_ma, kit->css_it);
>  }
> +#endif

Did you actually test build it without cgroups and with bpf+btf?
I suspect the resolve_btfid step should be failing the build.
It needs
#ifdef CONFIG_CGROUPS
around BTF_ID_FLAGS(func, bpf_iter_css_task*

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] bpf: hide cgroup functions for configs without cgroups
  2023-10-20 17:26 ` Alexei Starovoitov
@ 2023-10-20 20:06   ` Arnd Bergmann
  2023-10-21  3:45     ` Chuyi Zhou
  0 siblings, 1 reply; 4+ messages in thread
From: Arnd Bergmann @ 2023-10-20 20:06 UTC (permalink / raw)
  To: Alexei Starovoitov, Arnd Bergmann
  Cc: Yonghong Song, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Chuyi Zhou, Tejun Heo, Martin KaFai Lau,
	Song Liu, John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo,
	Jiri Olsa, Oleg Nesterov, bpf, LKML

On Fri, Oct 20, 2023, at 19:26, Alexei Starovoitov wrote:
> On Fri, Oct 20, 2023 at 6:27 AM Arnd Bergmann <arnd@kernel.org> wrote:
>> @@ -904,6 +904,7 @@ __diag_push();
>>  __diag_ignore_all("-Wmissing-prototypes",
>>                   "Global functions as their definitions will be in vmlinux BTF");
>>
>> +#ifdef CONFIG_CGROUPS
>>  __bpf_kfunc int bpf_iter_css_task_new(struct bpf_iter_css_task *it,
>>                 struct cgroup_subsys_state *css, unsigned int flags)
>>  {
>> @@ -947,6 +948,7 @@ __bpf_kfunc void bpf_iter_css_task_destroy(struct bpf_iter_css_task *it)
>>         css_task_iter_end(kit->css_it);
>>         bpf_mem_free(&bpf_global_ma, kit->css_it);
>>  }
>> +#endif
>
> Did you actually test build it without cgroups and with bpf+btf?
> I suspect the resolve_btfid step should be failing the build.
> It needs
> #ifdef CONFIG_CGROUPS
> around BTF_ID_FLAGS(func, bpf_iter_css_task*

No, I did test with a few hundred random configurations, but it
looks like CONFIG_DEBUG_INFO_BTF is always disabled
in my builds because I force-disable CONFIG_DEBUG_INFO
to speed up my builds.

I tried reproducing it with CONFIG_DEBUG_INFO_BTF enabled
and it didn't immediately fail but it clearly makes sense that
we'd need another #ifdef.

      Arnd

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] bpf: hide cgroup functions for configs without cgroups
  2023-10-20 20:06   ` Arnd Bergmann
@ 2023-10-21  3:45     ` Chuyi Zhou
  0 siblings, 0 replies; 4+ messages in thread
From: Chuyi Zhou @ 2023-10-21  3:45 UTC (permalink / raw)
  To: Arnd Bergmann, Alexei Starovoitov, Arnd Bergmann
  Cc: Yonghong Song, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Tejun Heo, Martin KaFai Lau, Song Liu,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	Oleg Nesterov, bpf, LKML

Hello,

在 2023/10/21 04:06, Arnd Bergmann 写道:
> On Fri, Oct 20, 2023, at 19:26, Alexei Starovoitov wrote:
>> On Fri, Oct 20, 2023 at 6:27 AM Arnd Bergmann <arnd@kernel.org> wrote:
>>> @@ -904,6 +904,7 @@ __diag_push();
>>>   __diag_ignore_all("-Wmissing-prototypes",
>>>                    "Global functions as their definitions will be in vmlinux BTF");
>>>
>>> +#ifdef CONFIG_CGROUPS
>>>   __bpf_kfunc int bpf_iter_css_task_new(struct bpf_iter_css_task *it,
>>>                  struct cgroup_subsys_state *css, unsigned int flags)
>>>   {
>>> @@ -947,6 +948,7 @@ __bpf_kfunc void bpf_iter_css_task_destroy(struct bpf_iter_css_task *it)
>>>          css_task_iter_end(kit->css_it);
>>>          bpf_mem_free(&bpf_global_ma, kit->css_it);
>>>   }
>>> +#endif
>>
>> Did you actually test build it without cgroups and with bpf+btf?
>> I suspect the resolve_btfid step should be failing the build.
>> It needs
>> #ifdef CONFIG_CGROUPS
>> around BTF_ID_FLAGS(func, bpf_iter_css_task*
> 
> No, I did test with a few hundred random configurations, but it
> looks like CONFIG_DEBUG_INFO_BTF is always disabled
> in my builds because I force-disable CONFIG_DEBUG_INFO
> to speed up my builds.
> 
> I tried reproducing it with CONFIG_DEBUG_INFO_BTF enabled
> and it didn't immediately fail but it clearly makes sense that
> we'd need another #ifdef.
> 
>        Arnd

seems the same problem also reported by kernel-robot:

tree: 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   2030579113a1b1b5bfd7ff24c0852847836d8fd1
commit: 9c66dc94b62aef23300f05f63404afb8990920b4 [13777/13906] bpf: 
Introduce css_task open-coded iterator kfuncs
config: hexagon-randconfig-r003-20230725 
(https://download.01.org/0day-ci/archive/20231021/202310211011.pTzXR2o9-lkp@intel.com/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/20231021/202310211011.pTzXR2o9-lkp@intel.com/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@intel.com>
| Closes: 
https://lore.kernel.org/oe-kbuild-all/202310211011.pTzXR2o9-lkp@intel.com/

All errors (new ones prefixed by >>):

    In file included from kernel/bpf/task_iter.c:9:
    In file included from include/linux/filter.h:9:
    In file included from include/linux/bpf.h:31:
    In file included from include/linux/memcontrol.h:13:
    In file included from include/linux/cgroup.h:26:
    In file included from include/linux/kernel_stat.h:9:
    In file included from include/linux/interrupt.h:11:
    In file included from include/linux/hardirq.h:11:
    In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1:
    In file included from include/asm-generic/hardirq.h:17:
    In file included from include/linux/irq.h:20:
    In file included from include/linux/io.h:13:
    In file included from arch/hexagon/include/asm/io.h:337:
    include/asm-generic/io.h:547:31: warning: performing pointer 
arithmetic on a null pointer has undefined behavior 
[-Wnull-pointer-arithmetic]
            val = __raw_readb(PCI_IOBASE + addr);
                              ~~~~~~~~~~ ^
    include/asm-generic/io.h:560:61: warning: performing pointer 
arithmetic on a null pointer has undefined behavior 
[-Wnull-pointer-arithmetic]
            val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + 
addr));
                                                            ~~~~~~~~~~ ^
    include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded 
from macro '__le16_to_cpu'
    #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
                                                      ^
    In file included from kernel/bpf/task_iter.c:9:
    In file included from include/linux/filter.h:9:
    In file included from include/linux/bpf.h:31:
    In file included from include/linux/memcontrol.h:13:
    In file included from include/linux/cgroup.h:26:
    In file included from include/linux/kernel_stat.h:9:
    In file included from include/linux/interrupt.h:11:
    In file included from include/linux/hardirq.h:11:
    In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1:
    In file included from include/asm-generic/hardirq.h:17:
    In file included from include/linux/irq.h:20:
    In file included from include/linux/io.h:13:
    In file included from arch/hexagon/include/asm/io.h:337:
    include/asm-generic/io.h:573:61: warning: performing pointer 
arithmetic on a null pointer has undefined behavior 
[-Wnull-pointer-arithmetic]
            val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + 
addr));
                                                            ~~~~~~~~~~ ^
    include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded 
from macro '__le32_to_cpu'
    #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
                                                      ^
    In file included from kernel/bpf/task_iter.c:9:
    In file included from include/linux/filter.h:9:
    In file included from include/linux/bpf.h:31:
    In file included from include/linux/memcontrol.h:13:
    In file included from include/linux/cgroup.h:26:
    In file included from include/linux/kernel_stat.h:9:
    In file included from include/linux/interrupt.h:11:
    In file included from include/linux/hardirq.h:11:
    In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1:
    In file included from include/asm-generic/hardirq.h:17:
    In file included from include/linux/irq.h:20:
    In file included from include/linux/io.h:13:
    In file included from arch/hexagon/include/asm/io.h:337:
    include/asm-generic/io.h:584:33: warning: performing pointer 
arithmetic on a null pointer has undefined behavior 
[-Wnull-pointer-arithmetic]
            __raw_writeb(value, PCI_IOBASE + addr);
                                ~~~~~~~~~~ ^
    include/asm-generic/io.h:594:59: warning: performing pointer 
arithmetic on a null pointer has undefined behavior 
[-Wnull-pointer-arithmetic]
            __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + 
addr);
                                                          ~~~~~~~~~~ ^
    include/asm-generic/io.h:604:59: warning: performing pointer 
arithmetic on a null pointer has undefined behavior 
[-Wnull-pointer-arithmetic]
            __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + 
addr);
                                                          ~~~~~~~~~~ ^
 >> kernel/bpf/task_iter.c:919:7: error: use of undeclared identifier 
'CSS_TASK_ITER_PROCS'
            case CSS_TASK_ITER_PROCS | CSS_TASK_ITER_THREADED:
                 ^
 >> kernel/bpf/task_iter.c:919:29: error: use of undeclared identifier 
'CSS_TASK_ITER_THREADED'
            case CSS_TASK_ITER_PROCS | CSS_TASK_ITER_THREADED:
                                       ^
    kernel/bpf/task_iter.c:920:7: error: use of undeclared identifier 
'CSS_TASK_ITER_PROCS'
            case CSS_TASK_ITER_PROCS:
                 ^
 >> kernel/bpf/task_iter.c:927:46: error: invalid application of 
'sizeof' to an incomplete type 'struct css_task_iter'
            kit->css_it = bpf_mem_alloc(&bpf_global_ma, sizeof(struct 
css_task_iter));
                                                        ^ 
~~~~~~~~~~~~~~~~~~~~~~
    kernel/bpf/task_iter.c:902:9: note: forward declaration of 'struct 
css_task_iter'
            struct css_task_iter *css_it;
                   ^
 >> kernel/bpf/task_iter.c:930:2: error: call to undeclared function 
'css_task_iter_start'; ISO C99 and later do not support implicit 
function declarations [-Wimplicit-function-declaration]
            css_task_iter_start(css, flags, kit->css_it);
            ^
    kernel/bpf/task_iter.c:930:2: note: did you mean '__sg_page_iter_start'?
    include/linux/scatterlist.h:573:6: note: '__sg_page_iter_start' 
declared here
    void __sg_page_iter_start(struct sg_page_iter *piter,
         ^
 >> kernel/bpf/task_iter.c:940:9: error: call to undeclared function 
'css_task_iter_next'; ISO C99 and later do not support implicit function 
declarations [-Wimplicit-function-declaration]
            return css_task_iter_next(kit->css_it);
                   ^
 >> kernel/bpf/task_iter.c:940:9: error: incompatible integer to pointer 
conversion returning 'int' from a function with result type 'struct 
task_struct *' [-Wint-conversion]
            return css_task_iter_next(kit->css_it);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 >> kernel/bpf/task_iter.c:949:2: error: call to undeclared function 
'css_task_iter_end'; ISO C99 and later do not support implicit function 
declarations [-Wimplicit-function-declaration]
            css_task_iter_end(kit->css_it);
            ^
    6 warnings and 8 errors generated.


vim +/CSS_TASK_ITER_PROCS +919 kernel/bpf/task_iter.c

    904	
    905	__diag_push();
    906	__diag_ignore_all("-Wmissing-prototypes",
    907			  "Global functions as their definitions will be in vmlinux BTF");
    908	
    909	__bpf_kfunc int bpf_iter_css_task_new(struct bpf_iter_css_task *it,
    910			struct cgroup_subsys_state *css, unsigned int flags)
    911	{
    912		struct bpf_iter_css_task_kern *kit = (void *)it;
    913	
    914		BUILD_BUG_ON(sizeof(struct bpf_iter_css_task_kern) != 
sizeof(struct bpf_iter_css_task));
    915		BUILD_BUG_ON(__alignof__(struct bpf_iter_css_task_kern) !=
    916						__alignof__(struct bpf_iter_css_task));
    917		kit->css_it = NULL;
    918		switch (flags) {
  > 919		case CSS_TASK_ITER_PROCS | CSS_TASK_ITER_THREADED:
  > 920		case CSS_TASK_ITER_PROCS:
    921		case 0:
    922			break;
    923		default:
    924			return -EINVAL;
    925		}
    926	
  > 927		kit->css_it = bpf_mem_alloc(&bpf_global_ma, sizeof(struct 
css_task_iter));
    928		if (!kit->css_it)
    929			return -ENOMEM;
  > 930		css_task_iter_start(css, flags, kit->css_it);
    931		return 0;
    932	}
    933	
    934	__bpf_kfunc struct task_struct *bpf_iter_css_task_next(struct 
bpf_iter_css_task *it)
    935	{
    936		struct bpf_iter_css_task_kern *kit = (void *)it;
    937	
    938		if (!kit->css_it)
    939			return NULL;
  > 940		return css_task_iter_next(kit->css_it);
    941	}
    942	
    943	__bpf_kfunc void bpf_iter_css_task_destroy(struct 
bpf_iter_css_task *it)
    944	{
    945		struct bpf_iter_css_task_kern *kit = (void *)it;
    946	
    947		if (!kit->css_it)
    948			return;
  > 949		css_task_iter_end(kit->css_it);
    950		bpf_mem_free(&bpf_global_ma, kit->css_it);
    951	}
    952	

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


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-10-21  3:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-20 13:27 [PATCH] bpf: hide cgroup functions for configs without cgroups Arnd Bergmann
2023-10-20 17:26 ` Alexei Starovoitov
2023-10-20 20:06   ` Arnd Bergmann
2023-10-21  3:45     ` Chuyi Zhou

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox