Hi Sheng,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on usb-serial/usb-next]
[also build test WARNING on v5.9 next-20201015]
[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/Sheng-Long-Wang/usb-serial-cp210x-add-support-to-software-flow-control/20201015-150459
base:   https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial.git 
usb-next
config: x86_64-randconfig-a004-20201014 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 
e7b4feea8e1bf520b34ad8c116abab6677344b74)
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://github.com/0day-ci/linux/commit/87886eacf097dd70bd9f9391eb329fa40706038a
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Sheng-Long-Wang/usb-serial-cp210x-add-support-to-software-flow-control/20201015-150459
        git checkout 87886eacf097dd70bd9f9391eb329fa40706038a
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/usb/serial/cp210x.c:1553:6: warning: variable 'result' is used 
>> uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
           if (((iflag & IXOFF) != (old_iflag & IXOFF)) ||
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/usb/serial/cp210x.c:1592:6: note: uninitialized use occurs here
           if (result < 0)
               ^~~~~~
   drivers/usb/serial/cp210x.c:1553:2: note: remove the 'if' if its condition 
is always true
           if (((iflag & IXOFF) != (old_iflag & IXOFF)) ||
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/usb/serial/cp210x.c:1436:12: note: initialize the variable 'result' 
to silence this warning
           int result;
                     ^
                      = 0
   1 warning generated.

vim +1553 drivers/usb/serial/cp210x.c

  1427  
  1428  static void cp210x_set_termios(struct tty_struct *tty,
  1429                  struct usb_serial_port *port, struct ktermios 
*old_termios)
  1430  {
  1431          struct device *dev = &port->dev;
  1432          unsigned int cflag, old_cflag, iflag, old_iflag;
  1433          struct cp210x_special_chars special_chars;
  1434          struct cp210x_flow_ctl flow_ctl;
  1435          u16 bits;
  1436          int result;
  1437          u32 ctl_hs;
  1438          u32 flow_repl;
  1439  
  1440          cflag = tty->termios.c_cflag;
  1441          iflag = tty->termios.c_iflag;
  1442          old_cflag = old_termios->c_cflag;
  1443          old_iflag = old_termios->c_iflag;
  1444  
  1445          if (tty->termios.c_ospeed != old_termios->c_ospeed)
  1446                  cp210x_change_speed(tty, port, old_termios);
  1447  
  1448          /* If the number of data bits is to be updated */
  1449          if ((cflag & CSIZE) != (old_cflag & CSIZE)) {
  1450                  cp210x_get_line_ctl(port, &bits);
  1451                  bits &= ~BITS_DATA_MASK;
  1452                  switch (cflag & CSIZE) {
  1453                  case CS5:
  1454                          bits |= BITS_DATA_5;
  1455                          dev_dbg(dev, "%s - data bits = 5\n", __func__);
  1456                          break;
  1457                  case CS6:
  1458                          bits |= BITS_DATA_6;
  1459                          dev_dbg(dev, "%s - data bits = 6\n", __func__);
  1460                          break;
  1461                  case CS7:
  1462                          bits |= BITS_DATA_7;
  1463                          dev_dbg(dev, "%s - data bits = 7\n", __func__);
  1464                          break;
  1465                  case CS8:
  1466                  default:
  1467                          bits |= BITS_DATA_8;
  1468                          dev_dbg(dev, "%s - data bits = 8\n", __func__);
  1469                          break;
  1470                  }
  1471                  if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, 
bits))
  1472                          dev_dbg(dev, "Number of data bits requested not 
supported by device\n");
  1473          }
  1474  
  1475          if ((cflag     & (PARENB|PARODD|CMSPAR)) !=
  1476              (old_cflag & (PARENB|PARODD|CMSPAR))) {
  1477                  cp210x_get_line_ctl(port, &bits);
  1478                  bits &= ~BITS_PARITY_MASK;
  1479                  if (cflag & PARENB) {
  1480                          if (cflag & CMSPAR) {
  1481                                  if (cflag & PARODD) {
  1482                                          bits |= BITS_PARITY_MARK;
  1483                                          dev_dbg(dev, "%s - parity = 
MARK\n", __func__);
  1484                                  } else {
  1485                                          bits |= BITS_PARITY_SPACE;
  1486                                          dev_dbg(dev, "%s - parity = 
SPACE\n", __func__);
  1487                                  }
  1488                          } else {
  1489                                  if (cflag & PARODD) {
  1490                                          bits |= BITS_PARITY_ODD;
  1491                                          dev_dbg(dev, "%s - parity = 
ODD\n", __func__);
  1492                                  } else {
  1493                                          bits |= BITS_PARITY_EVEN;
  1494                                          dev_dbg(dev, "%s - parity = 
EVEN\n", __func__);
  1495                                  }
  1496                          }
  1497                  }
  1498                  if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, 
bits))
  1499                          dev_dbg(dev, "Parity mode not supported by 
device\n");
  1500          }
  1501  
  1502          if ((cflag & CSTOPB) != (old_cflag & CSTOPB)) {
  1503                  cp210x_get_line_ctl(port, &bits);
  1504                  bits &= ~BITS_STOP_MASK;
  1505                  if (cflag & CSTOPB) {
  1506                          bits |= BITS_STOP_2;
  1507                          dev_dbg(dev, "%s - stop bits = 2\n", __func__);
  1508                  } else {
  1509                          bits |= BITS_STOP_1;
  1510                          dev_dbg(dev, "%s - stop bits = 1\n", __func__);
  1511                  }
  1512                  if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, 
bits))
  1513                          dev_dbg(dev, "Number of stop bits requested not 
supported by device\n");
  1514          }
  1515  
  1516          if ((cflag & CRTSCTS) != (old_cflag & CRTSCTS)) {
  1517                  cp210x_read_reg_block(port, CP210X_GET_FLOW, &flow_ctl,
  1518                                  sizeof(flow_ctl));
  1519                  ctl_hs = le32_to_cpu(flow_ctl.ulControlHandshake);
  1520                  flow_repl = le32_to_cpu(flow_ctl.ulFlowReplace);
  1521                  dev_dbg(dev, "%s - read ulControlHandshake=0x%08x, 
ulFlowReplace=0x%08x\n",
  1522                                  __func__, ctl_hs, flow_repl);
  1523  
  1524                  ctl_hs &= ~CP210X_SERIAL_DSR_HANDSHAKE;
  1525                  ctl_hs &= ~CP210X_SERIAL_DCD_HANDSHAKE;
  1526                  ctl_hs &= ~CP210X_SERIAL_DSR_SENSITIVITY;
  1527                  ctl_hs &= ~CP210X_SERIAL_DTR_MASK;
  1528                  ctl_hs |= 
CP210X_SERIAL_DTR_SHIFT(CP210X_SERIAL_DTR_ACTIVE);
  1529                  if (cflag & CRTSCTS) {
  1530                          ctl_hs |= CP210X_SERIAL_CTS_HANDSHAKE;
  1531  
  1532                          flow_repl &= ~CP210X_SERIAL_RTS_MASK;
  1533                          flow_repl |= CP210X_SERIAL_RTS_SHIFT(
  1534                                          CP210X_SERIAL_RTS_FLOW_CTL);
  1535                          dev_dbg(dev, "%s - flow control = CRTSCTS\n", 
__func__);
  1536                  } else {
  1537                          ctl_hs &= ~CP210X_SERIAL_CTS_HANDSHAKE;
  1538  
  1539                          flow_repl &= ~CP210X_SERIAL_RTS_MASK;
  1540                          flow_repl |= CP210X_SERIAL_RTS_SHIFT(
  1541                                          CP210X_SERIAL_RTS_ACTIVE);
  1542                          dev_dbg(dev, "%s - flow control = NONE\n", 
__func__);
  1543                  }
  1544  
  1545                  dev_dbg(dev, "%s - write ulControlHandshake=0x%08x, 
ulFlowReplace=0x%08x\n",
  1546                                  __func__, ctl_hs, flow_repl);
  1547                  flow_ctl.ulControlHandshake = cpu_to_le32(ctl_hs);
  1548                  flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl);
  1549                  cp210x_write_reg_block(port, CP210X_SET_FLOW, &flow_ctl,
  1550                                  sizeof(flow_ctl));
  1551          }
  1552  
> 1553          if (((iflag & IXOFF) != (old_iflag & IXOFF)) ||
  1554                  ((iflag & IXON) != (old_iflag & IXON))) {
  1555                  result = cp210x_get_chars(port, &special_chars);
  1556                  if (result < 0)
  1557                          goto out;
  1558  
  1559                  special_chars.bXonChar  = START_CHAR(tty);
  1560                  special_chars.bXoffChar = STOP_CHAR(tty);
  1561  
  1562                  result = cp210x_set_chars(port, &special_chars);
  1563                  if (result < 0)
  1564                          goto out;
  1565  
  1566                  result = cp210x_read_reg_block(port,
  1567                                          CP210X_GET_FLOW,
  1568                                          &flow_ctl,
  1569                                          sizeof(flow_ctl));
  1570                  if (result < 0)
  1571                          goto out;
  1572  
  1573                  flow_repl = le32_to_cpu(flow_ctl.ulFlowReplace);
  1574  
  1575                  if (iflag & IXOFF)
  1576                          flow_repl |= CP210X_SERIAL_AUTO_RECEIVE;
  1577                  else
  1578                          flow_repl &= ~CP210X_SERIAL_AUTO_RECEIVE;
  1579  
  1580                  if (iflag & IXON)
  1581                          flow_repl |= CP210X_SERIAL_AUTO_TRANSMIT;
  1582                  else
  1583                          flow_repl &= ~CP210X_SERIAL_AUTO_TRANSMIT;
  1584  
  1585                  flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl);
  1586                  result = cp210x_write_reg_block(port,
  1587                                          CP210X_SET_FLOW,
  1588                                          &flow_ctl,
  1589                                          sizeof(flow_ctl));
  1590          }
  1591  out:
  1592          if (result < 0)
  1593                  dev_err(dev, "failed to set software flow control: 
%d\n", result);
  1594  
  1595          /*
  1596           * Enable event-insertion mode only if input parity checking is
  1597           * enabled for now.
  1598           */
  1599          if (I_INPCK(tty))
  1600                  cp210x_enable_event_mode(port);
  1601          else
  1602                  cp210x_disable_event_mode(port);
  1603  }
  1604  

---
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