CC: [email protected]
CC: [email protected]
CC: Linux Memory Management List <[email protected]>
TO: Stephane Grosjean <[email protected]>
CC: "Marc Kleine-Budde" <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git 
master
head:   7999516e20bd9bb5d1f7351cbd05ca529a3a8d60
commit: c11dcee758302702a83c6e85e4c4c3d9af42d2b3 [2741/6030] can: peak_usb: 
pcan_usb_decode_error(): upgrade handling of bus state changes
:::::: branch date: 33 hours ago
:::::: commit date: 2 weeks ago
config: x86_64-randconfig-c001-20210807 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
41a6b50c25961addc04438b567ee1f4ef9e40f98)
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
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=c11dcee758302702a83c6e85e4c4c3d9af42d2b3
        git remote add linux-next 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout c11dcee758302702a83c6e85e4c4c3d9af42d2b3
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
           ^
   drivers/clk/clk-si5341.c:854:23: note: Division by zero
                   rate = *parent_rate / (r << 1);
                          ~~~~~~~~~~~~~^~~~~~~~~~
   drivers/clk/clk-si5341.c:893:2: warning: Value stored to 'err' is never read 
[clang-analyzer-deadcode.DeadStores]
           err = regmap_bulk_write(output->data->regmap,
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk-si5341.c:893:2: note: Value stored to 'err' is never read
           err = regmap_bulk_write(output->data->regmap,
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   4 warnings generated.
   drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c:699:2: warning: Call to 
function 'strcpy' is insecure as it does not provide bounding of the memory 
buffer. Replace unbounded copy functions with analogous functions that support 
length arguments such as 'strlcpy'. CWE-119 
[clang-analyzer-security.insecureAPI.strcpy]
           strcpy(cmd->map_ch_req.name, name);
           ^~~~~~
   drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c:699:2: note: Call to 
function 'strcpy' is insecure as it does not provide bounding of the memory 
buffer. Replace unbounded copy functions with analogous functions that support 
length arguments such as 'strlcpy'. CWE-119
           strcpy(cmd->map_ch_req.name, name);
           ^~~~~~
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   3 warnings generated.
   Suppressed 3 warnings (3 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   6 warnings generated.
   drivers/net/can/usb/peak_usb/pcan_usb.c:394:14: warning: Assigned value is 
garbage or undefined [clang-analyzer-core.uninitialized.Assign]
                   *device_id = args[0];
                              ^ ~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:389:8: note: Calling 
'pcan_usb_wait_rsp'
           err = pcan_usb_wait_rsp(dev, PCAN_USB_CMD_DEVID, PCAN_USB_GET, args);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:188:6: note: Assuming the condition 
is true
           if (!(dev->state & PCAN_USB_STATE_CONNECTED))
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:188:2: note: Taking true branch
           if (!(dev->state & PCAN_USB_STATE_CONNECTED))
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:189:3: note: Returning without 
writing to '*p'
                   return 0;
                   ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:189:3: note: Returning zero, which 
participates in a condition later
                   return 0;
                   ^~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:389:8: note: Returning from 
'pcan_usb_wait_rsp'
           err = pcan_usb_wait_rsp(dev, PCAN_USB_CMD_DEVID, PCAN_USB_GET, args);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:390:6: note: 'err' is 0
           if (err)
               ^~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:390:2: note: Taking false branch
           if (err)
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:394:14: note: Assigned value is 
garbage or undefined
                   *device_id = args[0];
                              ^ ~~~~~~~
>> drivers/net/can/usb/peak_usb/pcan_usb.c:523:32: warning: Dereference of null 
>> pointer [clang-analyzer-core.NullDereference]
           mc->netdev->stats.rx_bytes += cf->len;
                                         ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:734:6: note: Assuming field 
'actual_length' is > PCAN_USB_MSG_HEADER_LEN
           if (urb->actual_length > PCAN_USB_MSG_HEADER_LEN) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:734:2: note: Taking true branch
           if (urb->actual_length > PCAN_USB_MSG_HEADER_LEN) {
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:735:9: note: Calling 
'pcan_usb_decode_msg'
                   err = pcan_usb_decode_msg(dev, urb->transfer_buffer,
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:708:11: note: Left side of '&&' is 
false
                   .pdev = container_of(dev, struct pcan_usb, dev),
                           ^
   include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:708:11: note: Taking false branch
                   .pdev = container_of(dev, struct pcan_usb, dev),
                           ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:328:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:308:3: note: expanded from macro 
'__compiletime_assert'
                   if (!(condition))                                       \
                   ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:708:11: note: Loop condition is 
false.  Exiting loop
                   .pdev = container_of(dev, struct pcan_usb, dev),
                           ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG'
   #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                       ^
   include/linux/compiler_types.h:328:2: note: expanded from macro 
'compiletime_assert'
           _compiletime_assert(condition, msg, __compiletime_assert_, 
__COUNTER__)
           ^
   include/linux/compiler_types.h:316:2: note: expanded from macro 
'_compiletime_assert'
           __compiletime_assert(condition, msg, prefix, suffix)
           ^
   include/linux/compiler_types.h:306:2: note: expanded from macro 
'__compiletime_assert'
           do {                                                            \
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:712:16: note: Assuming field 
'rec_idx' is < field 'rec_cnt'
           for (err = 0; mc.rec_idx < mc.rec_cnt && !err; mc.rec_idx++) {
                         ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:712:16: note: Left side of '&&' is 
true
   drivers/net/can/usb/peak_usb/pcan_usb.c:712:2: note: Loop condition is true. 
 Entering loop body
           for (err = 0; mc.rec_idx < mc.rec_cnt && !err; mc.rec_idx++) {
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:716:7: note: Assuming the condition 
is true
                   if (sl & PCAN_USB_STATUSLEN_INTERNAL) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:716:3: note: Taking true branch
                   if (sl & PCAN_USB_STATUSLEN_INTERNAL) {
                   ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:717:10: note: Calling 
'pcan_usb_decode_status'
                           err = pcan_usb_decode_status(&mc, sl);
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:564:6: note: Assuming the condition 
is false
           if ((mc->ptr + 2) > mc->end)
               ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:564:2: note: Taking false branch
           if ((mc->ptr + 2) > mc->end)
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:571:6: note: Assuming the condition 
is false
           if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:571:2: note: Taking false branch
           if (status_len & PCAN_USB_STATUSLEN_TIMESTAMP) {
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:583:2: note: Control jumps to 'case 
1:'  at line 584
           switch (f) {
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:585:9: note: Calling 
'pcan_usb_decode_error'
                   err = pcan_usb_decode_error(mc, n, status_len);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:458:6: note: Assuming 'n' is not 
equal to PCAN_USB_ERROR_QOVR
           if (n == PCAN_USB_ERROR_QOVR)
               ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:458:2: note: Taking false branch
           if (n == PCAN_USB_ERROR_QOVR)
           ^
   drivers/net/can/usb/peak_usb/pcan_usb.c:463:8: note: Value assigned to 'cf'
           skb = alloc_can_err_skb(mc->netdev, &cf);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:465:6: note: Assuming the condition 
is true
           if (n & PCAN_USB_ERROR_RXQOVR) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/can/usb/peak_usb/pcan_usb.c:465:2: note: Taking true branch

vim +523 drivers/net/can/usb/peak_usb/pcan_usb.c

46be265d338833 Stephane Grosjean 2012-03-02  380  
46be265d338833 Stephane Grosjean 2012-03-02  381  /*
46be265d338833 Stephane Grosjean 2012-03-02  382   * read device id from device
46be265d338833 Stephane Grosjean 2012-03-02  383   */
46be265d338833 Stephane Grosjean 2012-03-02  384  static int 
pcan_usb_get_device_id(struct peak_usb_device *dev, u32 *device_id)
46be265d338833 Stephane Grosjean 2012-03-02  385  {
46be265d338833 Stephane Grosjean 2012-03-02  386        u8 
args[PCAN_USB_CMD_ARGS_LEN];
46be265d338833 Stephane Grosjean 2012-03-02  387        int err;
46be265d338833 Stephane Grosjean 2012-03-02  388  
a8bb19dfab5a64 Stephane Grosjean 2019-12-06  389        err = 
pcan_usb_wait_rsp(dev, PCAN_USB_CMD_DEVID, PCAN_USB_GET, args);
46be265d338833 Stephane Grosjean 2012-03-02 @390        if (err)
46be265d338833 Stephane Grosjean 2012-03-02  391                
netdev_err(dev->netdev, "getting device id failure: %d\n", err);
426718f3fe0e43 Marc Kleine-Budde 2021-04-05  392  
1d0214a0f5db10 Stephane Grosjean 2021-06-25  393        else
46be265d338833 Stephane Grosjean 2012-03-02  394                *device_id = 
args[0];
46be265d338833 Stephane Grosjean 2012-03-02  395  
46be265d338833 Stephane Grosjean 2012-03-02  396        return err;
46be265d338833 Stephane Grosjean 2012-03-02  397  }
46be265d338833 Stephane Grosjean 2012-03-02  398  
46be265d338833 Stephane Grosjean 2012-03-02  399  /*
46be265d338833 Stephane Grosjean 2012-03-02  400   * update current time ref 
with received timestamp
46be265d338833 Stephane Grosjean 2012-03-02  401   */
46be265d338833 Stephane Grosjean 2012-03-02  402  static int 
pcan_usb_update_ts(struct pcan_usb_msg_context *mc)
46be265d338833 Stephane Grosjean 2012-03-02  403  {
46be265d338833 Stephane Grosjean 2012-03-02  404        if ((mc->ptr + 2) > 
mc->end)
46be265d338833 Stephane Grosjean 2012-03-02  405                return -EINVAL;
46be265d338833 Stephane Grosjean 2012-03-02  406  
bd573ea5720470 Marc Kleine-Budde 2021-04-05  407        mc->ts16 = 
get_unaligned_le16(mc->ptr);
46be265d338833 Stephane Grosjean 2012-03-02  408  
46be265d338833 Stephane Grosjean 2012-03-02  409        if (mc->rec_idx > 0)
46be265d338833 Stephane Grosjean 2012-03-02  410                
peak_usb_update_ts_now(&mc->pdev->time_ref, mc->ts16);
46be265d338833 Stephane Grosjean 2012-03-02  411        else
46be265d338833 Stephane Grosjean 2012-03-02  412                
peak_usb_set_ts_now(&mc->pdev->time_ref, mc->ts16);
46be265d338833 Stephane Grosjean 2012-03-02  413  
46be265d338833 Stephane Grosjean 2012-03-02  414        return 0;
46be265d338833 Stephane Grosjean 2012-03-02  415  }
46be265d338833 Stephane Grosjean 2012-03-02  416  
46be265d338833 Stephane Grosjean 2012-03-02  417  /*
46be265d338833 Stephane Grosjean 2012-03-02  418   * decode received timestamp
46be265d338833 Stephane Grosjean 2012-03-02  419   */
46be265d338833 Stephane Grosjean 2012-03-02  420  static int 
pcan_usb_decode_ts(struct pcan_usb_msg_context *mc, u8 first_packet)
46be265d338833 Stephane Grosjean 2012-03-02  421  {
46be265d338833 Stephane Grosjean 2012-03-02  422        /* only 1st packet 
supplies a word timestamp */
46be265d338833 Stephane Grosjean 2012-03-02  423        if (first_packet) {
46be265d338833 Stephane Grosjean 2012-03-02  424                if ((mc->ptr + 
2) > mc->end)
46be265d338833 Stephane Grosjean 2012-03-02  425                        return 
-EINVAL;
46be265d338833 Stephane Grosjean 2012-03-02  426  
bd573ea5720470 Marc Kleine-Budde 2021-04-05  427                mc->ts16 = 
get_unaligned_le16(mc->ptr);
46be265d338833 Stephane Grosjean 2012-03-02  428                mc->prev_ts8 = 
mc->ts16 & 0x00ff;
bd573ea5720470 Marc Kleine-Budde 2021-04-05  429  
bd573ea5720470 Marc Kleine-Budde 2021-04-05  430                mc->ptr += 2;
46be265d338833 Stephane Grosjean 2012-03-02  431        } else {
46be265d338833 Stephane Grosjean 2012-03-02  432                u8 ts8;
46be265d338833 Stephane Grosjean 2012-03-02  433  
46be265d338833 Stephane Grosjean 2012-03-02  434                if ((mc->ptr + 
1) > mc->end)
46be265d338833 Stephane Grosjean 2012-03-02  435                        return 
-EINVAL;
46be265d338833 Stephane Grosjean 2012-03-02  436  
46be265d338833 Stephane Grosjean 2012-03-02  437                ts8 = 
*mc->ptr++;
46be265d338833 Stephane Grosjean 2012-03-02  438  
46be265d338833 Stephane Grosjean 2012-03-02  439                if (ts8 < 
mc->prev_ts8)
46be265d338833 Stephane Grosjean 2012-03-02  440                        
mc->ts16 += 0x100;
46be265d338833 Stephane Grosjean 2012-03-02  441  
46be265d338833 Stephane Grosjean 2012-03-02  442                mc->ts16 &= 
0xff00;
46be265d338833 Stephane Grosjean 2012-03-02  443                mc->ts16 |= ts8;
46be265d338833 Stephane Grosjean 2012-03-02  444                mc->prev_ts8 = 
ts8;
46be265d338833 Stephane Grosjean 2012-03-02  445        }
46be265d338833 Stephane Grosjean 2012-03-02  446  
46be265d338833 Stephane Grosjean 2012-03-02  447        return 0;
46be265d338833 Stephane Grosjean 2012-03-02  448  }
46be265d338833 Stephane Grosjean 2012-03-02  449  
46be265d338833 Stephane Grosjean 2012-03-02  450  static int 
pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n,
46be265d338833 Stephane Grosjean 2012-03-02  451                                
 u8 status_len)
46be265d338833 Stephane Grosjean 2012-03-02  452  {
46be265d338833 Stephane Grosjean 2012-03-02  453        struct sk_buff *skb;
46be265d338833 Stephane Grosjean 2012-03-02  454        struct can_frame *cf;
c11dcee7583027 Stephane Grosjean 2021-07-15  455        enum can_state 
new_state = CAN_STATE_ERROR_ACTIVE;
46be265d338833 Stephane Grosjean 2012-03-02  456  
46be265d338833 Stephane Grosjean 2012-03-02  457        /* ignore this error 
until 1st ts received */
46be265d338833 Stephane Grosjean 2012-03-02  458        if (n == 
PCAN_USB_ERROR_QOVR)
46be265d338833 Stephane Grosjean 2012-03-02  459                if 
(!mc->pdev->time_ref.tick_count)
46be265d338833 Stephane Grosjean 2012-03-02  460                        return 
0;
46be265d338833 Stephane Grosjean 2012-03-02  461  
c11dcee7583027 Stephane Grosjean 2021-07-15  462        /* allocate an skb to 
store the error frame */
c11dcee7583027 Stephane Grosjean 2021-07-15  463        skb = 
alloc_can_err_skb(mc->netdev, &cf);
46be265d338833 Stephane Grosjean 2012-03-02  464  
c11dcee7583027 Stephane Grosjean 2021-07-15  465        if (n & 
PCAN_USB_ERROR_RXQOVR) {
c11dcee7583027 Stephane Grosjean 2021-07-15  466                /* data overrun 
interrupt */
c11dcee7583027 Stephane Grosjean 2021-07-15  467                
netdev_dbg(mc->netdev, "data overrun interrupt\n");
c11dcee7583027 Stephane Grosjean 2021-07-15  468                
mc->netdev->stats.rx_over_errors++;
c11dcee7583027 Stephane Grosjean 2021-07-15  469                
mc->netdev->stats.rx_errors++;
c11dcee7583027 Stephane Grosjean 2021-07-15  470                if (cf) {
c11dcee7583027 Stephane Grosjean 2021-07-15  471                        
cf->can_id |= CAN_ERR_CRTL;
c11dcee7583027 Stephane Grosjean 2021-07-15  472                        
cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
46be265d338833 Stephane Grosjean 2012-03-02  473                }
46be265d338833 Stephane Grosjean 2012-03-02  474        }
46be265d338833 Stephane Grosjean 2012-03-02  475  
c11dcee7583027 Stephane Grosjean 2021-07-15  476        if (n & 
PCAN_USB_ERROR_TXQFULL)
c11dcee7583027 Stephane Grosjean 2021-07-15  477                
netdev_dbg(mc->netdev, "device Tx queue full)\n");
c11dcee7583027 Stephane Grosjean 2021-07-15  478  
46be265d338833 Stephane Grosjean 2012-03-02  479        if (n & 
PCAN_USB_ERROR_BUS_OFF) {
46be265d338833 Stephane Grosjean 2012-03-02  480                new_state = 
CAN_STATE_BUS_OFF;
c11dcee7583027 Stephane Grosjean 2021-07-15  481        } else if (n & 
PCAN_USB_ERROR_BUS_HEAVY) {
c11dcee7583027 Stephane Grosjean 2021-07-15  482                new_state = 
((mc->pdev->bec.txerr >= 128) ||
c11dcee7583027 Stephane Grosjean 2021-07-15  483                             
(mc->pdev->bec.rxerr >= 128)) ?
c11dcee7583027 Stephane Grosjean 2021-07-15  484                                
CAN_STATE_ERROR_PASSIVE :
c11dcee7583027 Stephane Grosjean 2021-07-15  485                                
CAN_STATE_ERROR_WARNING;
c11dcee7583027 Stephane Grosjean 2021-07-15  486        } else {
c11dcee7583027 Stephane Grosjean 2021-07-15  487                new_state = 
CAN_STATE_ERROR_ACTIVE;
46be265d338833 Stephane Grosjean 2012-03-02  488        }
46be265d338833 Stephane Grosjean 2012-03-02  489  
c11dcee7583027 Stephane Grosjean 2021-07-15  490        /* handle change of 
state */
c11dcee7583027 Stephane Grosjean 2021-07-15  491        if (new_state != 
mc->pdev->dev.can.state) {
c11dcee7583027 Stephane Grosjean 2021-07-15  492                enum can_state 
tx_state =
c11dcee7583027 Stephane Grosjean 2021-07-15  493                        
(mc->pdev->bec.txerr >= mc->pdev->bec.rxerr) ?
c11dcee7583027 Stephane Grosjean 2021-07-15  494                                
new_state : 0;
c11dcee7583027 Stephane Grosjean 2021-07-15  495                enum can_state 
rx_state =
c11dcee7583027 Stephane Grosjean 2021-07-15  496                        
(mc->pdev->bec.txerr <= mc->pdev->bec.rxerr) ?
c11dcee7583027 Stephane Grosjean 2021-07-15  497                                
new_state : 0;
46be265d338833 Stephane Grosjean 2012-03-02  498  
c11dcee7583027 Stephane Grosjean 2021-07-15  499                
can_change_state(mc->netdev, cf, tx_state, rx_state);
46be265d338833 Stephane Grosjean 2012-03-02  500  
c11dcee7583027 Stephane Grosjean 2021-07-15  501                if (new_state 
== CAN_STATE_BUS_OFF) {
46be265d338833 Stephane Grosjean 2012-03-02  502                        
can_bus_off(mc->netdev);
c11dcee7583027 Stephane Grosjean 2021-07-15  503                } else if (cf 
&& (cf->can_id & CAN_ERR_CRTL)) {
c11dcee7583027 Stephane Grosjean 2021-07-15  504                        /* 
Supply TX/RX error counters in case of
c11dcee7583027 Stephane Grosjean 2021-07-15  505                         * 
controller error.
c11dcee7583027 Stephane Grosjean 2021-07-15  506                         */
ea8b33bde76c8f Stephane Grosjean 2019-12-06  507                        
cf->data[6] = mc->pdev->bec.txerr;
ea8b33bde76c8f Stephane Grosjean 2019-12-06  508                        
cf->data[7] = mc->pdev->bec.rxerr;
ea8b33bde76c8f Stephane Grosjean 2019-12-06  509                }
46be265d338833 Stephane Grosjean 2012-03-02  510        }
46be265d338833 Stephane Grosjean 2012-03-02  511  
c11dcee7583027 Stephane Grosjean 2021-07-15  512        if (!skb)
c11dcee7583027 Stephane Grosjean 2021-07-15  513                return -ENOMEM;
46be265d338833 Stephane Grosjean 2012-03-02  514  
46be265d338833 Stephane Grosjean 2012-03-02  515        if (status_len & 
PCAN_USB_STATUSLEN_TIMESTAMP) {
c9faaa09e2a133 Oliver Hartkopp   2012-11-21  516                struct 
skb_shared_hwtstamps *hwts = skb_hwtstamps(skb);
c9faaa09e2a133 Oliver Hartkopp   2012-11-21  517  
d5888a1e75c799 Arnd Bergmann     2017-11-03  518                
peak_usb_get_ts_time(&mc->pdev->time_ref, mc->ts16,
d5888a1e75c799 Arnd Bergmann     2017-11-03  519                                
     &hwts->hwtstamp);
46be265d338833 Stephane Grosjean 2012-03-02  520        }
46be265d338833 Stephane Grosjean 2012-03-02  521  
46be265d338833 Stephane Grosjean 2012-03-02  522        
mc->netdev->stats.rx_packets++;
c7b74967799b1a Oliver Hartkopp   2020-11-20 @523        
mc->netdev->stats.rx_bytes += cf->len;
1c0ee046957648 Marc Kleine-Budde 2015-07-11  524        netif_rx(skb);
46be265d338833 Stephane Grosjean 2012-03-02  525  
46be265d338833 Stephane Grosjean 2012-03-02  526        return 0;
46be265d338833 Stephane Grosjean 2012-03-02  527  }
46be265d338833 Stephane Grosjean 2012-03-02  528  

:::::: The code at line 523 was first introduced by commit
:::::: c7b74967799b1af52b3045d69d4c26836b2d41de can: replace can_dlc as 
variable/element for payload length

:::::: TO: Oliver Hartkopp <[email protected]>
:::::: CC: Marc Kleine-Budde <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to