tree: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.4.y head: 95a3867e897abd7811196123f81a119a75aba863 commit: 177aa4d14d912a33a4490644987ac499e8bb9e11 [8475/9999] can: mscan: mscan_rx_poll(): fix rx path lockup when returning from polling to irq mode config: powerpc64-randconfig-r031-20210517 (attached as .config) compiler: powerpc-linux-gcc (GCC) 7.5.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/commit/?id=177aa4d14d912a33a4490644987ac499e8bb9e11 git remote add linux-stable-rc https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git git fetch --no-tags linux-stable-rc linux-4.4.y git checkout 177aa4d14d912a33a4490644987ac499e8bb9e11 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-7.5.0 make.cross W=1 ARCH=powerpc64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All errors (new ones prefixed by >>): include/linux/netdevice.h:3027:2: note: in expansion of macro 'BUG_ON' BUG_ON(index >= dev->num_rx_queues); ^~~~~~ include/linux/netdevice.h:3027:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] BUG_ON(index >= dev->num_rx_queues); ^ include/linux/compiler.h:174:16: note: in definition of macro '__trace_if' ______r = !!(cond); \ ^~~~ arch/powerpc/include/asm/bug.h:75:2: note: in expansion of macro 'if' if (__builtin_constant_p(x)) { \ ^~ include/linux/netdevice.h:3027:2: note: in expansion of macro 'BUG_ON' BUG_ON(index >= dev->num_rx_queues); ^~~~~~ include/linux/netdevice.h:3027:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] BUG_ON(index >= dev->num_rx_queues); ^ include/linux/compiler.h:163:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ arch/powerpc/include/asm/bug.h:76:3: note: in expansion of macro 'if' if (x) \ ^~ include/linux/netdevice.h:3027:2: note: in expansion of macro 'BUG_ON' BUG_ON(index >= dev->num_rx_queues); ^~~~~~ include/linux/netdevice.h:3027:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] BUG_ON(index >= dev->num_rx_queues); ^ include/linux/compiler.h:163:42: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ arch/powerpc/include/asm/bug.h:76:3: note: in expansion of macro 'if' if (x) \ ^~ include/linux/netdevice.h:3027:2: note: in expansion of macro 'BUG_ON' BUG_ON(index >= dev->num_rx_queues); ^~~~~~ include/linux/netdevice.h:3027:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] BUG_ON(index >= dev->num_rx_queues); ^ include/linux/compiler.h:174:16: note: in definition of macro '__trace_if' ______r = !!(cond); \ ^~~~ arch/powerpc/include/asm/bug.h:76:3: note: in expansion of macro 'if' if (x) \ ^~ include/linux/netdevice.h:3027:2: note: in expansion of macro 'BUG_ON' BUG_ON(index >= dev->num_rx_queues); ^~~~~~ In file included from include/linux/bug.h:4:0, from include/linux/thread_info.h:11, from include/asm-generic/preempt.h:4, from arch/powerpc/include/generated/asm/preempt.h:1, from include/linux/preempt.h:59, from include/linux/spinlock.h:50, from include/linux/seqlock.h:35, from include/linux/time.h:5, from include/linux/stat.h:18, from include/linux/module.h:10, from drivers/net/can/mscan/mscan.c:23: include/linux/netdevice.h:3027:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] BUG_ON(index >= dev->num_rx_queues); ^ arch/powerpc/include/asm/bug.h:84:25: note: in definition of macro 'BUG_ON' "r" ((__force long)(x))); \ ^ In file included from include/linux/linkage.h:4:0, from include/linux/kernel.h:6, from drivers/net/can/mscan/mscan.c:22: include/linux/netdevice.h: In function 'netif_msg_init': include/linux/netdevice.h:3301:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (debug_value < 0 || debug_value >= (sizeof(u32) * 8)) ^ include/linux/compiler.h:163:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ include/linux/netdevice.h:3301:2: note: in expansion of macro 'if' if (debug_value < 0 || debug_value >= (sizeof(u32) * 8)) ^~ include/linux/netdevice.h:3301:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (debug_value < 0 || debug_value >= (sizeof(u32) * 8)) ^ include/linux/compiler.h:163:42: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ include/linux/netdevice.h:3301:2: note: in expansion of macro 'if' if (debug_value < 0 || debug_value >= (sizeof(u32) * 8)) ^~ include/linux/netdevice.h:3301:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if (debug_value < 0 || debug_value >= (sizeof(u32) * 8)) ^ include/linux/compiler.h:174:16: note: in definition of macro '__trace_if' ______r = !!(cond); \ ^~~~ include/linux/netdevice.h:3301:2: note: in expansion of macro 'if' if (debug_value < 0 || debug_value >= (sizeof(u32) * 8)) ^~ drivers/net/can/mscan/mscan.c: In function 'mscan_rx_poll': >> drivers/net/can/mscan/mscan.c:426:14: error: invalid use of void expression if (likely(napi_complete_done(&priv->napi, work_done))) { ^ include/linux/compiler.h:163:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ drivers/net/can/mscan/mscan.c:426:3: note: in expansion of macro 'if' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~ drivers/net/can/mscan/mscan.c:426:7: note: in expansion of macro 'likely' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~~~~~ >> include/linux/compiler.h:150:49: error: invalid use of void expression # define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1)) ^ include/linux/compiler.h:163:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ drivers/net/can/mscan/mscan.c:426:3: note: in expansion of macro 'if' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~ drivers/net/can/mscan/mscan.c:426:7: note: in expansion of macro 'likely' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~~~~~ include/linux/compiler.h:126:45: error: invalid use of void expression #define likely_notrace(x) __builtin_expect(!!(x), 1) ^ include/linux/compiler.h:163:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ drivers/net/can/mscan/mscan.c:426:3: note: in expansion of macro 'if' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~ include/linux/compiler.h:139:14: note: in expansion of macro 'likely_notrace' ______r = likely_notrace(x); \ ^~~~~~~~~~~~~~ include/linux/compiler.h:150:56: note: in expansion of macro '__branch_check__' # define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1)) ^~~~~~~~~~~~~~~~ drivers/net/can/mscan/mscan.c:426:7: note: in expansion of macro 'likely' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~~~~~ >> drivers/net/can/mscan/mscan.c:426:14: error: invalid use of void expression if (likely(napi_complete_done(&priv->napi, work_done))) { ^ include/linux/compiler.h:163:42: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ drivers/net/can/mscan/mscan.c:426:3: note: in expansion of macro 'if' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~ drivers/net/can/mscan/mscan.c:426:7: note: in expansion of macro 'likely' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~~~~~ >> include/linux/compiler.h:150:49: error: invalid use of void expression # define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1)) ^ include/linux/compiler.h:163:42: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ drivers/net/can/mscan/mscan.c:426:3: note: in expansion of macro 'if' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~ drivers/net/can/mscan/mscan.c:426:7: note: in expansion of macro 'likely' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~~~~~ include/linux/compiler.h:126:45: error: invalid use of void expression #define likely_notrace(x) __builtin_expect(!!(x), 1) ^ include/linux/compiler.h:163:42: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^~~~ drivers/net/can/mscan/mscan.c:426:3: note: in expansion of macro 'if' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~ include/linux/compiler.h:139:14: note: in expansion of macro 'likely_notrace' ______r = likely_notrace(x); \ ^~~~~~~~~~~~~~ include/linux/compiler.h:150:56: note: in expansion of macro '__branch_check__' # define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1)) ^~~~~~~~~~~~~~~~ drivers/net/can/mscan/mscan.c:426:7: note: in expansion of macro 'likely' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~~~~~ >> drivers/net/can/mscan/mscan.c:426:14: error: invalid use of void expression if (likely(napi_complete_done(&priv->napi, work_done))) { ^ include/linux/compiler.h:174:16: note: in definition of macro '__trace_if' ______r = !!(cond); \ ^~~~ drivers/net/can/mscan/mscan.c:426:3: note: in expansion of macro 'if' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~ drivers/net/can/mscan/mscan.c:426:7: note: in expansion of macro 'likely' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~~~~~ >> include/linux/compiler.h:150:49: error: invalid use of void expression # define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1)) ^ include/linux/compiler.h:174:16: note: in definition of macro '__trace_if' ______r = !!(cond); \ ^~~~ drivers/net/can/mscan/mscan.c:426:3: note: in expansion of macro 'if' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~ drivers/net/can/mscan/mscan.c:426:7: note: in expansion of macro 'likely' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~~~~~ include/linux/compiler.h:126:45: error: invalid use of void expression #define likely_notrace(x) __builtin_expect(!!(x), 1) ^ include/linux/compiler.h:174:16: note: in definition of macro '__trace_if' ______r = !!(cond); \ ^~~~ drivers/net/can/mscan/mscan.c:426:3: note: in expansion of macro 'if' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~ include/linux/compiler.h:139:14: note: in expansion of macro 'likely_notrace' ______r = likely_notrace(x); \ ^~~~~~~~~~~~~~ include/linux/compiler.h:150:56: note: in expansion of macro '__branch_check__' # define likely(x) (__builtin_constant_p(x) ? !!(x) : __branch_check__(x, 1)) ^~~~~~~~~~~~~~~~ drivers/net/can/mscan/mscan.c:426:7: note: in expansion of macro 'likely' if (likely(napi_complete_done(&priv->napi, work_done))) { ^~~~~~ drivers/net/can/mscan/mscan.c: In function 'mscan_start_xmit': drivers/net/can/mscan/mscan.c:222:3: warning: this statement may fall through [-Wimplicit-fallthrough=] netif_stop_queue(dev); ^~~~~~~~~~~~~~~~~~~~~ drivers/net/can/mscan/mscan.c:223:2: note: here case 2: ^~~~ vim +426 drivers/net/can/mscan/mscan.c 388 389 static int mscan_rx_poll(struct napi_struct *napi, int quota) 390 { 391 struct mscan_priv *priv = container_of(napi, struct mscan_priv, napi); 392 struct net_device *dev = napi->dev; 393 struct mscan_regs __iomem *regs = priv->reg_base; 394 struct net_device_stats *stats = &dev->stats; 395 int work_done = 0; 396 struct sk_buff *skb; 397 struct can_frame *frame; 398 u8 canrflg; 399 400 while (work_done < quota) { 401 canrflg = in_8(®s->canrflg); 402 if (!(canrflg & (MSCAN_RXF | MSCAN_ERR_IF))) 403 break; 404 405 skb = alloc_can_skb(dev, &frame); 406 if (!skb) { 407 if (printk_ratelimit()) 408 netdev_notice(dev, "packet dropped\n"); 409 stats->rx_dropped++; 410 out_8(®s->canrflg, canrflg); 411 continue; 412 } 413 414 if (canrflg & MSCAN_RXF) 415 mscan_get_rx_frame(dev, frame); 416 else if (canrflg & MSCAN_ERR_IF) 417 mscan_get_err_frame(dev, frame, canrflg); 418 419 stats->rx_packets++; 420 stats->rx_bytes += frame->can_dlc; 421 work_done++; 422 netif_receive_skb(skb); 423 } 424 425 if (work_done < quota) { > 426 if (likely(napi_complete_done(&priv->napi, work_done))) { 427 clear_bit(F_RX_PROGRESS, &priv->flags); 428 if (priv->can.state < CAN_STATE_BUS_OFF) 429 out_8(®s->canrier, priv->shadow_canrier); 430 } 431 } 432 return work_done; 433 } 434 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org