Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'usb-serial-5.16-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-next

Johan writes:

USB-serial updates for 5.16-rc1

Here are the USB-serial updates for 5.16-rc1, including:

- conversions of usb_control_msg() calls to use the new wrappers where
appropriate
- fix of the keyspan probe error handling after a low-order allocation
failure (e.g. due to fault injection)
- allow hung up ports to be runtime suspended

Included are also some related clean ups.

All have been in linux-next with no reported issues.

* tag 'usb-serial-5.16-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial:
USB: serial: keyspan: fix memleak on probe errors
USB: serial: cp210x: use usb_control_msg_recv() and usb_control_msg_send()
USB: serial: ch314: use usb_control_msg_recv()
USB: serial: kl5kusb105: drop line-status helper
USB: serial: kl5kusb105: simplify line-status handling
USB: serial: kl5kusb105: clean up line-status handling
USB: serial: kl5kusb105: use usb_control_msg_recv() and usb_control_msg_send()
USB: serial: keyspan_pda: use usb_control_msg_recv()
USB: serial: ftdi_sio: use usb_control_msg_recv()
USB: serial: f81232: use usb_control_msg_recv() and usb_control_msg_send()
USB: serial: allow hung up ports to be suspended
USB: serial: clean up core error labels

+215 -384
+26 -59
drivers/usb/serial/ch341.c
··· 131 131 dev_dbg(&dev->dev, "%s - (%02x,%04x,%04x,%u)\n", __func__, 132 132 request, value, index, bufsize); 133 133 134 - r = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), request, 135 - USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 136 - value, index, buf, bufsize, DEFAULT_TIMEOUT); 137 - if (r < (int)bufsize) { 138 - if (r >= 0) { 139 - dev_err(&dev->dev, 140 - "short control message received (%d < %u)\n", 141 - r, bufsize); 142 - r = -EIO; 143 - } 144 - 134 + r = usb_control_msg_recv(dev, 0, request, 135 + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 136 + value, index, buf, bufsize, DEFAULT_TIMEOUT, 137 + GFP_KERNEL); 138 + if (r) { 145 139 dev_err(&dev->dev, "failed to receive control message: %d\n", 146 140 r); 147 141 return r; ··· 281 287 static int ch341_get_status(struct usb_device *dev, struct ch341_private *priv) 282 288 { 283 289 const unsigned int size = 2; 284 - char *buffer; 290 + u8 buffer[2]; 285 291 int r; 286 292 unsigned long flags; 287 293 288 - buffer = kmalloc(size, GFP_KERNEL); 289 - if (!buffer) 290 - return -ENOMEM; 291 - 292 294 r = ch341_control_in(dev, CH341_REQ_READ_REG, 0x0706, 0, buffer, size); 293 - if (r < 0) 294 - goto out; 295 + if (r) 296 + return r; 295 297 296 298 spin_lock_irqsave(&priv->lock, flags); 297 299 priv->msr = (~(*buffer)) & CH341_BITS_MODEM_STAT; 298 300 spin_unlock_irqrestore(&priv->lock, flags); 299 301 300 - out: kfree(buffer); 301 - return r; 302 + return 0; 302 303 } 303 304 304 305 /* -------------------------------------------------------------------------- */ ··· 301 312 static int ch341_configure(struct usb_device *dev, struct ch341_private *priv) 302 313 { 303 314 const unsigned int size = 2; 304 - char *buffer; 315 + u8 buffer[2]; 305 316 int r; 306 - 307 - buffer = kmalloc(size, GFP_KERNEL); 308 - if (!buffer) 309 - return -ENOMEM; 310 317 311 318 /* expect two bytes 0x27 0x00 */ 312 319 r = ch341_control_in(dev, CH341_REQ_READ_VERSION, 0, 0, buffer, size); 313 - if (r < 0) 314 - goto out; 320 + if (r) 321 + return r; 315 322 dev_dbg(&dev->dev, "Chip version: 0x%02x\n", buffer[0]); 316 323 317 324 r = ch341_control_out(dev, CH341_REQ_SERIAL_INIT, 0, 0); 318 325 if (r < 0) 319 - goto out; 326 + return r; 320 327 321 328 r = ch341_set_baudrate_lcr(dev, priv, priv->baud_rate, priv->lcr); 322 329 if (r < 0) 323 - goto out; 330 + return r; 324 331 325 332 r = ch341_set_handshake(dev, priv->mcr); 333 + if (r < 0) 334 + return r; 326 335 327 - out: kfree(buffer); 328 - return r; 336 + return 0; 329 337 } 330 338 331 339 static int ch341_detect_quirks(struct usb_serial_port *port) ··· 331 345 struct usb_device *udev = port->serial->dev; 332 346 const unsigned int size = 2; 333 347 unsigned long quirks = 0; 334 - char *buffer; 348 + u8 buffer[2]; 335 349 int r; 336 - 337 - buffer = kmalloc(size, GFP_KERNEL); 338 - if (!buffer) 339 - return -ENOMEM; 340 350 341 351 /* 342 352 * A subset of CH34x devices does not support all features. The ··· 340 358 * break condition. A read failure when trying to set up the latter is 341 359 * used to detect these devices. 342 360 */ 343 - r = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), CH341_REQ_READ_REG, 344 - USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 345 - CH341_REG_BREAK, 0, buffer, size, DEFAULT_TIMEOUT); 361 + r = usb_control_msg_recv(udev, 0, CH341_REQ_READ_REG, 362 + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 363 + CH341_REG_BREAK, 0, &buffer, size, 364 + DEFAULT_TIMEOUT, GFP_KERNEL); 346 365 if (r == -EPIPE) { 347 366 dev_info(&port->dev, "break control not supported, using simulated break\n"); 348 367 quirks = CH341_QUIRK_LIMITED_PRESCALER | CH341_QUIRK_SIMULATE_BREAK; 349 368 r = 0; 350 - goto out; 351 - } 352 - 353 - if (r != size) { 354 - if (r >= 0) 355 - r = -EIO; 369 + } else if (r) { 356 370 dev_err(&port->dev, "failed to read break control: %d\n", r); 357 - goto out; 358 371 } 359 - 360 - r = 0; 361 - out: 362 - kfree(buffer); 363 372 364 373 if (quirks) { 365 374 dev_dbg(&port->dev, "enabling quirk flags: 0x%02lx\n", quirks); ··· 620 647 struct ch341_private *priv = usb_get_serial_port_data(port); 621 648 int r; 622 649 uint16_t reg_contents; 623 - uint8_t *break_reg; 650 + uint8_t break_reg[2]; 624 651 625 652 if (priv->quirks & CH341_QUIRK_SIMULATE_BREAK) { 626 653 ch341_simulate_break(tty, break_state); 627 654 return; 628 655 } 629 656 630 - break_reg = kmalloc(2, GFP_KERNEL); 631 - if (!break_reg) 632 - return; 633 - 634 657 r = ch341_control_in(port->serial->dev, CH341_REQ_READ_REG, 635 658 ch341_break_reg, 0, break_reg, 2); 636 - if (r < 0) { 659 + if (r) { 637 660 dev_err(&port->dev, "%s - USB control read error (%d)\n", 638 661 __func__, r); 639 - goto out; 662 + return; 640 663 } 641 664 dev_dbg(&port->dev, "%s - initial ch341 break register contents - reg1: %x, reg2: %x\n", 642 665 __func__, break_reg[0], break_reg[1]); ··· 653 684 if (r < 0) 654 685 dev_err(&port->dev, "%s - USB control write error (%d)\n", 655 686 __func__, r); 656 - out: 657 - kfree(break_reg); 658 687 } 659 688 660 689 static int ch341_tiocmset(struct tty_struct *tty,
+31 -78
drivers/usb/serial/cp210x.c
··· 631 631 { 632 632 struct usb_serial *serial = port->serial; 633 633 struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); 634 - void *dmabuf; 635 634 int result; 636 635 637 - dmabuf = kmalloc(bufsize, GFP_KERNEL); 638 - if (!dmabuf) 639 - return -ENOMEM; 640 636 641 - result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 642 - req, REQTYPE_INTERFACE_TO_HOST, 0, 643 - port_priv->bInterfaceNumber, dmabuf, bufsize, 644 - USB_CTRL_GET_TIMEOUT); 645 - if (result == bufsize) { 646 - memcpy(buf, dmabuf, bufsize); 647 - result = 0; 648 - } else { 637 + result = usb_control_msg_recv(serial->dev, 0, req, 638 + REQTYPE_INTERFACE_TO_HOST, 0, 639 + port_priv->bInterfaceNumber, buf, bufsize, 640 + USB_CTRL_SET_TIMEOUT, GFP_KERNEL); 641 + if (result) { 649 642 dev_err(&port->dev, "failed get req 0x%x size %d status: %d\n", 650 643 req, bufsize, result); 651 - if (result >= 0) 652 - result = -EIO; 644 + return result; 653 645 } 654 646 655 - kfree(dmabuf); 656 - 657 - return result; 647 + return 0; 658 648 } 659 649 660 650 /* ··· 662 672 static int cp210x_read_vendor_block(struct usb_serial *serial, u8 type, u16 val, 663 673 void *buf, int bufsize) 664 674 { 665 - void *dmabuf; 666 675 int result; 667 676 668 - dmabuf = kmalloc(bufsize, GFP_KERNEL); 669 - if (!dmabuf) 670 - return -ENOMEM; 671 - 672 - result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 673 - CP210X_VENDOR_SPECIFIC, type, val, 674 - cp210x_interface_num(serial), dmabuf, bufsize, 675 - USB_CTRL_GET_TIMEOUT); 676 - if (result == bufsize) { 677 - memcpy(buf, dmabuf, bufsize); 678 - result = 0; 679 - } else { 677 + result = usb_control_msg_recv(serial->dev, 0, CP210X_VENDOR_SPECIFIC, 678 + type, val, cp210x_interface_num(serial), buf, bufsize, 679 + USB_CTRL_GET_TIMEOUT, GFP_KERNEL); 680 + if (result) { 680 681 dev_err(&serial->interface->dev, 681 682 "failed to get vendor val 0x%04x size %d: %d\n", val, 682 683 bufsize, result); 683 - if (result >= 0) 684 - result = -EIO; 684 + return result; 685 685 } 686 686 687 - kfree(dmabuf); 688 - 689 - return result; 687 + return 0; 690 688 } 691 689 692 690 /* ··· 708 730 { 709 731 struct usb_serial *serial = port->serial; 710 732 struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); 711 - void *dmabuf; 712 733 int result; 713 734 714 - dmabuf = kmemdup(buf, bufsize, GFP_KERNEL); 715 - if (!dmabuf) 716 - return -ENOMEM; 717 - 718 - result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 719 - req, REQTYPE_HOST_TO_INTERFACE, 0, 720 - port_priv->bInterfaceNumber, dmabuf, bufsize, 721 - USB_CTRL_SET_TIMEOUT); 722 - 723 - kfree(dmabuf); 724 - 725 - if (result < 0) { 735 + result = usb_control_msg_send(serial->dev, 0, req, 736 + REQTYPE_HOST_TO_INTERFACE, 0, 737 + port_priv->bInterfaceNumber, buf, bufsize, 738 + USB_CTRL_SET_TIMEOUT, GFP_KERNEL); 739 + if (result) { 726 740 dev_err(&port->dev, "failed set req 0x%x size %d status: %d\n", 727 741 req, bufsize, result); 728 742 return result; ··· 743 773 static int cp210x_write_vendor_block(struct usb_serial *serial, u8 type, 744 774 u16 val, void *buf, int bufsize) 745 775 { 746 - void *dmabuf; 747 776 int result; 748 777 749 - dmabuf = kmemdup(buf, bufsize, GFP_KERNEL); 750 - if (!dmabuf) 751 - return -ENOMEM; 752 - 753 - result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 754 - CP210X_VENDOR_SPECIFIC, type, val, 755 - cp210x_interface_num(serial), dmabuf, bufsize, 756 - USB_CTRL_SET_TIMEOUT); 757 - 758 - kfree(dmabuf); 759 - 760 - if (result < 0) { 778 + result = usb_control_msg_send(serial->dev, 0, CP210X_VENDOR_SPECIFIC, 779 + type, val, cp210x_interface_num(serial), buf, bufsize, 780 + USB_CTRL_SET_TIMEOUT, GFP_KERNEL); 781 + if (result) { 761 782 dev_err(&serial->interface->dev, 762 783 "failed to set vendor val 0x%04x size %d: %d\n", val, 763 784 bufsize, result); ··· 913 952 { 914 953 struct usb_serial *serial = port->serial; 915 954 struct cp210x_port_private *port_priv = usb_get_serial_port_data(port); 916 - struct cp210x_comm_status *sts; 955 + struct cp210x_comm_status sts; 917 956 int result; 918 957 919 - sts = kmalloc(sizeof(*sts), GFP_KERNEL); 920 - if (!sts) 921 - return -ENOMEM; 922 - 923 - result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 924 - CP210X_GET_COMM_STATUS, REQTYPE_INTERFACE_TO_HOST, 925 - 0, port_priv->bInterfaceNumber, sts, sizeof(*sts), 926 - USB_CTRL_GET_TIMEOUT); 927 - if (result == sizeof(*sts)) { 928 - *count = le32_to_cpu(sts->ulAmountInOutQueue); 929 - result = 0; 930 - } else { 958 + result = usb_control_msg_recv(serial->dev, 0, CP210X_GET_COMM_STATUS, 959 + REQTYPE_INTERFACE_TO_HOST, 0, 960 + port_priv->bInterfaceNumber, &sts, sizeof(sts), 961 + USB_CTRL_GET_TIMEOUT, GFP_KERNEL); 962 + if (result) { 931 963 dev_err(&port->dev, "failed to get comm status: %d\n", result); 932 - if (result >= 0) 933 - result = -EIO; 964 + return result; 934 965 } 935 966 936 - kfree(sts); 967 + *count = le32_to_cpu(sts.ulAmountInOutQueue); 937 968 938 - return result; 969 + return 0; 939 970 } 940 971 941 972 static bool cp210x_tx_empty(struct usb_serial_port *port)
+34 -62
drivers/usb/serial/f81232.c
··· 139 139 static int f81232_get_register(struct usb_serial_port *port, u16 reg, u8 *val) 140 140 { 141 141 int status; 142 - u8 *tmp; 143 142 struct usb_device *dev = port->serial->dev; 144 143 145 - tmp = kmalloc(sizeof(*val), GFP_KERNEL); 146 - if (!tmp) 147 - return -ENOMEM; 148 - 149 - status = usb_control_msg(dev, 150 - usb_rcvctrlpipe(dev, 0), 151 - F81232_REGISTER_REQUEST, 152 - F81232_GET_REGISTER, 153 - reg, 154 - 0, 155 - tmp, 156 - sizeof(*val), 157 - USB_CTRL_GET_TIMEOUT); 158 - if (status != sizeof(*val)) { 144 + status = usb_control_msg_recv(dev, 145 + 0, 146 + F81232_REGISTER_REQUEST, 147 + F81232_GET_REGISTER, 148 + reg, 149 + 0, 150 + val, 151 + sizeof(*val), 152 + USB_CTRL_GET_TIMEOUT, 153 + GFP_KERNEL); 154 + if (status) { 159 155 dev_err(&port->dev, "%s failed status: %d\n", __func__, status); 160 - 161 - if (status < 0) 162 - status = usb_translate_errors(status); 163 - else 164 - status = -EIO; 165 - } else { 166 - status = 0; 167 - *val = *tmp; 156 + status = usb_translate_errors(status); 168 157 } 169 158 170 - kfree(tmp); 171 159 return status; 172 160 } 173 161 174 162 static int f81232_set_register(struct usb_serial_port *port, u16 reg, u8 val) 175 163 { 176 164 int status; 177 - u8 *tmp; 178 165 struct usb_device *dev = port->serial->dev; 179 166 180 - tmp = kmalloc(sizeof(val), GFP_KERNEL); 181 - if (!tmp) 182 - return -ENOMEM; 183 - 184 - *tmp = val; 185 - 186 - status = usb_control_msg(dev, 187 - usb_sndctrlpipe(dev, 0), 188 - F81232_REGISTER_REQUEST, 189 - F81232_SET_REGISTER, 190 - reg, 191 - 0, 192 - tmp, 193 - sizeof(val), 194 - USB_CTRL_SET_TIMEOUT); 195 - if (status < 0) { 167 + status = usb_control_msg_send(dev, 168 + 0, 169 + F81232_REGISTER_REQUEST, 170 + F81232_SET_REGISTER, 171 + reg, 172 + 0, 173 + &val, 174 + sizeof(val), 175 + USB_CTRL_SET_TIMEOUT, 176 + GFP_KERNEL); 177 + if (status) { 196 178 dev_err(&port->dev, "%s failed status: %d\n", __func__, status); 197 179 status = usb_translate_errors(status); 198 - } else { 199 - status = 0; 200 180 } 201 181 202 - kfree(tmp); 203 182 return status; 204 183 } 205 184 ··· 836 857 struct usb_device *dev = interface_to_usbdev(intf); 837 858 int retry = F81534A_ACCESS_REG_RETRY; 838 859 int status; 839 - u8 *tmp; 840 - 841 - tmp = kmemdup(val, size, GFP_KERNEL); 842 - if (!tmp) 843 - return -ENOMEM; 844 860 845 861 while (retry--) { 846 - status = usb_control_msg(dev, 847 - usb_sndctrlpipe(dev, 0), 848 - F81232_REGISTER_REQUEST, 849 - F81232_SET_REGISTER, 850 - reg, 851 - 0, 852 - tmp, 853 - size, 854 - USB_CTRL_SET_TIMEOUT); 855 - if (status < 0) { 862 + status = usb_control_msg_send(dev, 863 + 0, 864 + F81232_REGISTER_REQUEST, 865 + F81232_SET_REGISTER, 866 + reg, 867 + 0, 868 + val, 869 + size, 870 + USB_CTRL_SET_TIMEOUT, 871 + GFP_KERNEL); 872 + if (status) { 856 873 status = usb_translate_errors(status); 857 874 if (status == -EIO) 858 875 continue; 859 - } else { 860 - status = 0; 861 876 } 862 877 863 878 break; ··· 862 889 reg, status); 863 890 } 864 891 865 - kfree(tmp); 866 892 return status; 867 893 } 868 894
+15 -38
drivers/usb/serial/ftdi_sio.c
··· 1437 1437 { 1438 1438 struct ftdi_private *priv = usb_get_serial_port_data(port); 1439 1439 struct usb_device *udev = port->serial->dev; 1440 - unsigned char *buf; 1440 + u8 buf; 1441 1441 int rv; 1442 1442 1443 - buf = kmalloc(1, GFP_KERNEL); 1444 - if (!buf) 1445 - return -ENOMEM; 1446 - 1447 - rv = usb_control_msg(udev, 1448 - usb_rcvctrlpipe(udev, 0), 1449 - FTDI_SIO_GET_LATENCY_TIMER_REQUEST, 1450 - FTDI_SIO_GET_LATENCY_TIMER_REQUEST_TYPE, 1451 - 0, priv->interface, 1452 - buf, 1, WDR_TIMEOUT); 1453 - if (rv < 1) { 1454 - if (rv >= 0) 1455 - rv = -EIO; 1456 - } else { 1457 - rv = buf[0]; 1458 - } 1459 - 1460 - kfree(buf); 1443 + rv = usb_control_msg_recv(udev, 0, FTDI_SIO_GET_LATENCY_TIMER_REQUEST, 1444 + FTDI_SIO_GET_LATENCY_TIMER_REQUEST_TYPE, 0, 1445 + priv->interface, &buf, 1, WDR_TIMEOUT, 1446 + GFP_KERNEL); 1447 + if (rv == 0) 1448 + rv = buf; 1461 1449 1462 1450 return rv; 1463 1451 } ··· 1840 1852 { 1841 1853 struct ftdi_private *priv = usb_get_serial_port_data(port); 1842 1854 struct usb_serial *serial = port->serial; 1843 - unsigned char *buf; 1855 + u8 buf; 1844 1856 int result; 1845 1857 1846 1858 result = usb_autopm_get_interface(serial->interface); 1847 1859 if (result) 1848 1860 return result; 1849 1861 1850 - buf = kmalloc(1, GFP_KERNEL); 1851 - if (!buf) { 1852 - usb_autopm_put_interface(serial->interface); 1853 - return -ENOMEM; 1854 - } 1862 + result = usb_control_msg_recv(serial->dev, 0, 1863 + FTDI_SIO_READ_PINS_REQUEST, 1864 + FTDI_SIO_READ_PINS_REQUEST_TYPE, 0, 1865 + priv->interface, &buf, 1, WDR_TIMEOUT, 1866 + GFP_KERNEL); 1867 + if (result == 0) 1868 + result = buf; 1855 1869 1856 - result = usb_control_msg(serial->dev, 1857 - usb_rcvctrlpipe(serial->dev, 0), 1858 - FTDI_SIO_READ_PINS_REQUEST, 1859 - FTDI_SIO_READ_PINS_REQUEST_TYPE, 0, 1860 - priv->interface, buf, 1, WDR_TIMEOUT); 1861 - if (result < 1) { 1862 - if (result >= 0) 1863 - result = -EIO; 1864 - } else { 1865 - result = buf[0]; 1866 - } 1867 - 1868 - kfree(buf); 1869 1870 usb_autopm_put_interface(serial->interface); 1870 1871 1871 1872 return result;
+7 -8
drivers/usb/serial/keyspan.c
··· 2890 2890 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) { 2891 2891 p_priv->in_buffer[i] = kzalloc(IN_BUFLEN, GFP_KERNEL); 2892 2892 if (!p_priv->in_buffer[i]) 2893 - goto err_in_buffer; 2893 + goto err_free_in_buffer; 2894 2894 } 2895 2895 2896 2896 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) { 2897 2897 p_priv->out_buffer[i] = kzalloc(OUT_BUFLEN, GFP_KERNEL); 2898 2898 if (!p_priv->out_buffer[i]) 2899 - goto err_out_buffer; 2899 + goto err_free_out_buffer; 2900 2900 } 2901 2901 2902 2902 p_priv->inack_buffer = kzalloc(INACK_BUFLEN, GFP_KERNEL); 2903 2903 if (!p_priv->inack_buffer) 2904 - goto err_inack_buffer; 2904 + goto err_free_out_buffer; 2905 2905 2906 2906 p_priv->outcont_buffer = kzalloc(OUTCONT_BUFLEN, GFP_KERNEL); 2907 2907 if (!p_priv->outcont_buffer) 2908 - goto err_outcont_buffer; 2908 + goto err_free_inack_buffer; 2909 2909 2910 2910 p_priv->device_details = d_details; 2911 2911 ··· 2951 2951 2952 2952 return 0; 2953 2953 2954 - err_outcont_buffer: 2954 + err_free_inack_buffer: 2955 2955 kfree(p_priv->inack_buffer); 2956 - err_inack_buffer: 2956 + err_free_out_buffer: 2957 2957 for (i = 0; i < ARRAY_SIZE(p_priv->out_buffer); ++i) 2958 2958 kfree(p_priv->out_buffer[i]); 2959 - err_out_buffer: 2959 + err_free_in_buffer: 2960 2960 for (i = 0; i < ARRAY_SIZE(p_priv->in_buffer); ++i) 2961 2961 kfree(p_priv->in_buffer[i]); 2962 - err_in_buffer: 2963 2962 kfree(p_priv); 2964 2963 2965 2964 return -ENOMEM;
+27 -38
drivers/usb/serial/keyspan_pda.c
··· 77 77 { 78 78 struct usb_serial_port *port = priv->port; 79 79 struct usb_serial *serial = port->serial; 80 - u8 *room; 80 + u8 room; 81 81 int rc; 82 82 83 - room = kmalloc(1, GFP_KERNEL); 84 - if (!room) 85 - return -ENOMEM; 86 - 87 - rc = usb_control_msg(serial->dev, 88 - usb_rcvctrlpipe(serial->dev, 0), 89 - 6, /* write_room */ 90 - USB_TYPE_VENDOR | USB_RECIP_INTERFACE 91 - | USB_DIR_IN, 92 - 0, /* value: 0 means "remaining room" */ 93 - 0, /* index */ 94 - room, 95 - 1, 96 - 2000); 97 - if (rc != 1) { 98 - if (rc >= 0) 99 - rc = -EIO; 83 + rc = usb_control_msg_recv(serial->dev, 84 + 0, 85 + 6, /* write_room */ 86 + USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_IN, 87 + 0, /* value: 0 means "remaining room" */ 88 + 0, /* index */ 89 + &room, 90 + 1, 91 + 2000, 92 + GFP_KERNEL); 93 + if (rc) { 100 94 dev_dbg(&port->dev, "roomquery failed: %d\n", rc); 101 - goto out_free; 95 + return rc; 102 96 } 103 97 104 - dev_dbg(&port->dev, "roomquery says %d\n", *room); 105 - rc = *room; 106 - out_free: 107 - kfree(room); 98 + dev_dbg(&port->dev, "roomquery says %d\n", room); 108 99 109 - return rc; 100 + return room; 110 101 } 111 102 112 103 static void keyspan_pda_request_unthrottle(struct work_struct *work) ··· 372 381 unsigned char *value) 373 382 { 374 383 int rc; 375 - u8 *data; 384 + u8 data; 376 385 377 - data = kmalloc(1, GFP_KERNEL); 378 - if (!data) 379 - return -ENOMEM; 386 + rc = usb_control_msg_recv(serial->dev, 0, 387 + 3, /* get pins */ 388 + USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_IN, 389 + 0, 390 + 0, 391 + &data, 392 + 1, 393 + 2000, 394 + GFP_KERNEL); 395 + if (rc == 0) 396 + *value = data; 380 397 381 - rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 382 - 3, /* get pins */ 383 - USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_IN, 384 - 0, 0, data, 1, 2000); 385 - if (rc == 1) 386 - *value = *data; 387 - else if (rc >= 0) 388 - rc = -EIO; 389 - 390 - kfree(data); 391 398 return rc; 392 399 } 393 400
+45 -72
drivers/usb/serial/kl5kusb105.c
··· 124 124 { 125 125 int rc; 126 126 127 - rc = usb_control_msg(port->serial->dev, 128 - usb_sndctrlpipe(port->serial->dev, 0), 129 - KL5KUSB105A_SIO_SET_DATA, 130 - USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_INTERFACE, 131 - 0, /* value */ 132 - 0, /* index */ 133 - settings, 134 - sizeof(struct klsi_105_port_settings), 135 - KLSI_TIMEOUT); 136 - if (rc < 0) 127 + rc = usb_control_msg_send(port->serial->dev, 128 + 0, 129 + KL5KUSB105A_SIO_SET_DATA, 130 + USB_TYPE_VENDOR | USB_DIR_OUT | 131 + USB_RECIP_INTERFACE, 132 + 0, /* value */ 133 + 0, /* index */ 134 + settings, 135 + sizeof(struct klsi_105_port_settings), 136 + KLSI_TIMEOUT, 137 + GFP_KERNEL); 138 + if (rc) 137 139 dev_err(&port->dev, 138 140 "Change port settings failed (error = %d)\n", rc); 139 141 ··· 147 145 return rc; 148 146 } 149 147 150 - /* translate a 16-bit status value from the device to linux's TIO bits */ 151 - static unsigned long klsi_105_status2linestate(const __u16 status) 152 - { 153 - unsigned long res = 0; 154 - 155 - res = ((status & KL5KUSB105A_DSR) ? TIOCM_DSR : 0) 156 - | ((status & KL5KUSB105A_CTS) ? TIOCM_CTS : 0) 157 - ; 158 - 159 - return res; 160 - } 161 - 162 148 /* 163 149 * Read line control via vendor command and return result through 164 - * *line_state_p 150 + * the state pointer. 165 151 */ 166 - /* It seems that the status buffer has always only 2 bytes length */ 167 - #define KLSI_STATUSBUF_LEN 2 168 152 static int klsi_105_get_line_state(struct usb_serial_port *port, 169 - unsigned long *line_state_p) 153 + unsigned long *state) 170 154 { 155 + u16 status; 171 156 int rc; 172 - u8 *status_buf; 173 - __u16 status; 174 157 175 - status_buf = kmalloc(KLSI_STATUSBUF_LEN, GFP_KERNEL); 176 - if (!status_buf) 177 - return -ENOMEM; 178 - 179 - status_buf[0] = 0xff; 180 - status_buf[1] = 0xff; 181 - rc = usb_control_msg(port->serial->dev, 182 - usb_rcvctrlpipe(port->serial->dev, 0), 183 - KL5KUSB105A_SIO_POLL, 184 - USB_TYPE_VENDOR | USB_DIR_IN, 185 - 0, /* value */ 186 - 0, /* index */ 187 - status_buf, KLSI_STATUSBUF_LEN, 188 - 10000 189 - ); 190 - if (rc != KLSI_STATUSBUF_LEN) { 158 + rc = usb_control_msg_recv(port->serial->dev, 0, 159 + KL5KUSB105A_SIO_POLL, 160 + USB_TYPE_VENDOR | USB_DIR_IN, 161 + 0, /* value */ 162 + 0, /* index */ 163 + &status, sizeof(status), 164 + 10000, 165 + GFP_KERNEL); 166 + if (rc) { 191 167 dev_err(&port->dev, "reading line status failed: %d\n", rc); 192 - if (rc >= 0) 193 - rc = -EIO; 194 - } else { 195 - status = get_unaligned_le16(status_buf); 196 - 197 - dev_dbg(&port->dev, "read status %02x %02x\n", 198 - status_buf[0], status_buf[1]); 199 - 200 - *line_state_p = klsi_105_status2linestate(status); 168 + return rc; 201 169 } 202 170 203 - kfree(status_buf); 204 - return rc; 171 + le16_to_cpus(&status); 172 + 173 + dev_dbg(&port->dev, "read status %04x\n", status); 174 + 175 + *state = ((status & KL5KUSB105A_DSR) ? TIOCM_DSR : 0) | 176 + ((status & KL5KUSB105A_CTS) ? TIOCM_CTS : 0); 177 + 178 + return 0; 205 179 } 206 180 207 181 ··· 223 245 int retval = 0; 224 246 int rc; 225 247 unsigned long line_state; 226 - struct klsi_105_port_settings *cfg; 248 + struct klsi_105_port_settings cfg; 227 249 unsigned long flags; 228 250 229 251 /* Do a defined restart: ··· 233 255 * Then read the modem line control and store values in 234 256 * priv->line_state. 235 257 */ 236 - cfg = kmalloc(sizeof(*cfg), GFP_KERNEL); 237 - if (!cfg) 238 - return -ENOMEM; 239 258 240 - cfg->pktlen = 5; 241 - cfg->baudrate = kl5kusb105a_sio_b9600; 242 - cfg->databits = kl5kusb105a_dtb_8; 243 - cfg->unknown1 = 0; 244 - cfg->unknown2 = 1; 245 - klsi_105_chg_port_settings(port, cfg); 259 + cfg.pktlen = 5; 260 + cfg.baudrate = kl5kusb105a_sio_b9600; 261 + cfg.databits = kl5kusb105a_dtb_8; 262 + cfg.unknown1 = 0; 263 + cfg.unknown2 = 1; 264 + klsi_105_chg_port_settings(port, &cfg); 246 265 247 266 spin_lock_irqsave(&priv->lock, flags); 248 - priv->cfg.pktlen = cfg->pktlen; 249 - priv->cfg.baudrate = cfg->baudrate; 250 - priv->cfg.databits = cfg->databits; 251 - priv->cfg.unknown1 = cfg->unknown1; 252 - priv->cfg.unknown2 = cfg->unknown2; 267 + priv->cfg.pktlen = cfg.pktlen; 268 + priv->cfg.baudrate = cfg.baudrate; 269 + priv->cfg.databits = cfg.databits; 270 + priv->cfg.unknown1 = cfg.unknown1; 271 + priv->cfg.unknown2 = cfg.unknown2; 253 272 spin_unlock_irqrestore(&priv->lock, flags); 254 - 255 - kfree(cfg); 256 273 257 274 /* READ_ON and urb submission */ 258 275 rc = usb_serial_generic_open(tty, port);
+30 -29
drivers/usb/serial/usb-serial.c
··· 208 208 * 209 209 * This is the first place a new tty gets used. Hence this is where we 210 210 * acquire references to the usb_serial structure and the driver module, 211 - * where we store a pointer to the port, and where we do an autoresume. 212 - * All these actions are reversed in serial_cleanup(). 211 + * where we store a pointer to the port. All these actions are reversed 212 + * in serial_cleanup(). 213 213 */ 214 214 static int serial_install(struct tty_driver *driver, struct tty_struct *tty) 215 215 { ··· 225 225 226 226 serial = port->serial; 227 227 if (!try_module_get(serial->type->driver.owner)) 228 - goto error_module_get; 229 - 230 - retval = usb_autopm_get_interface(serial->interface); 231 - if (retval) 232 - goto error_get_interface; 228 + goto err_put_serial; 233 229 234 230 init_termios = (driver->termios[idx] == NULL); 235 231 236 232 retval = tty_standard_install(driver, tty); 237 233 if (retval) 238 - goto error_init_termios; 234 + goto err_put_module; 239 235 240 236 mutex_unlock(&serial->disc_mutex); 241 237 ··· 243 247 244 248 return retval; 245 249 246 - error_init_termios: 247 - usb_autopm_put_interface(serial->interface); 248 - error_get_interface: 250 + err_put_module: 249 251 module_put(serial->type->driver.owner); 250 - error_module_get: 252 + err_put_serial: 251 253 usb_serial_put(serial); 252 254 mutex_unlock(&serial->disc_mutex); 253 255 return retval; ··· 259 265 int retval; 260 266 261 267 mutex_lock(&serial->disc_mutex); 262 - if (serial->disconnected) 268 + if (serial->disconnected) { 263 269 retval = -ENODEV; 264 - else 265 - retval = port->serial->type->open(tty, port); 270 + goto out_unlock; 271 + } 272 + 273 + retval = usb_autopm_get_interface(serial->interface); 274 + if (retval) 275 + goto out_unlock; 276 + 277 + retval = port->serial->type->open(tty, port); 278 + if (retval) 279 + usb_autopm_put_interface(serial->interface); 280 + out_unlock: 266 281 mutex_unlock(&serial->disc_mutex); 267 282 268 283 if (retval < 0) ··· 307 304 308 305 if (drv->close) 309 306 drv->close(port); 307 + 308 + usb_autopm_put_interface(port->serial->interface); 310 309 } 311 310 312 311 static void serial_hangup(struct tty_struct *tty) ··· 356 351 357 352 serial = port->serial; 358 353 owner = serial->type->driver.owner; 359 - 360 - usb_autopm_put_interface(serial->interface); 361 354 362 355 usb_serial_put(serial); 363 356 module_put(owner); ··· 1331 1328 result = bus_register(&usb_serial_bus_type); 1332 1329 if (result) { 1333 1330 pr_err("%s - registering bus driver failed\n", __func__); 1334 - goto exit_bus; 1331 + goto err_put_driver; 1335 1332 } 1336 1333 1337 1334 usb_serial_tty_driver->driver_name = "usbserial"; ··· 1349 1346 result = tty_register_driver(usb_serial_tty_driver); 1350 1347 if (result) { 1351 1348 pr_err("%s - tty_register_driver failed\n", __func__); 1352 - goto exit_reg_driver; 1349 + goto err_unregister_bus; 1353 1350 } 1354 1351 1355 1352 /* register the generic driver, if we should */ 1356 1353 result = usb_serial_generic_register(); 1357 1354 if (result < 0) { 1358 1355 pr_err("%s - registering generic driver failed\n", __func__); 1359 - goto exit_generic; 1356 + goto err_unregister_driver; 1360 1357 } 1361 1358 1362 1359 return result; 1363 1360 1364 - exit_generic: 1361 + err_unregister_driver: 1365 1362 tty_unregister_driver(usb_serial_tty_driver); 1366 - 1367 - exit_reg_driver: 1363 + err_unregister_bus: 1368 1364 bus_unregister(&usb_serial_bus_type); 1369 - 1370 - exit_bus: 1365 + err_put_driver: 1371 1366 pr_err("%s - returning with error %d\n", __func__, result); 1372 1367 tty_driver_kref_put(usb_serial_tty_driver); 1373 1368 return result; ··· 1510 1509 1511 1510 rc = usb_register(udriver); 1512 1511 if (rc) 1513 - goto failed_usb_register; 1512 + goto err_free_driver; 1514 1513 1515 1514 for (sd = serial_drivers; *sd; ++sd) { 1516 1515 (*sd)->usb_driver = udriver; 1517 1516 rc = usb_serial_register(*sd); 1518 1517 if (rc) 1519 - goto failed; 1518 + goto err_deregister_drivers; 1520 1519 } 1521 1520 1522 1521 /* Now set udriver's id_table and look for matches */ ··· 1524 1523 rc = driver_attach(&udriver->drvwrap.driver); 1525 1524 return 0; 1526 1525 1527 - failed: 1526 + err_deregister_drivers: 1528 1527 while (sd-- > serial_drivers) 1529 1528 usb_serial_deregister(*sd); 1530 1529 usb_deregister(udriver); 1531 - failed_usb_register: 1530 + err_free_driver: 1532 1531 kfree(udriver); 1533 1532 return rc; 1534 1533 }