mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	USB: serial: keyspan_pda: use usb_control_msg_recv()
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>
This commit is contained in:
		
							parent
							
								
									a738859264
								
							
						
					
					
						commit
						c9129371cb
					
				
					 1 changed files with 27 additions and 38 deletions
				
			
		| 
						 | 
					@ -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_port *port = priv->port;
 | 
				
			||||||
	struct usb_serial *serial = port->serial;
 | 
						struct usb_serial *serial = port->serial;
 | 
				
			||||||
	u8 *room;
 | 
						u8 room;
 | 
				
			||||||
	int rc;
 | 
						int rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	room = kmalloc(1, GFP_KERNEL);
 | 
						rc = usb_control_msg_recv(serial->dev,
 | 
				
			||||||
	if (!room)
 | 
									  0,
 | 
				
			||||||
		return -ENOMEM;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	rc = usb_control_msg(serial->dev,
 | 
					 | 
				
			||||||
			     usb_rcvctrlpipe(serial->dev, 0),
 | 
					 | 
				
			||||||
				  6, /* write_room */
 | 
									  6, /* write_room */
 | 
				
			||||||
			     USB_TYPE_VENDOR | USB_RECIP_INTERFACE
 | 
									  USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_IN,
 | 
				
			||||||
			     | USB_DIR_IN,
 | 
					 | 
				
			||||||
				  0, /* value: 0 means "remaining room" */
 | 
									  0, /* value: 0 means "remaining room" */
 | 
				
			||||||
				  0, /* index */
 | 
									  0, /* index */
 | 
				
			||||||
			     room,
 | 
									  &room,
 | 
				
			||||||
				  1,
 | 
									  1,
 | 
				
			||||||
			     2000);
 | 
									  2000,
 | 
				
			||||||
	if (rc != 1) {
 | 
									  GFP_KERNEL);
 | 
				
			||||||
		if (rc >= 0)
 | 
						if (rc) {
 | 
				
			||||||
			rc = -EIO;
 | 
					 | 
				
			||||||
		dev_dbg(&port->dev, "roomquery failed: %d\n", rc);
 | 
							dev_dbg(&port->dev, "roomquery failed: %d\n", rc);
 | 
				
			||||||
		goto out_free;
 | 
							return rc;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dev_dbg(&port->dev, "roomquery says %d\n", *room);
 | 
						dev_dbg(&port->dev, "roomquery says %d\n", room);
 | 
				
			||||||
	rc = *room;
 | 
					 | 
				
			||||||
out_free:
 | 
					 | 
				
			||||||
	kfree(room);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return rc;
 | 
						return room;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void keyspan_pda_request_unthrottle(struct work_struct *work)
 | 
					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)
 | 
									      unsigned char *value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int rc;
 | 
						int rc;
 | 
				
			||||||
	u8 *data;
 | 
						u8 data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data = kmalloc(1, GFP_KERNEL);
 | 
						rc = usb_control_msg_recv(serial->dev, 0,
 | 
				
			||||||
	if (!data)
 | 
					 | 
				
			||||||
		return -ENOMEM;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
 | 
					 | 
				
			||||||
				  3, /* get pins */
 | 
									  3, /* get pins */
 | 
				
			||||||
				  USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_IN,
 | 
									  USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_IN,
 | 
				
			||||||
			     0, 0, data, 1, 2000);
 | 
									  0,
 | 
				
			||||||
	if (rc == 1)
 | 
									  0,
 | 
				
			||||||
		*value = *data;
 | 
									  &data,
 | 
				
			||||||
	else if (rc >= 0)
 | 
									  1,
 | 
				
			||||||
		rc = -EIO;
 | 
									  2000,
 | 
				
			||||||
 | 
									  GFP_KERNEL);
 | 
				
			||||||
 | 
						if (rc == 0)
 | 
				
			||||||
 | 
							*value = data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kfree(data);
 | 
					 | 
				
			||||||
	return rc;
 | 
						return rc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue