All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johan Hovold <johan@kernel.org>
To: Himadri Pandya <himadrispandya@gmail.com>
Cc: linux-usb@vger.kernel.org,
	linux-kernel-mentees@lists.linuxfoundation.org, johan@kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [Linux-kernel-mentees] [PATCH 06/15] usb: serial: f81232: use usb_control_msg_recv() and usb_control_msg_send()
Date: Fri, 4 Dec 2020 10:49:43 +0100	[thread overview]
Message-ID: <X8oGN9G+i9rQM9eX@localhost> (raw)
In-Reply-To: <20201104064703.15123-7-himadrispandya@gmail.com>

On Wed, Nov 04, 2020 at 12:16:54PM +0530, Himadri Pandya wrote:
> The new usb_control_msg_recv() and usb_control_msg_send() nicely wraps
> usb_control_msg() with proper error check. Hence use the wrappers
> instead of calling usb_control_msg() directly.
> 
> Signed-off-by: Himadri Pandya <himadrispandya@gmail.com>
> ---
>  drivers/usb/serial/f81232.c | 88 ++++++++-----------------------------
>  1 file changed, 18 insertions(+), 70 deletions(-)
> 
> diff --git a/drivers/usb/serial/f81232.c b/drivers/usb/serial/f81232.c
> index 0c7eacc630e0..78107feef8a8 100644
> --- a/drivers/usb/serial/f81232.c
> +++ b/drivers/usb/serial/f81232.c
> @@ -139,71 +139,36 @@ static int calc_baud_divisor(speed_t baudrate, speed_t clockrate)
>  static int f81232_get_register(struct usb_serial_port *port, u16 reg, u8 *val)
>  {
>  	int status;
> -	u8 *tmp;
>  	struct usb_device *dev = port->serial->dev;
>  
> -	tmp = kmalloc(sizeof(*val), GFP_KERNEL);
> -	if (!tmp)
> -		return -ENOMEM;
> -
> -	status = usb_control_msg(dev,
> -				usb_rcvctrlpipe(dev, 0),
> -				F81232_REGISTER_REQUEST,
> -				F81232_GET_REGISTER,
> -				reg,
> -				0,
> -				tmp,
> -				sizeof(*val),
> -				USB_CTRL_GET_TIMEOUT);
> -	if (status != sizeof(*val)) {
> +	status = usb_control_msg_recv(dev, 0, F81232_REGISTER_REQUEST,
> +				      F81232_GET_REGISTER, reg, 0, val,
> +				      sizeof(*val), USB_CTRL_GET_TIMEOUT,
> +				      GFP_KERNEL);

This driver use tabs for indentation consistently so please stick to
that style. That should also amount to a smaller patch (and less noise
in the logs, e.g. for git blame).

> +	if (status) {
>  		dev_err(&port->dev, "%s failed status: %d\n", __func__, status);
>  
> -		if (status < 0)
> -			status = usb_translate_errors(status);
> -		else
> -			status = -EIO;
> -	} else {
> -		status = 0;
> -		*val = *tmp;
> +		status = usb_translate_errors(status);
>  	}
>  
> -	kfree(tmp);
>  	return status;
>  }

> @@ -866,32 +831,16 @@ static int f81534a_ctrl_set_register(struct usb_interface *intf, u16 reg,
>  	struct usb_device *dev = interface_to_usbdev(intf);
>  	int retry = F81534A_ACCESS_REG_RETRY;
>  	int status;
> -	u8 *tmp;
> -
> -	tmp = kmemdup(val, size, GFP_KERNEL);
> -	if (!tmp)
> -		return -ENOMEM;
>  
>  	while (retry--) {
> -		status = usb_control_msg(dev,
> -					usb_sndctrlpipe(dev, 0),
> -					F81232_REGISTER_REQUEST,
> -					F81232_SET_REGISTER,
> -					reg,
> -					0,
> -					tmp,
> -					size,
> -					USB_CTRL_SET_TIMEOUT);
> -		if (status < 0) {
> +		status = usb_control_msg_send(dev, 0, F81232_REGISTER_REQUEST,
> +					      F81232_SET_REGISTER, reg, 0, val,
> +					      size, USB_CTRL_SET_TIMEOUT, GFP_KERNEL);
> +		if (status) {
> +			/* Retry on error or short transfers */
>  			status = usb_translate_errors(status);
>  			if (status == -EIO)
>  				continue;

So this now depends on the new helper returning an errno on short
transfers which gets mapped to -EIO by usb_translate_errors(). This
works currently (and with my suggested change to use -EREMOTEIO) but
could possibly lead to subtle regressions later.

I don't think we need to worry about it, but just wanted to highlight
the kind of impact these changes can have.

Note that this change also replaces a single memdup with a memdup+memcpy
for each iteration. But as this helper is used rarely (e.g. probe,
resume and disconnect), and hopefully the retries are exceptions, the
overhead could be acceptable.

> -		} else if (status != size) {
> -			/* Retry on short transfers */
> -			status = -EIO;
> -			continue;
> -		} else {
> -			status = 0;
>  		}
>  
>  		break;
> @@ -902,7 +851,6 @@ static int f81534a_ctrl_set_register(struct usb_interface *intf, u16 reg,
>  				reg, status);
>  	}
>  
> -	kfree(tmp);
>  	return status;
>  }

Johan
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees

WARNING: multiple messages have this Message-ID (diff)
From: Johan Hovold <johan@kernel.org>
To: Himadri Pandya <himadrispandya@gmail.com>
Cc: johan@kernel.org, gregkh@linuxfoundation.org,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-kernel-mentees@lists.linuxfoundation.org
Subject: Re: [PATCH 06/15] usb: serial: f81232: use usb_control_msg_recv() and usb_control_msg_send()
Date: Fri, 4 Dec 2020 10:49:43 +0100	[thread overview]
Message-ID: <X8oGN9G+i9rQM9eX@localhost> (raw)
In-Reply-To: <20201104064703.15123-7-himadrispandya@gmail.com>

On Wed, Nov 04, 2020 at 12:16:54PM +0530, Himadri Pandya wrote:
> The new usb_control_msg_recv() and usb_control_msg_send() nicely wraps
> usb_control_msg() with proper error check. Hence use the wrappers
> instead of calling usb_control_msg() directly.
> 
> Signed-off-by: Himadri Pandya <himadrispandya@gmail.com>
> ---
>  drivers/usb/serial/f81232.c | 88 ++++++++-----------------------------
>  1 file changed, 18 insertions(+), 70 deletions(-)
> 
> diff --git a/drivers/usb/serial/f81232.c b/drivers/usb/serial/f81232.c
> index 0c7eacc630e0..78107feef8a8 100644
> --- a/drivers/usb/serial/f81232.c
> +++ b/drivers/usb/serial/f81232.c
> @@ -139,71 +139,36 @@ static int calc_baud_divisor(speed_t baudrate, speed_t clockrate)
>  static int f81232_get_register(struct usb_serial_port *port, u16 reg, u8 *val)
>  {
>  	int status;
> -	u8 *tmp;
>  	struct usb_device *dev = port->serial->dev;
>  
> -	tmp = kmalloc(sizeof(*val), GFP_KERNEL);
> -	if (!tmp)
> -		return -ENOMEM;
> -
> -	status = usb_control_msg(dev,
> -				usb_rcvctrlpipe(dev, 0),
> -				F81232_REGISTER_REQUEST,
> -				F81232_GET_REGISTER,
> -				reg,
> -				0,
> -				tmp,
> -				sizeof(*val),
> -				USB_CTRL_GET_TIMEOUT);
> -	if (status != sizeof(*val)) {
> +	status = usb_control_msg_recv(dev, 0, F81232_REGISTER_REQUEST,
> +				      F81232_GET_REGISTER, reg, 0, val,
> +				      sizeof(*val), USB_CTRL_GET_TIMEOUT,
> +				      GFP_KERNEL);

This driver use tabs for indentation consistently so please stick to
that style. That should also amount to a smaller patch (and less noise
in the logs, e.g. for git blame).

> +	if (status) {
>  		dev_err(&port->dev, "%s failed status: %d\n", __func__, status);
>  
> -		if (status < 0)
> -			status = usb_translate_errors(status);
> -		else
> -			status = -EIO;
> -	} else {
> -		status = 0;
> -		*val = *tmp;
> +		status = usb_translate_errors(status);
>  	}
>  
> -	kfree(tmp);
>  	return status;
>  }

> @@ -866,32 +831,16 @@ static int f81534a_ctrl_set_register(struct usb_interface *intf, u16 reg,
>  	struct usb_device *dev = interface_to_usbdev(intf);
>  	int retry = F81534A_ACCESS_REG_RETRY;
>  	int status;
> -	u8 *tmp;
> -
> -	tmp = kmemdup(val, size, GFP_KERNEL);
> -	if (!tmp)
> -		return -ENOMEM;
>  
>  	while (retry--) {
> -		status = usb_control_msg(dev,
> -					usb_sndctrlpipe(dev, 0),
> -					F81232_REGISTER_REQUEST,
> -					F81232_SET_REGISTER,
> -					reg,
> -					0,
> -					tmp,
> -					size,
> -					USB_CTRL_SET_TIMEOUT);
> -		if (status < 0) {
> +		status = usb_control_msg_send(dev, 0, F81232_REGISTER_REQUEST,
> +					      F81232_SET_REGISTER, reg, 0, val,
> +					      size, USB_CTRL_SET_TIMEOUT, GFP_KERNEL);
> +		if (status) {
> +			/* Retry on error or short transfers */
>  			status = usb_translate_errors(status);
>  			if (status == -EIO)
>  				continue;

So this now depends on the new helper returning an errno on short
transfers which gets mapped to -EIO by usb_translate_errors(). This
works currently (and with my suggested change to use -EREMOTEIO) but
could possibly lead to subtle regressions later.

I don't think we need to worry about it, but just wanted to highlight
the kind of impact these changes can have.

Note that this change also replaces a single memdup with a memdup+memcpy
for each iteration. But as this helper is used rarely (e.g. probe,
resume and disconnect), and hopefully the retries are exceptions, the
overhead could be acceptable.

> -		} else if (status != size) {
> -			/* Retry on short transfers */
> -			status = -EIO;
> -			continue;
> -		} else {
> -			status = 0;
>  		}
>  
>  		break;
> @@ -902,7 +851,6 @@ static int f81534a_ctrl_set_register(struct usb_interface *intf, u16 reg,
>  				reg, status);
>  	}
>  
> -	kfree(tmp);
>  	return status;
>  }

Johan

  reply	other threads:[~2020-12-04  9:49 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-04  6:46 [Linux-kernel-mentees] [PATCH 00/15] usb: serial: avoid using usb_control_msg() directly Himadri Pandya
2020-11-04  6:46 ` Himadri Pandya
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 01/15] usb: serial: ark3116: use usb_control_msg_recv() and usb_control_msg_send() Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04  9:16   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04  9:16     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 02/15] usb: serial: belkin_sa: use usb_control_msg_send() Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04  9:17   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04  9:17     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 03/15] usb: serial: ch314: use usb_control_msg_recv() and usb_control_msg_send() Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04  9:24   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04  9:24     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 04/15] usb: serial: cp210x: " Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04  9:34   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04  9:34     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 05/15] usb: serial: cypress_m8: " Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04  9:37   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04  9:37     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 06/15] usb: serial: f81232: " Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04  9:49   ` Johan Hovold [this message]
2020-12-04  9:49     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 07/15] usb: serial: f81534: " Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04  9:55   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04  9:55     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 08/15] usb: serial: ftdi_sio: " Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04 10:03   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04 10:03     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 09/15] usb: serial: io_edgeport: " Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04 10:10   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04 10:10     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 10/15] usb: serial: io_ti: " Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04 10:12   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04 10:12     ` Johan Hovold
2020-11-04  6:46 ` [Linux-kernel-mentees] [PATCH 11/15] usb: serial: ipaq: use usb_control_msg_send() Himadri Pandya
2020-11-04  6:46   ` Himadri Pandya
2020-12-04 10:21   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04 10:21     ` Johan Hovold
2020-11-04  6:47 ` [Linux-kernel-mentees] [PATCH 12/15] usb: serial: ipw: " Himadri Pandya
2020-11-04  6:47   ` Himadri Pandya
2020-12-04 10:27   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04 10:27     ` Johan Hovold
2020-11-04  6:47 ` [Linux-kernel-mentees] [PATCH 13/15] usb: serial: iuu_phoenix: " Himadri Pandya
2020-11-04  6:47   ` Himadri Pandya
2020-12-04 10:28   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04 10:28     ` Johan Hovold
2020-11-04  6:47 ` [Linux-kernel-mentees] [PATCH 14/15] usb: serial: keyspan_pda: use usb_control_msg_recv() and usb_control_msg_send() Himadri Pandya
2020-11-04  6:47   ` Himadri Pandya
2020-12-04 10:31   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04 10:31     ` Johan Hovold
2020-11-04  6:47 ` [Linux-kernel-mentees] [PATCH 15/15] usb: serial: kl5kusb105: " Himadri Pandya
2020-11-04  6:47   ` Himadri Pandya
2020-12-04 10:37   ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04 10:37     ` Johan Hovold
2020-11-06 10:43 ` [Linux-kernel-mentees] [PATCH 00/15] usb: serial: avoid using usb_control_msg() directly Greg KH
2020-11-06 10:43   ` Greg KH
2020-12-04  9:09 ` [Linux-kernel-mentees] " Johan Hovold
2020-12-04  9:09   ` Johan Hovold
2020-12-24 10:01   ` [Linux-kernel-mentees] " Himadri Pandya
2020-12-24 10:01     ` Himadri Pandya

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=X8oGN9G+i9rQM9eX@localhost \
    --to=johan@kernel.org \
    --cc=himadrispandya@gmail.com \
    --cc=linux-kernel-mentees@lists.linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.