* Re: [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs
[not found] <20241023153922.86909-3-puranjay@kernel.org>
@ 2024-10-25 7:38 ` kernel test robot
2024-10-25 10:11 ` Puranjay Mohan
0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2024-10-25 7:38 UTC (permalink / raw)
To: Puranjay Mohan, Albert Ou, Alexei Starovoitov, Andrew Morton,
Andrii Nakryiko, bpf, Daniel Borkmann, David S. Miller,
Eduard Zingerman, Eric Dumazet, Hao Luo, Helge Deller,
Jakub Kicinski, James E.J. Bottomley, Jiri Olsa, John Fastabend,
KP Singh, linux-kernel, linux-parisc, linux-riscv,
Martin KaFai Lau, Mykola Lysenko, Palmer Dabbelt, Paolo Abeni,
Paul Walmsley, Puranjay Mohan, Shuah Khan, Song Liu,
Stanislav Fomichev
Cc: oe-kbuild-all, Linux Memory Management List, netdev
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
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs
2024-10-25 7:38 ` [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs kernel test robot
@ 2024-10-25 10:11 ` Puranjay Mohan
2024-10-25 11:32 ` Daniel Borkmann
0 siblings, 1 reply; 3+ messages in thread
From: Puranjay Mohan @ 2024-10-25 10:11 UTC (permalink / raw)
To: kernel test robot, Albert Ou, Alexei Starovoitov, Andrew Morton,
Andrii Nakryiko, bpf, Daniel Borkmann, David S. Miller,
Eduard Zingerman, Eric Dumazet, Hao Luo, Helge Deller,
Jakub Kicinski, James E.J. Bottomley, Jiri Olsa, John Fastabend,
KP Singh, linux-kernel, linux-parisc, linux-riscv,
Martin KaFai Lau, Mykola Lysenko, Palmer Dabbelt, Paolo Abeni,
Paul Walmsley, Shuah Khan, Song Liu, Stanislav Fomichev
Cc: oe-kbuild-all, Linux Memory Management List, netdev
[-- 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 --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs
2024-10-25 10:11 ` Puranjay Mohan
@ 2024-10-25 11:32 ` Daniel Borkmann
0 siblings, 0 replies; 3+ messages in thread
From: Daniel Borkmann @ 2024-10-25 11:32 UTC (permalink / raw)
To: Puranjay Mohan, kernel test robot, Albert Ou, Alexei Starovoitov,
Andrew Morton, Andrii Nakryiko, bpf, David S. Miller,
Eduard Zingerman, Eric Dumazet, Hao Luo, Helge Deller,
Jakub Kicinski, James E.J. Bottomley, Jiri Olsa, John Fastabend,
KP Singh, linux-kernel, linux-parisc, linux-riscv,
Martin KaFai Lau, Mykola Lysenko, Palmer Dabbelt, Paolo Abeni,
Paul Walmsley, Shuah Khan, Song Liu, Stanislav Fomichev
Cc: oe-kbuild-all, Linux Memory Management List, netdev
On 10/25/24 12:11 PM, Puranjay Mohan wrote:
[...]
> 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));
Lets also pass ret into csum_partial() instead of seed given the arg
is of type __wsum there too, otherwise lgtm and yes lets fix these.
> +
> 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.
That would be great, as separate patch, agree.
Thanks,
Daniel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-12-05 15:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20241023153922.86909-3-puranjay@kernel.org>
2024-10-25 7:38 ` [PATCH bpf-next v2 2/4] bpf: bpf_csum_diff: optimize and homogenize for all archs kernel test robot
2024-10-25 10:11 ` Puranjay Mohan
2024-10-25 11:32 ` Daniel Borkmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox