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.gi...
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 <lkp(a)intel.com>
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@lists.01.org