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]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
