All of lore.kernel.org
 help / color / mirror / Atom feed
From: Puranjay Mohan <puranjay@kernel.org>
To: kernel test robot <lkp@intel.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Alexei Starovoitov <ast@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	bpf@vger.kernel.org, Daniel Borkmann <daniel@iogearbox.net>,
	"David S. Miller" <davem@davemloft.net>,
	Eduard Zingerman <eddyz87@gmail.com>,
	Eric Dumazet <edumazet@google.com>, Hao Luo <haoluo@google.com>,
	Helge Deller <deller@gmx.de>, Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Jiri Olsa <jolsa@kernel.org>,
	John Fastabend <john.fastabend@gmail.com>,
	KP Singh <kpsingh@kernel.org>,
	linux-kernel@vger.kernel.org, linux-parisc@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	Martin KaFai Lau <martin.lau@linux.dev>,
	Mykola Lysenko <mykolal@fb.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Paolo Abeni <pabeni@redhat.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Song Liu <song@kernel.org>, Stanislav Fomichev <sdf@fomichev.me>
Cc: oe-kbuild-all@lists.linux.dev,
	Linux Memory Management List <linux-mm@kvack.org>,
	netdev@vger.kernel.org
Subject: Re: [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs
Date: Fri, 25 Oct 2024 10:11:11 +0000	[thread overview]
Message-ID: <mb61po738bigw.fsf@kernel.org> (raw)
In-Reply-To: <202410251552.LR73LP4V-lkp@intel.com>

[-- Attachment #1: Type: text/plain, Size: 13619 bytes --]

kernel test robot <lkp@intel.com> writes:

> Hi Puranjay,
>
> 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/Puranjay-Mohan/net-checksum-move-from32to16-to-generic-header/20241023-234347
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
> patch link:    https://lore.kernel.org/r/20241023153922.86909-3-puranjay%40kernel.org
> patch subject: [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs
> config: i386-randconfig-061-20241025 (https://download.01.org/0day-ci/archive/20241025/202410251552.LR73LP4V-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241025/202410251552.LR73LP4V-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/202410251552.LR73LP4V-lkp@intel.com/
>
> sparse warnings: (new ones prefixed by >>)
>    net/core/filter.c:1423:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct sock_filter const *filter @@     got struct sock_filter [noderef] __user *filter @@
>    net/core/filter.c:1423:39: sparse:     expected struct sock_filter const *filter
>    net/core/filter.c:1423:39: sparse:     got struct sock_filter [noderef] __user *filter
>    net/core/filter.c:1501:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct sock_filter const *filter @@     got struct sock_filter [noderef] __user *filter @@
>    net/core/filter.c:1501:39: sparse:     expected struct sock_filter const *filter
>    net/core/filter.c:1501:39: sparse:     got struct sock_filter [noderef] __user *filter
>    net/core/filter.c:2321:45: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __be32 [usertype] daddr @@     got unsigned int [usertype] ipv4_nh @@
>    net/core/filter.c:2321:45: sparse:     expected restricted __be32 [usertype] daddr
>    net/core/filter.c:2321:45: sparse:     got unsigned int [usertype] ipv4_nh
>    net/core/filter.c:10993:31: sparse: sparse: symbol 'sk_filter_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11000:27: sparse: sparse: symbol 'sk_filter_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11004:31: sparse: sparse: symbol 'tc_cls_act_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11013:27: sparse: sparse: symbol 'tc_cls_act_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11017:31: sparse: sparse: symbol 'xdp_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11029:31: sparse: sparse: symbol 'cg_skb_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11035:27: sparse: sparse: symbol 'cg_skb_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11039:31: sparse: sparse: symbol 'lwt_in_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11045:27: sparse: sparse: symbol 'lwt_in_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11049:31: sparse: sparse: symbol 'lwt_out_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11055:27: sparse: sparse: symbol 'lwt_out_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11059:31: sparse: sparse: symbol 'lwt_xmit_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11066:27: sparse: sparse: symbol 'lwt_xmit_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11070:31: sparse: sparse: symbol 'lwt_seg6local_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11076:27: sparse: sparse: symbol 'lwt_seg6local_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11079:31: sparse: sparse: symbol 'cg_sock_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11085:27: sparse: sparse: symbol 'cg_sock_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11088:31: sparse: sparse: symbol 'cg_sock_addr_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11094:27: sparse: sparse: symbol 'cg_sock_addr_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11097:31: sparse: sparse: symbol 'sock_ops_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11103:27: sparse: sparse: symbol 'sock_ops_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11106:31: sparse: sparse: symbol 'sk_skb_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11113:27: sparse: sparse: symbol 'sk_skb_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11116:31: sparse: sparse: symbol 'sk_msg_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11123:27: sparse: sparse: symbol 'sk_msg_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11126:31: sparse: sparse: symbol 'flow_dissector_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11132:27: sparse: sparse: symbol 'flow_dissector_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11460:31: sparse: sparse: symbol 'sk_reuseport_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11466:27: sparse: sparse: symbol 'sk_reuseport_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11668:27: sparse: sparse: symbol 'sk_lookup_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11672:31: sparse: sparse: symbol 'sk_lookup_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:1931:43: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __wsum [usertype] diff @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1931:43: sparse:     expected restricted __wsum [usertype] diff
>    net/core/filter.c:1931:43: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1934:36: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __be16 [usertype] old @@     got unsigned long long [usertype] from @@
>    net/core/filter.c:1934:36: sparse:     expected restricted __be16 [usertype] old
>    net/core/filter.c:1934:36: sparse:     got unsigned long long [usertype] from
>    net/core/filter.c:1934:42: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __be16 [usertype] new @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1934:42: sparse:     expected restricted __be16 [usertype] new
>    net/core/filter.c:1934:42: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1937:36: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __be32 [usertype] from @@     got unsigned long long [usertype] from @@
>    net/core/filter.c:1937:36: sparse:     expected restricted __be32 [usertype] from
>    net/core/filter.c:1937:36: sparse:     got unsigned long long [usertype] from
>    net/core/filter.c:1937:42: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __be32 [usertype] to @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1937:42: sparse:     expected restricted __be32 [usertype] to
>    net/core/filter.c:1937:42: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1982:59: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __wsum [usertype] diff @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1982:59: sparse:     expected restricted __wsum [usertype] diff
>    net/core/filter.c:1982:59: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1985:52: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __be16 [usertype] from @@     got unsigned long long [usertype] from @@
>    net/core/filter.c:1985:52: sparse:     expected restricted __be16 [usertype] from
>    net/core/filter.c:1985:52: sparse:     got unsigned long long [usertype] from
>    net/core/filter.c:1985:58: sparse: sparse: incorrect type in argument 4 (different base types) @@     expected restricted __be16 [usertype] to @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1985:58: sparse:     expected restricted __be16 [usertype] to
>    net/core/filter.c:1985:58: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1988:52: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __be32 [usertype] from @@     got unsigned long long [usertype] from @@
>    net/core/filter.c:1988:52: sparse:     expected restricted __be32 [usertype] from
>    net/core/filter.c:1988:52: sparse:     got unsigned long long [usertype] from
>    net/core/filter.c:1988:58: sparse: sparse: incorrect type in argument 4 (different base types) @@     expected restricted __be32 [usertype] to @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1988:58: sparse:     expected restricted __be32 [usertype] to
>    net/core/filter.c:1988:58: sparse:     got unsigned long long [usertype] to
>>> net/core/filter.c:2023:48: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned int sum @@     got restricted __wsum @@
>    net/core/filter.c:2023:48: sparse:     expected unsigned int sum
>    net/core/filter.c:2023:48: sparse:     got restricted __wsum
>    net/core/filter.c:2026:52: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned int sum @@     got restricted __wsum @@
>    net/core/filter.c:2026:52: sparse:     expected unsigned int sum
>    net/core/filter.c:2026:52: sparse:     got restricted __wsum
>    net/core/filter.c:2029:40: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned int sum @@     got restricted __wsum @@
>    net/core/filter.c:2029:40: sparse:     expected unsigned int sum
>    net/core/filter.c:2029:40: sparse:     got restricted __wsum
>    net/core/filter.c:2031:16: sparse: sparse: incorrect type in return expression (different base types) @@     expected unsigned long long @@     got restricted __wsum [usertype] seed @@
>    net/core/filter.c:2031:16: sparse:     expected unsigned long long
>    net/core/filter.c:2031:16: sparse:     got restricted __wsum [usertype] seed
>    net/core/filter.c:2053:35: sparse: sparse: incorrect type in return expression (different base types) @@     expected unsigned long long @@     got restricted __wsum [usertype] csum @@
>    net/core/filter.c:2053:35: sparse:     expected unsigned long long
>    net/core/filter.c:2053:35: sparse:     got restricted __wsum [usertype] csum
>
> vim +2023 net/core/filter.c
>
>   2009	
>   2010	BPF_CALL_5(bpf_csum_diff, __be32 *, from, u32, from_size,
>   2011		   __be32 *, to, u32, to_size, __wsum, seed)
>   2012	{
>   2013		/* This is quite flexible, some examples:
>   2014		 *
>   2015		 * from_size == 0, to_size > 0,  seed := csum --> pushing data
>   2016		 * from_size > 0,  to_size == 0, seed := csum --> pulling data
>   2017		 * from_size > 0,  to_size > 0,  seed := 0    --> diffing data
>   2018		 *
>   2019		 * Even for diffing, from_size and to_size don't need to be equal.
>   2020		 */
>   2021	
>   2022		if (from_size && to_size)
>> 2023			return csum_from32to16(csum_sub(csum_partial(to, to_size, seed),
>   2024							csum_partial(from, from_size, 0)));
>   2025		if (to_size)
>   2026			return csum_from32to16(csum_partial(to, to_size, seed));
>   2027	
>   2028		if (from_size)
>   2029			return csum_from32to16(~csum_partial(from, from_size, ~seed));
>   2030	
>   2031		return seed;
>   2032	}
>   2033	

This file has a lot of such sparse warnings. Specifically, to fix the
warning introduced by me, I can apply the following diff:

--- >8 ---

diff --git a/net/core/filter.c b/net/core/filter.c
index e00bec7de9ed..b94037f29b2a 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -2019,16 +2019,18 @@ BPF_CALL_5(bpf_csum_diff, __be32 *, from, u32, from_size,
         * Even for diffing, from_size and to_size don't need to be equal.
         */

+       __wsum ret = seed;
+
        if (from_size && to_size)
-               return csum_from32to16(csum_sub(csum_partial(to, to_size, seed),
-                                               csum_partial(from, from_size, 0)));
+               ret = csum_sub(csum_partial(to, to_size, seed), csum_partial(from, from_size, 0));
+
        if (to_size)
-               return csum_from32to16(csum_partial(to, to_size, seed));
+               ret =  csum_partial(to, to_size, seed);

        if (from_size)
-               return csum_from32to16(~csum_partial(from, from_size, ~seed));
+               ret = ~csum_partial(from, from_size, ~seed);

-       return seed;
+       return csum_from32to16((__force unsigned int)ret);
 }

--- 8< ---

If others feel that fixing these warnings is useful, I can send another
version with above diff. I will then also send a separate patch to fix
all other such warnings in this file.


Thanks,
Puranjay

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 255 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Puranjay Mohan <puranjay@kernel.org>
To: kernel test robot <lkp@intel.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Alexei Starovoitov <ast@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	bpf@vger.kernel.org, Daniel Borkmann <daniel@iogearbox.net>,
	"David S. Miller" <davem@davemloft.net>,
	Eduard Zingerman <eddyz87@gmail.com>,
	Eric Dumazet <edumazet@google.com>, Hao Luo <haoluo@google.com>,
	Helge Deller <deller@gmx.de>, Jakub Kicinski <kuba@kernel.org>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Jiri Olsa <jolsa@kernel.org>,
	John Fastabend <john.fastabend@gmail.com>,
	KP Singh <kpsingh@kernel.org>,
	linux-kernel@vger.kernel.org, linux-parisc@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	Martin KaFai Lau <martin.lau@linux.dev>,
	Mykola Lysenko <mykolal@fb.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Paolo Abeni <pabeni@redhat.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Song Liu <song@kernel.org>, Stanislav Fomichev <sdf@fomichev.me>
Cc: oe-kbuild-all@lists.linux.dev,
	Linux Memory Management List <linux-mm@kvack.org>,
	netdev@vger.kernel.org
Subject: Re: [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs
Date: Fri, 25 Oct 2024 10:11:11 +0000	[thread overview]
Message-ID: <mb61po738bigw.fsf@kernel.org> (raw)
In-Reply-To: <202410251552.LR73LP4V-lkp@intel.com>


[-- Attachment #1.1: Type: text/plain, Size: 13619 bytes --]

kernel test robot <lkp@intel.com> writes:

> Hi Puranjay,
>
> 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/Puranjay-Mohan/net-checksum-move-from32to16-to-generic-header/20241023-234347
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
> patch link:    https://lore.kernel.org/r/20241023153922.86909-3-puranjay%40kernel.org
> patch subject: [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs
> config: i386-randconfig-061-20241025 (https://download.01.org/0day-ci/archive/20241025/202410251552.LR73LP4V-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241025/202410251552.LR73LP4V-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/202410251552.LR73LP4V-lkp@intel.com/
>
> sparse warnings: (new ones prefixed by >>)
>    net/core/filter.c:1423:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct sock_filter const *filter @@     got struct sock_filter [noderef] __user *filter @@
>    net/core/filter.c:1423:39: sparse:     expected struct sock_filter const *filter
>    net/core/filter.c:1423:39: sparse:     got struct sock_filter [noderef] __user *filter
>    net/core/filter.c:1501:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct sock_filter const *filter @@     got struct sock_filter [noderef] __user *filter @@
>    net/core/filter.c:1501:39: sparse:     expected struct sock_filter const *filter
>    net/core/filter.c:1501:39: sparse:     got struct sock_filter [noderef] __user *filter
>    net/core/filter.c:2321:45: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __be32 [usertype] daddr @@     got unsigned int [usertype] ipv4_nh @@
>    net/core/filter.c:2321:45: sparse:     expected restricted __be32 [usertype] daddr
>    net/core/filter.c:2321:45: sparse:     got unsigned int [usertype] ipv4_nh
>    net/core/filter.c:10993:31: sparse: sparse: symbol 'sk_filter_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11000:27: sparse: sparse: symbol 'sk_filter_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11004:31: sparse: sparse: symbol 'tc_cls_act_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11013:27: sparse: sparse: symbol 'tc_cls_act_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11017:31: sparse: sparse: symbol 'xdp_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11029:31: sparse: sparse: symbol 'cg_skb_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11035:27: sparse: sparse: symbol 'cg_skb_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11039:31: sparse: sparse: symbol 'lwt_in_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11045:27: sparse: sparse: symbol 'lwt_in_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11049:31: sparse: sparse: symbol 'lwt_out_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11055:27: sparse: sparse: symbol 'lwt_out_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11059:31: sparse: sparse: symbol 'lwt_xmit_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11066:27: sparse: sparse: symbol 'lwt_xmit_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11070:31: sparse: sparse: symbol 'lwt_seg6local_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11076:27: sparse: sparse: symbol 'lwt_seg6local_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11079:31: sparse: sparse: symbol 'cg_sock_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11085:27: sparse: sparse: symbol 'cg_sock_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11088:31: sparse: sparse: symbol 'cg_sock_addr_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11094:27: sparse: sparse: symbol 'cg_sock_addr_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11097:31: sparse: sparse: symbol 'sock_ops_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11103:27: sparse: sparse: symbol 'sock_ops_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11106:31: sparse: sparse: symbol 'sk_skb_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11113:27: sparse: sparse: symbol 'sk_skb_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11116:31: sparse: sparse: symbol 'sk_msg_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11123:27: sparse: sparse: symbol 'sk_msg_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11126:31: sparse: sparse: symbol 'flow_dissector_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11132:27: sparse: sparse: symbol 'flow_dissector_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11460:31: sparse: sparse: symbol 'sk_reuseport_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:11466:27: sparse: sparse: symbol 'sk_reuseport_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11668:27: sparse: sparse: symbol 'sk_lookup_prog_ops' was not declared. Should it be static?
>    net/core/filter.c:11672:31: sparse: sparse: symbol 'sk_lookup_verifier_ops' was not declared. Should it be static?
>    net/core/filter.c:1931:43: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __wsum [usertype] diff @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1931:43: sparse:     expected restricted __wsum [usertype] diff
>    net/core/filter.c:1931:43: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1934:36: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __be16 [usertype] old @@     got unsigned long long [usertype] from @@
>    net/core/filter.c:1934:36: sparse:     expected restricted __be16 [usertype] old
>    net/core/filter.c:1934:36: sparse:     got unsigned long long [usertype] from
>    net/core/filter.c:1934:42: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __be16 [usertype] new @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1934:42: sparse:     expected restricted __be16 [usertype] new
>    net/core/filter.c:1934:42: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1937:36: sparse: sparse: incorrect type in argument 2 (different base types) @@     expected restricted __be32 [usertype] from @@     got unsigned long long [usertype] from @@
>    net/core/filter.c:1937:36: sparse:     expected restricted __be32 [usertype] from
>    net/core/filter.c:1937:36: sparse:     got unsigned long long [usertype] from
>    net/core/filter.c:1937:42: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __be32 [usertype] to @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1937:42: sparse:     expected restricted __be32 [usertype] to
>    net/core/filter.c:1937:42: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1982:59: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __wsum [usertype] diff @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1982:59: sparse:     expected restricted __wsum [usertype] diff
>    net/core/filter.c:1982:59: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1985:52: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __be16 [usertype] from @@     got unsigned long long [usertype] from @@
>    net/core/filter.c:1985:52: sparse:     expected restricted __be16 [usertype] from
>    net/core/filter.c:1985:52: sparse:     got unsigned long long [usertype] from
>    net/core/filter.c:1985:58: sparse: sparse: incorrect type in argument 4 (different base types) @@     expected restricted __be16 [usertype] to @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1985:58: sparse:     expected restricted __be16 [usertype] to
>    net/core/filter.c:1985:58: sparse:     got unsigned long long [usertype] to
>    net/core/filter.c:1988:52: sparse: sparse: incorrect type in argument 3 (different base types) @@     expected restricted __be32 [usertype] from @@     got unsigned long long [usertype] from @@
>    net/core/filter.c:1988:52: sparse:     expected restricted __be32 [usertype] from
>    net/core/filter.c:1988:52: sparse:     got unsigned long long [usertype] from
>    net/core/filter.c:1988:58: sparse: sparse: incorrect type in argument 4 (different base types) @@     expected restricted __be32 [usertype] to @@     got unsigned long long [usertype] to @@
>    net/core/filter.c:1988:58: sparse:     expected restricted __be32 [usertype] to
>    net/core/filter.c:1988:58: sparse:     got unsigned long long [usertype] to
>>> net/core/filter.c:2023:48: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned int sum @@     got restricted __wsum @@
>    net/core/filter.c:2023:48: sparse:     expected unsigned int sum
>    net/core/filter.c:2023:48: sparse:     got restricted __wsum
>    net/core/filter.c:2026:52: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned int sum @@     got restricted __wsum @@
>    net/core/filter.c:2026:52: sparse:     expected unsigned int sum
>    net/core/filter.c:2026:52: sparse:     got restricted __wsum
>    net/core/filter.c:2029:40: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected unsigned int sum @@     got restricted __wsum @@
>    net/core/filter.c:2029:40: sparse:     expected unsigned int sum
>    net/core/filter.c:2029:40: sparse:     got restricted __wsum
>    net/core/filter.c:2031:16: sparse: sparse: incorrect type in return expression (different base types) @@     expected unsigned long long @@     got restricted __wsum [usertype] seed @@
>    net/core/filter.c:2031:16: sparse:     expected unsigned long long
>    net/core/filter.c:2031:16: sparse:     got restricted __wsum [usertype] seed
>    net/core/filter.c:2053:35: sparse: sparse: incorrect type in return expression (different base types) @@     expected unsigned long long @@     got restricted __wsum [usertype] csum @@
>    net/core/filter.c:2053:35: sparse:     expected unsigned long long
>    net/core/filter.c:2053:35: sparse:     got restricted __wsum [usertype] csum
>
> vim +2023 net/core/filter.c
>
>   2009	
>   2010	BPF_CALL_5(bpf_csum_diff, __be32 *, from, u32, from_size,
>   2011		   __be32 *, to, u32, to_size, __wsum, seed)
>   2012	{
>   2013		/* This is quite flexible, some examples:
>   2014		 *
>   2015		 * from_size == 0, to_size > 0,  seed := csum --> pushing data
>   2016		 * from_size > 0,  to_size == 0, seed := csum --> pulling data
>   2017		 * from_size > 0,  to_size > 0,  seed := 0    --> diffing data
>   2018		 *
>   2019		 * Even for diffing, from_size and to_size don't need to be equal.
>   2020		 */
>   2021	
>   2022		if (from_size && to_size)
>> 2023			return csum_from32to16(csum_sub(csum_partial(to, to_size, seed),
>   2024							csum_partial(from, from_size, 0)));
>   2025		if (to_size)
>   2026			return csum_from32to16(csum_partial(to, to_size, seed));
>   2027	
>   2028		if (from_size)
>   2029			return csum_from32to16(~csum_partial(from, from_size, ~seed));
>   2030	
>   2031		return seed;
>   2032	}
>   2033	

This file has a lot of such sparse warnings. Specifically, to fix the
warning introduced by me, I can apply the following diff:

--- >8 ---

diff --git a/net/core/filter.c b/net/core/filter.c
index e00bec7de9ed..b94037f29b2a 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -2019,16 +2019,18 @@ BPF_CALL_5(bpf_csum_diff, __be32 *, from, u32, from_size,
         * Even for diffing, from_size and to_size don't need to be equal.
         */

+       __wsum ret = seed;
+
        if (from_size && to_size)
-               return csum_from32to16(csum_sub(csum_partial(to, to_size, seed),
-                                               csum_partial(from, from_size, 0)));
+               ret = csum_sub(csum_partial(to, to_size, seed), csum_partial(from, from_size, 0));
+
        if (to_size)
-               return csum_from32to16(csum_partial(to, to_size, seed));
+               ret =  csum_partial(to, to_size, seed);

        if (from_size)
-               return csum_from32to16(~csum_partial(from, from_size, ~seed));
+               ret = ~csum_partial(from, from_size, ~seed);

-       return seed;
+       return csum_from32to16((__force unsigned int)ret);
 }

--- 8< ---

If others feel that fixing these warnings is useful, I can send another
version with above diff. I will then also send a separate patch to fix
all other such warnings in this file.


Thanks,
Puranjay

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 255 bytes --]

[-- Attachment #2: Type: text/plain, Size: 161 bytes --]

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  reply	other threads:[~2024-10-25 10:11 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-23 15:39 [PATCH bpf-next v2 0/4] Optimize bpf_csum_diff() and homogenize for all archs Puranjay Mohan
2024-10-23 15:39 ` Puranjay Mohan
2024-10-23 15:39 ` [PATCH bpf-next v2 1/4] net: checksum: move from32to16() to generic header Puranjay Mohan
2024-10-23 15:39   ` Puranjay Mohan
2024-10-23 15:39 ` [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs Puranjay Mohan
2024-10-23 15:39   ` Puranjay Mohan
2024-10-25  7:38   ` kernel test robot
2024-10-25  7:38     ` kernel test robot
2024-10-25 10:11     ` Puranjay Mohan [this message]
2024-10-25 10:11       ` Puranjay Mohan
2024-10-25 11:32       ` Daniel Borkmann
2024-10-25 11:32         ` Daniel Borkmann
2024-10-23 15:39 ` [PATCH bpf-next v2 3/4] selftests/bpf: don't mask result of bpf_csum_diff() in test_verifier Puranjay Mohan
2024-10-23 15:39   ` Puranjay Mohan
2024-10-23 15:39 ` [PATCH bpf-next v2 4/4] selftests/bpf: Add a selftest for bpf_csum_diff() Puranjay Mohan
2024-10-23 15:39   ` Puranjay Mohan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=mb61po738bigw.fsf@kernel.org \
    --to=puranjay@kernel.org \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=akpm@linux-foundation.org \
    --cc=andrii@kernel.org \
    --cc=aou@eecs.berkeley.edu \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=deller@gmx.de \
    --cc=eddyz87@gmail.com \
    --cc=edumazet@google.com \
    --cc=haoluo@google.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=lkp@intel.com \
    --cc=martin.lau@linux.dev \
    --cc=mykolal@fb.com \
    --cc=netdev@vger.kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=pabeni@redhat.com \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=sdf@fomichev.me \
    --cc=skhan@linuxfoundation.org \
    --cc=song@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.