Hi Vincent, Thank you for the patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on v5.11-rc3 next-20210111] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Vincent-Mailhol/add-support-for-ETAS-ES58X-CAN-USB-interfaces/20210112-211624 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git a0d54b4f5b219fb31f0776e9f53aa137e78ae431 config: m68k-allmodconfig (attached as .config) compiler: m68k-linux-gcc (GCC) 9.3.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://github.com/0day-ci/linux/commit/5f55487bd139c33d619a9c8cd8dbd5cb8b558526 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Vincent-Mailhol/add-support-for-ETAS-ES58X-CAN-USB-interfaces/20210112-211624 git checkout 5f55487bd139c33d619a9c8cd8dbd5cb8b558526 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=m68k If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All errors (new ones prefixed by >>): In file included from include/linux/kernel.h:10, from drivers/net/can/usb/etas_es58x/es58x_core.c:13: include/linux/scatterlist.h: In function 'sg_set_buf': arch/m68k/include/asm/page_mm.h:174:49: warning: ordered comparison of pointer with null pointer [-Wextra] 174 | #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && (void *)(kaddr) < high_memory) | ^~ include/linux/compiler.h:78:42: note: in definition of macro 'unlikely' 78 | # define unlikely(x) __builtin_expect(!!(x), 0) | ^ include/linux/scatterlist.h:137:2: note: in expansion of macro 'BUG_ON' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~ include/linux/scatterlist.h:137:10: note: in expansion of macro 'virt_addr_valid' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~~~~~~~~~~ drivers/net/can/usb/etas_es58x/es58x_core.c: In function 'es58x_can_free_echo_skb_tail': >> drivers/net/can/usb/etas_es58x/es58x_core.c:393:52: error: 'struct can_skb_priv' has no member named 'frame_len' 393 | netdev_completed_queue(netdev, 1, can_skb_prv(skb)->frame_len); | ^~ drivers/net/can/usb/etas_es58x/es58x_core.c: In function 'es58x_can_get_echo_skb': >> drivers/net/can/usb/etas_es58x/es58x_core.c:561:29: error: too many arguments to function 'can_get_echo_skb' 561 | netdev->stats.tx_bytes += can_get_echo_skb(netdev, tail_idx, | ^~~~~~~~~~~~~~~~ In file included from drivers/net/can/usb/etas_es58x/es58x_core.h:19, from drivers/net/can/usb/etas_es58x/es58x_core.c:21: include/linux/can/dev.h:247:14: note: declared here 247 | unsigned int can_get_echo_skb(struct net_device *dev, unsigned int idx); | ^~~~~~~~~~~~~~~~ drivers/net/can/usb/etas_es58x/es58x_core.c: In function 'es58x_start_xmit': >> drivers/net/can/usb/etas_es58x/es58x_core.c:2104:14: error: implicit declaration of function 'can_skb_get_frame_len' [-Werror=implicit-function-declaration] 2104 | frame_len = can_skb_get_frame_len(skb); | ^~~~~~~~~~~~~~~~~~~~~ >> drivers/net/can/usb/etas_es58x/es58x_core.c:2106:8: error: too many arguments to function 'can_put_echo_skb' 2106 | ret = can_put_echo_skb(skb, netdev, skb_idx, frame_len); | ^~~~~~~~~~~~~~~~ In file included from drivers/net/can/usb/etas_es58x/es58x_core.h:19, from drivers/net/can/usb/etas_es58x/es58x_core.c:21: include/linux/can/dev.h:243:5: note: declared here 243 | int can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, | ^~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors -- In file included from include/linux/kernel.h:10, from drivers/net/can/usb/etas_es58x/es581_4.c:12: include/linux/scatterlist.h: In function 'sg_set_buf': arch/m68k/include/asm/page_mm.h:174:49: warning: ordered comparison of pointer with null pointer [-Wextra] 174 | #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && (void *)(kaddr) < high_memory) | ^~ include/linux/compiler.h:78:42: note: in definition of macro 'unlikely' 78 | # define unlikely(x) __builtin_expect(!!(x), 0) | ^ include/linux/scatterlist.h:137:2: note: in expansion of macro 'BUG_ON' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~ include/linux/scatterlist.h:137:10: note: in expansion of macro 'virt_addr_valid' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~~~~~~~~~~ drivers/net/can/usb/etas_es58x/es581_4.c: At top level: >> drivers/net/can/usb/etas_es58x/es581_4.c:532:19: error: 'CAN_FRAME_LEN_MAX' undeclared here (not in a function) 532 | .dql_limit_min = CAN_FRAME_LEN_MAX * 50, | ^~~~~~~~~~~~~~~~~ -- In file included from include/linux/kernel.h:10, from drivers/net/can/usb/etas_es58x/es58x_fd.c:14: include/linux/scatterlist.h: In function 'sg_set_buf': arch/m68k/include/asm/page_mm.h:174:49: warning: ordered comparison of pointer with null pointer [-Wextra] 174 | #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void *)PAGE_OFFSET && (void *)(kaddr) < high_memory) | ^~ include/linux/compiler.h:78:42: note: in definition of macro 'unlikely' 78 | # define unlikely(x) __builtin_expect(!!(x), 0) | ^ include/linux/scatterlist.h:137:2: note: in expansion of macro 'BUG_ON' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~ include/linux/scatterlist.h:137:10: note: in expansion of macro 'virt_addr_valid' 137 | BUG_ON(!virt_addr_valid(buf)); | ^~~~~~~~~~~~~~~ drivers/net/can/usb/etas_es58x/es58x_fd.c: In function 'es58x_fd_rx_can_msg': >> drivers/net/can/usb/etas_es58x/es58x_fd.c:37:15: error: implicit declaration of function 'canfd_sanitize_len' [-Werror=implicit-function-declaration] 37 | __msg_len = canfd_sanitize_len(__msg.len); \ | ^~~~~~~~~~~~~~~~~~ drivers/net/can/usb/etas_es58x/es58x_fd.c:123:24: note: in expansion of macro 'es58x_fd_sizeof_rx_tx_msg' 123 | u16 rx_can_msg_len = es58x_fd_sizeof_rx_tx_msg(*rx_can_msg); | ^~~~~~~~~~~~~~~~~~~~~~~~~ drivers/net/can/usb/etas_es58x/es58x_fd.c: At top level: >> drivers/net/can/usb/etas_es58x/es58x_fd.c:642:19: error: 'CAN_FRAME_LEN_MAX' undeclared here (not in a function) 642 | .dql_limit_min = CAN_FRAME_LEN_MAX * 15, | ^~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +393 drivers/net/can/usb/etas_es58x/es58x_core.c 377 378 /** 379 * es58x_can_free_echo_skb_tail() - Remove the oldest echo skb of the 380 * loopback FIFO. 381 * @netdev: CAN network device. 382 * 383 * Naming convention: the tail is the beginning of the FIFO, i.e. the 384 * first skb to have entered the FIFO. 385 */ 386 static void es58x_can_free_echo_skb_tail(struct net_device *netdev) 387 { 388 struct es58x_priv *priv = es58x_priv(netdev); 389 u16 tail_idx = priv->echo_skb_tail_idx; 390 struct sk_buff *skb = priv->can.echo_skb[tail_idx]; 391 unsigned long flags; 392 > 393 netdev_completed_queue(netdev, 1, can_skb_prv(skb)->frame_len); 394 can_free_echo_skb(netdev, tail_idx); 395 396 spin_lock_irqsave(&priv->echo_skb_spinlock, flags); 397 es58x_add_skb_idx(priv, &priv->echo_skb_tail_idx, 1); 398 priv->num_echo_skb--; 399 spin_unlock_irqrestore(&priv->echo_skb_spinlock, flags); 400 401 netdev->stats.tx_dropped++; 402 } 403 404 /** 405 * es58x_can_get_echo_skb_recovery() - Try to re-sync the loopback FIFO. 406 * @netdev: CAN network device. 407 * @packet_idx: Index 408 * 409 * This function should not be called under normal circumstances. In 410 * the unlikely case that one or several URB packages get dropped by 411 * the device, the index will get out of sync. Try to recover by 412 * dropping the echo skb packets with older indexes. 413 * 414 * Return: zero if recovery was successful, -EINVAL otherwise. 415 */ 416 static int es58x_can_get_echo_skb_recovery(struct net_device *netdev, 417 u32 packet_idx) 418 { 419 struct es58x_priv *priv = es58x_priv(netdev); 420 u32 current_packet_idx, first_packet_idx, num_echo_skb; 421 unsigned long flags; 422 int ret = 0; 423 424 netdev->stats.tx_errors++; 425 426 spin_lock_irqsave(&priv->echo_skb_spinlock, flags); 427 current_packet_idx = priv->current_packet_idx; 428 num_echo_skb = priv->num_echo_skb; 429 spin_unlock_irqrestore(&priv->echo_skb_spinlock, flags); 430 first_packet_idx = current_packet_idx - num_echo_skb; 431 432 if (net_ratelimit()) 433 netdev_warn(netdev, 434 "Bad loopback packet index: %u. First index: %u, end index %u, num_echo_skb: %02u/%02u\n", 435 packet_idx, first_packet_idx, 436 current_packet_idx - 1, num_echo_skb, 437 priv->can.echo_skb_max); 438 439 if (packet_idx < first_packet_idx) { 440 if (net_ratelimit()) 441 netdev_warn(netdev, 442 "Received loopback is from the past. Ignoring it\n"); 443 ret = -EINVAL; 444 } else if ((s32)(packet_idx - current_packet_idx) >= 0LL) { 445 if (net_ratelimit()) 446 netdev_err(netdev, 447 "Received loopback is from the future. Ignoring it\n"); 448 ret = -EINVAL; 449 } else { 450 if (net_ratelimit()) 451 netdev_warn(netdev, 452 "Loopback recovery: dropping %u echo skb from index %u to %u\n", 453 packet_idx - first_packet_idx, 454 first_packet_idx, packet_idx - 1); 455 while (first_packet_idx != packet_idx) { 456 if (num_echo_skb == 0) 457 return -EINVAL; 458 es58x_can_free_echo_skb_tail(netdev); 459 first_packet_idx++; 460 num_echo_skb--; 461 } 462 } 463 return ret; 464 } 465 466 /** 467 * es58x_can_get_echo_skb() - Get the skb from the loopback FIFO and 468 * loop it back locally. 469 * @netdev: CAN network device. 470 * @packet_idx: Index of the first packet. 471 * @tstamps: Array of hardware timestamps received from a ES58X device. 472 * @pkts: Number of packets (and so, length of @tstamps). 473 * 474 * Callback function for when we receive a self reception acknowledgment. 475 * Retrieves the skb from the loopback FIFO, sets its hardware timestamp 476 * (the actual time it was sent) and loops it back locally. 477 * 478 * The device has to be active (i.e. network interface UP and not in 479 * bus off state or restarting). 480 * 481 * Packet indexes must be consecutive (i.e. index of first packet is 482 * @packet_idx, index of second packet is @packet_idx + 1 and index of 483 * last packet is @packet_idx + @pkts - 1). 484 * 485 * Return: zero on success. 486 */ 487 int es58x_can_get_echo_skb(struct net_device *netdev, u32 packet_idx, 488 u64 *tstamps, unsigned int pkts) 489 { 490 struct es58x_priv *priv = es58x_priv(netdev); 491 u16 tail_idx; 492 u32 first_packet_idx; 493 unsigned long flags; 494 unsigned int rx_total_frame_len = 0; 495 int i; 496 int ret = 0; 497 498 if (!netif_running(netdev)) { 499 if (net_ratelimit()) 500 netdev_info(netdev, 501 "%s: %s is down, dropping %d loopback packets\n", 502 __func__, netdev->name, pkts); 503 netdev->stats.tx_dropped++; 504 return 0; 505 } else if (!es58x_is_can_state_active(netdev)) { 506 if (net_ratelimit()) 507 netdev_dbg(netdev, 508 "Bus is off or device is restarting. Ignoring %u loopback packets from index %u\n", 509 pkts, packet_idx); 510 /* stats.tx_dropped will be (or was already) 511 * incremented by 512 * drivers/net/can/net/dev.c:can_flush_echo_skb(). 513 */ 514 return 0; 515 } else if (priv->num_echo_skb == 0) { 516 if (net_ratelimit()) 517 netdev_warn(netdev, 518 "Received %u loopback packets from index: %u but echo skb queue is empty.\n", 519 pkts, packet_idx); 520 netdev->stats.tx_dropped += pkts; 521 return 0; 522 } 523 524 spin_lock_irqsave(&priv->echo_skb_spinlock, flags); 525 first_packet_idx = priv->current_packet_idx - priv->num_echo_skb; 526 if (first_packet_idx != packet_idx) { 527 spin_unlock_irqrestore(&priv->echo_skb_spinlock, flags); 528 ret = es58x_can_get_echo_skb_recovery(netdev, packet_idx); 529 if (ret < 0) { 530 if (net_ratelimit()) 531 netdev_warn(netdev, 532 "Could not find echo skb for loopback packet index: %u\n", 533 packet_idx); 534 return 0; 535 } 536 spin_lock_irqsave(&priv->echo_skb_spinlock, flags); 537 first_packet_idx = 538 priv->current_packet_idx - priv->num_echo_skb; 539 WARN_ON(first_packet_idx != packet_idx); 540 } 541 tail_idx = priv->echo_skb_tail_idx; 542 if (priv->num_echo_skb < pkts) { 543 int pkts_drop = pkts - priv->num_echo_skb; 544 545 if (net_ratelimit()) 546 netdev_err(netdev, 547 "Received %u loopback packets but have only %d echo skb. Dropping %d echo skb\n", 548 pkts, priv->num_echo_skb, pkts_drop); 549 netdev->stats.tx_dropped += pkts_drop; 550 pkts -= pkts_drop; 551 } 552 spin_unlock_irqrestore(&priv->echo_skb_spinlock, flags); 553 554 for (i = 0; i < pkts; i++) { 555 struct sk_buff *skb = priv->can.echo_skb[tail_idx]; 556 unsigned int frame_len = 0; 557 558 if (skb) 559 es58x_set_skb_timestamp(netdev, skb, tstamps[i]); 560 > 561 netdev->stats.tx_bytes += can_get_echo_skb(netdev, tail_idx, 562 &frame_len); 563 rx_total_frame_len += frame_len; 564 565 es58x_add_skb_idx(priv, &tail_idx, 1); 566 } 567 568 spin_lock_irqsave(&priv->echo_skb_spinlock, flags); 569 es58x_add_skb_idx(priv, &priv->echo_skb_tail_idx, pkts); 570 priv->num_echo_skb -= pkts; 571 spin_unlock_irqrestore(&priv->echo_skb_spinlock, flags); 572 573 netdev_completed_queue(netdev, pkts, rx_total_frame_len); 574 netdev->stats.tx_packets += pkts; 575 576 priv->err_passive_before_rtx_success = 0; 577 es58x_netif_wake_queue(netdev); 578 579 return ret; 580 } 581 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip