Hi Xiangning",
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on net-next/master]
url:
https://github.com/0day-ci/linux/commits/YU-Xiangning/Lockless-Token-Buck...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
8cb601f15886f6d05479e46913d954e9ff237312
config: parisc-randconfig-s032-20200709 (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.2-37-gc9676a3b-dirty
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=parisc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
> net/sched/sch_ltb.c:231:35: sparse: sparse: incorrect type in
initializer (different address spaces) @@ expected void const [noderef] __percpu
*__vpp_verify @@ got struct ltb_pcpu_data * @@
> net/sched/sch_ltb.c:231:35: sparse: expected void const [noderef] __percpu
*__vpp_verify
> net/sched/sch_ltb.c:231:35: sparse: got struct ltb_pcpu_data *
net/sched/sch_ltb.c:327:35: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct ltb_pcpu_data * @@
net/sched/sch_ltb.c:327:35: sparse: expected void const [noderef] __percpu
*__vpp_verify
net/sched/sch_ltb.c:327:35: sparse: got struct ltb_pcpu_data *
> net/sched/sch_ltb.c:704:17: sparse: sparse: incompatible types in
comparison expression (different address spaces):
> net/sched/sch_ltb.c:704:17: sparse: struct ltb_class [noderef] __rcu *
> net/sched/sch_ltb.c:704:17: sparse: struct ltb_class *
net/sched/sch_ltb.c:752:17: sparse: sparse: incompatible types in comparison expression
(different address spaces):
net/sched/sch_ltb.c:752:17: sparse: struct ltb_class [noderef] __rcu *
net/sched/sch_ltb.c:752:17: sparse: struct ltb_class *
net/sched/sch_ltb.c:988:16: sparse: sparse: incompatible types in comparison expression
(different address spaces):
net/sched/sch_ltb.c:988:16: sparse: struct ltb_class [noderef] __rcu *
net/sched/sch_ltb.c:988:16: sparse: struct ltb_class *
net/sched/sch_ltb.c:1000:16: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct ltb_pcpu_data * @@
net/sched/sch_ltb.c:1000:16: sparse: expected void const [noderef] __percpu
*__vpp_verify
net/sched/sch_ltb.c:1000:16: sparse: got struct ltb_pcpu_data *
net/sched/sch_ltb.c:1029:16: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct ltb_pcpu_data * @@
net/sched/sch_ltb.c:1029:16: sparse: expected void const [noderef] __percpu
*__vpp_verify
net/sched/sch_ltb.c:1029:16: sparse: got struct ltb_pcpu_data *
net/sched/sch_ltb.c:1047:29: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct ltb_pcpu_data * @@
net/sched/sch_ltb.c:1047:29: sparse: expected void const [noderef] __percpu
*__vpp_verify
net/sched/sch_ltb.c:1047:29: sparse: got struct ltb_pcpu_data *
net/sched/sch_ltb.c:1072:27: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct ltb_pcpu_data * @@
net/sched/sch_ltb.c:1072:27: sparse: expected void const [noderef] __percpu
*__vpp_verify
net/sched/sch_ltb.c:1072:27: sparse: got struct ltb_pcpu_data *
> net/sched/sch_ltb.c:1080:24: sparse: sparse: incorrect type in
argument 1 (different address spaces) @@ expected void [noderef] __percpu *__pdata @@
got struct ltb_pcpu_data *pcpu_data @@
> net/sched/sch_ltb.c:1080:24: sparse: expected void [noderef] __percpu *__pdata
> net/sched/sch_ltb.c:1080:24: sparse: got struct ltb_pcpu_data *pcpu_data
> net/sched/sch_ltb.c:1122:24: sparse: sparse: incorrect type in assignment (different
address spaces) @@ expected struct ltb_pcpu_data *pcpu_data @@ got struct
ltb_pcpu_data [noderef] __percpu * @@
> net/sched/sch_ltb.c:1122:24: sparse: expected struct ltb_pcpu_data *pcpu_data
> net/sched/sch_ltb.c:1122:24: sparse: got struct ltb_pcpu_data [noderef] __percpu
*
net/sched/sch_ltb.c:1141:17: sparse: sparse: incorrect type in initializer
(different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@
got struct ltb_pcpu_data * @@
net/sched/sch_ltb.c:1141:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
net/sched/sch_ltb.c:1141:17: sparse: got struct ltb_pcpu_data *
net/sched/sch_ltb.c:1142:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct ltb_pcpu_data * @@
net/sched/sch_ltb.c:1142:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
net/sched/sch_ltb.c:1142:17: sparse: got struct ltb_pcpu_data *
net/sched/sch_ltb.c:1168:46: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct ltb_pcpu_data * @@
net/sched/sch_ltb.c:1168:46: sparse: expected void const [noderef] __percpu
*__vpp_verify
net/sched/sch_ltb.c:1168:46: sparse: got struct ltb_pcpu_data *
net/sched/sch_ltb.c:1176:32: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected void [noderef] __percpu *__pdata @@ got struct
ltb_pcpu_data *pcpu_data @@
net/sched/sch_ltb.c:1176:32: sparse: expected void [noderef] __percpu *__pdata
net/sched/sch_ltb.c:1176:32: sparse: got struct ltb_pcpu_data *pcpu_data
vim +231 net/sched/sch_ltb.c
181
182 static int ltb_drain(struct ltb_class *cl)
183 {
184 struct ltb_sched *ltb = qdisc_priv(cl->root_qdisc);
185 struct ltb_pcpu_sched *pcpu_q;
186 bool need_watchdog = false;
187 unsigned int npkts, bytes;
188 unsigned long now = NOW();
189 struct cpumask cpumask;
190 struct sk_buff *skb;
191 s64 timestamp;
192 int cpu;
193
194 npkts = 0;
195 bytes = 0;
196 cpumask_clear(&cpumask);
197 while (kfifo_peek(&cl->drain_queue, &skb) > 0) {
198 int len = qdisc_pkt_len(skb);
199
200 if (cl->curr_interval != now) {
201 cl->curr_interval = now;
202 timestamp = ktime_get_ns();
203 cl->bw_measured = (cl->stat_bytes - cl->last_bytes) *
204 NSEC_PER_SEC / (timestamp - cl->last_timestamp);
205 cl->last_bytes = cl->stat_bytes;
206 cl->last_timestamp = timestamp;
207 cl->bw_used = 0;
208 } else if (len + cl->bw_used > cl->maxbw) {
209 need_watchdog = true;
210 break;
211 }
212 kfifo_skip(&cl->drain_queue);
213 cl->bw_used += len;
214
215 /* Fanout */
216 cpu = ltb_skb_cb(skb)->cpu;
217 ltb_skb_cb(skb)->cpu = 0;
218 if (unlikely(kfifo_put(&cl->fanout_queues[cpu], skb) == 0)) {
219 kfree_skb(skb);
220 atomic64_inc(&cl->stat_drops);
221 } else {
222 /* Account for Generic Segmentation Offload(gso). */
223 cl->stat_bytes += len;
224 cl->stat_packets += skb_is_gso(skb) ?
225 skb_shinfo(skb)->gso_segs : 1;
226 cpumask_set_cpu(cpu, &cpumask);
227 }
228 }
229
230 for_each_cpu(cpu, &cpumask) {
231 struct Qdisc *q = per_cpu_ptr(ltb->pcpu_data,
cpu)->qdisc;
232
233 pcpu_q = (struct ltb_pcpu_sched *)qdisc_priv(q);
234 if (!(q->state & __QDISC_STATE_SCHED) && !qdisc_is_running(q))
235 irq_work_queue_on(&pcpu_q->fanout_irq_work, cpu);
236 }
237
238 return need_watchdog;
239 }
240
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org