[cilium:pr/meta4 2/2] net/core/dev.c:3968:44: sparse: sparse: incorrect type in argument 1 (different address spaces)
From: kernel test robot
Date: Sun Jun 19 2022 - 02:37:05 EST
tree: https://github.com/cilium/linux.git pr/meta4
head: dcea837b60f0d9f8f3cdae284680659042f560d1
commit: dcea837b60f0d9f8f3cdae284680659042f560d1 [2/2] bpf: Add fd-based API to attach tc BPF programs
config: i386-randconfig-s002 (https://download.01.org/0day-ci/archive/20220619/202206191401.lhKuX4Q0-lkp@xxxxxxxxx/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-30-g92122700-dirty
# https://github.com/cilium/linux/commit/dcea837b60f0d9f8f3cdae284680659042f560d1
git remote add cilium https://github.com/cilium/linux.git
git fetch --no-tags cilium pr/meta4
git checkout dcea837b60f0d9f8f3cdae284680659042f560d1
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash net/core/ net/sched/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@xxxxxxxxx>
sparse warnings: (new ones prefixed by >>)
net/core/dev.c:3323:23: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected restricted __wsum [usertype] csum @@ got unsigned int @@
net/core/dev.c:3323:23: sparse: expected restricted __wsum [usertype] csum
net/core/dev.c:3323:23: sparse: got unsigned int
net/core/dev.c:3323:23: sparse: sparse: cast from restricted __wsum
>> net/core/dev.c:3968:44: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sch_entry *entry @@ got struct sch_entry [noderef] __rcu *sch_ingress @@
net/core/dev.c:3968:44: sparse: expected struct sch_entry *entry
net/core/dev.c:3968:44: sparse: got struct sch_entry [noderef] __rcu *sch_ingress
>> net/core/dev.c:4008:44: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct sch_entry *entry @@ got struct sch_entry [noderef] __rcu *sch_egress @@
net/core/dev.c:4008:44: sparse: expected struct sch_entry *entry
net/core/dev.c:4008:44: sparse: got struct sch_entry [noderef] __rcu *sch_egress
net/core/dev.c:3827:17: sparse: sparse: context imbalance in '__dev_queue_xmit' - different lock contexts for basic block
net/core/dev.c:5199:17: sparse: sparse: context imbalance in 'net_tx_action' - different lock contexts for basic block
--
>> net/sched/sch_ingress.c:91:66: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected struct mini_Qdisc [noderef] __rcu **p_miniq @@ got struct mini_Qdisc ** @@
net/sched/sch_ingress.c:91:66: sparse: expected struct mini_Qdisc [noderef] __rcu **p_miniq
net/sched/sch_ingress.c:91:66: sparse: got struct mini_Qdisc **
net/sched/sch_ingress.c:241:74: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected struct mini_Qdisc [noderef] __rcu **p_miniq @@ got struct mini_Qdisc ** @@
net/sched/sch_ingress.c:241:74: sparse: expected struct mini_Qdisc [noderef] __rcu **p_miniq
net/sched/sch_ingress.c:241:74: sparse: got struct mini_Qdisc **
net/sched/sch_ingress.c:261:73: sparse: sparse: incorrect type in argument 3 (different address spaces) @@ expected struct mini_Qdisc [noderef] __rcu **p_miniq @@ got struct mini_Qdisc ** @@
net/sched/sch_ingress.c:261:73: sparse: expected struct mini_Qdisc [noderef] __rcu **p_miniq
net/sched/sch_ingress.c:261:73: sparse: got struct mini_Qdisc **
vim +3968 net/core/dev.c
3955
3956 #ifdef CONFIG_NET_XGRESS
3957 #ifdef CONFIG_NET_CLS_ACT
3958 unsigned int sch_cls_ingress(const void *pskb, const struct bpf_insn *null)
3959 {
3960 struct sk_buff *skb = (void *)pskb;
3961 struct mini_Qdisc *miniq;
3962 struct tcf_result res;
3963 int ret;
3964
3965 tc_skb_cb(skb)->mru = 0;
3966 tc_skb_cb(skb)->post_ct = false;
3967
> 3968 miniq = dev_sch_entry_pair(skb->dev->sch_ingress)->miniq;
3969 if (!miniq)
3970 return TC_ACT_UNSPEC;
3971 mini_qdisc_bstats_cpu_update(miniq, skb);
3972 __skb_pull(skb, skb->mac_len);
3973 ret = tcf_classify(skb, miniq->block, miniq->filter_list, &res, false);
3974 __skb_push(skb, skb->mac_len);
3975 /* Only tcf related quirks below. */
3976 switch (ret) {
3977 case TC_ACT_SHOT:
3978 mini_qdisc_qstats_cpu_drop(miniq);
3979 break;
3980 case TC_ACT_OK:
3981 case TC_ACT_RECLASSIFY:
3982 skb->tc_index = TC_H_MIN(res.classid);
3983 ret = TC_ACT_OK;
3984 break;
3985 case TC_ACT_STOLEN:
3986 case TC_ACT_QUEUED:
3987 case TC_ACT_TRAP:
3988 ret = TC_ACT_CONSUMED;
3989 break;
3990 case TC_ACT_CONSUMED:
3991 /* Bump refcount given skb is now in use elsewhere. */
3992 skb_get(skb);
3993 break;
3994 }
3995 return ret;
3996 }
3997
3998 unsigned int sch_cls_egress(const void *pskb, const struct bpf_insn *null)
3999 {
4000 struct sk_buff *skb = (void *)pskb;
4001 struct mini_Qdisc *miniq;
4002 struct tcf_result res;
4003 int ret;
4004
4005 tc_skb_cb(skb)->mru = 0;
4006 tc_skb_cb(skb)->post_ct = false;
4007
> 4008 miniq = dev_sch_entry_pair(skb->dev->sch_egress)->miniq;
4009 if (!miniq)
4010 return TC_ACT_UNSPEC;
4011 mini_qdisc_bstats_cpu_update(miniq, skb);
4012 ret = tcf_classify(skb, miniq->block, miniq->filter_list, &res, false);
4013 /* Only tcf related quirks below. */
4014 switch (ret) {
4015 case TC_ACT_SHOT:
4016 mini_qdisc_qstats_cpu_drop(miniq);
4017 break;
4018 case TC_ACT_OK:
4019 case TC_ACT_RECLASSIFY:
4020 skb->tc_index = TC_H_MIN(res.classid);
4021 ret = TC_ACT_OK;
4022 break;
4023 case TC_ACT_STOLEN:
4024 case TC_ACT_QUEUED:
4025 case TC_ACT_TRAP:
4026 ret = TC_ACT_CONSUMED;
4027 break;
4028 case TC_ACT_CONSUMED:
4029 /* Bump refcount given skb is now in use elsewhere. */
4030 skb_get(skb);
4031 break;
4032 }
4033 return ret;
4034 }
4035 #endif /* CONFIG_NET_CLS_ACT */
4036
--
0-DAY CI Kernel Test Service
https://01.org/lkp