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 <l...@intel.com>

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-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to