USB: serial: keyspan_pda: use usb_control_msg_recv()
authorHimadri Pandya <himadrispandya@gmail.com>
Sun, 1 Aug 2021 20:31:21 +0000 (02:01 +0530)
committerJohan Hovold <johan@kernel.org>
Tue, 21 Sep 2021 12:23:23 +0000 (14:23 +0200)
Use the wrapper function usb_control_msg_recv() that accepts stack
variables and remove dma buffers from callers of usb_control_msg().

Signed-off-by: Himadri Pandya <himadrispandya@gmail.com>
Link: https://lore.kernel.org/r/20210801203122.3515-6-himadrispandya@gmail.com
[ johan: simplify write-room error handling further ]
Signed-off-by: Johan Hovold <johan@kernel.org>
drivers/usb/serial/keyspan_pda.c

index 39b0f5f344c26e51d395b2ab57289c5d0ea83139..3e7628becdcd81a4bc6b01fa5ab54a7e53d72c64 100644 (file)
@@ -77,36 +77,27 @@ static int keyspan_pda_get_write_room(struct keyspan_pda_private *priv)
 {
        struct usb_serial_port *port = priv->port;
        struct usb_serial *serial = port->serial;
-       u8 *room;
+       u8 room;
        int rc;
 
-       room = kmalloc(1, GFP_KERNEL);
-       if (!room)
-               return -ENOMEM;
-
-       rc = usb_control_msg(serial->dev,
-                            usb_rcvctrlpipe(serial->dev, 0),
-                            6, /* write_room */
-                            USB_TYPE_VENDOR | USB_RECIP_INTERFACE
-                            | USB_DIR_IN,
-                            0, /* value: 0 means "remaining room" */
-                            0, /* index */
-                            room,
-                            1,
-                            2000);
-       if (rc != 1) {
-               if (rc >= 0)
-                       rc = -EIO;
+       rc = usb_control_msg_recv(serial->dev,
+                                 0,
+                                 6, /* write_room */
+                                 USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_IN,
+                                 0, /* value: 0 means "remaining room" */
+                                 0, /* index */
+                                 &room,
+                                 1,
+                                 2000,
+                                 GFP_KERNEL);
+       if (rc) {
                dev_dbg(&port->dev, "roomquery failed: %d\n", rc);
-               goto out_free;
+               return rc;
        }
 
-       dev_dbg(&port->dev, "roomquery says %d\n", *room);
-       rc = *room;
-out_free:
-       kfree(room);
+       dev_dbg(&port->dev, "roomquery says %d\n", room);
 
-       return rc;
+       return room;
 }
 
 static void keyspan_pda_request_unthrottle(struct work_struct *work)
@@ -381,22 +372,20 @@ static int keyspan_pda_get_modem_info(struct usb_serial *serial,
                                      unsigned char *value)
 {
        int rc;
-       u8 *data;
-
-       data = kmalloc(1, GFP_KERNEL);
-       if (!data)
-               return -ENOMEM;
-
-       rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
-                            3, /* get pins */
-                            USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_IN,
-                            0, 0, data, 1, 2000);
-       if (rc == 1)
-               *value = *data;
-       else if (rc >= 0)
-               rc = -EIO;
+       u8 data;
+
+       rc = usb_control_msg_recv(serial->dev, 0,
+                                 3, /* get pins */
+                                 USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_IN,
+                                 0,
+                                 0,
+                                 &data,
+                                 1,
+                                 2000,
+                                 GFP_KERNEL);
+       if (rc == 0)
+               *value = data;
 
-       kfree(data);
        return rc;
 }