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-Bucket-LTB-Qdisc/20200709-004116
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 <l...@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-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to