Re: [PATCH 19/19] staging: greybus: sdio: Respect the cmd->busy_timeout from the mmc core

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ulf,
Thanks for the patch.

On Tue, Apr 14, 2020 at 06:14:13PM +0200, Ulf Hansson wrote:
> Using a fixed 1s timeout for all commands is a bit problematic.
> 
> For some commands it means waiting longer than needed for the timeout to
> expire, which may not a big issue, but still. For other commands, like for
> an erase (CMD38) that uses a R1B response, may require longer timeouts than
> 1s. In these cases, we may end up treating the command as it failed, while
> it just needed some more time to complete successfully.
> 
> Fix the problem by respecting the cmd->busy_timeout, which is provided by
> the mmc core.
> 
> Cc: Rui Miguel Silva <rmfrfs@xxxxxxxxx>
> Cc: Johan Hovold <johan@xxxxxxxxxx>
> Cc: Alex Elder <elder@xxxxxxxxxx>
> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> Cc: greybus-dev@xxxxxxxxxxxxxxxx
> Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
LGTM

Acked-by: Rui Miguel Silva <rmfrfs@xxxxxxxxx>

------
Cheers,
     Rui

> ---
>  drivers/staging/greybus/sdio.c | 10 +++++++---
>  1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/staging/greybus/sdio.c b/drivers/staging/greybus/sdio.c
> index 68c5718be827..c4b16bb5c1a4 100644
> --- a/drivers/staging/greybus/sdio.c
> +++ b/drivers/staging/greybus/sdio.c
> @@ -411,6 +411,7 @@ static int gb_sdio_command(struct gb_sdio_host *host, struct mmc_command *cmd)
>  	struct gb_sdio_command_request request = {0};
>  	struct gb_sdio_command_response response;
>  	struct mmc_data *data = host->mrq->data;
> +	unsigned int timeout_ms;
>  	u8 cmd_flags;
>  	u8 cmd_type;
>  	int i;
> @@ -469,9 +470,12 @@ static int gb_sdio_command(struct gb_sdio_host *host, struct mmc_command *cmd)
>  		request.data_blksz = cpu_to_le16(data->blksz);
>  	}
>  
> -	ret = gb_operation_sync(host->connection, GB_SDIO_TYPE_COMMAND,
> -				&request, sizeof(request), &response,
> -				sizeof(response));
> +	timeout_ms = cmd->busy_timeout ? cmd->busy_timeout :
> +		GB_OPERATION_TIMEOUT_DEFAULT;
> +
> +	ret = gb_operation_sync_timeout(host->connection, GB_SDIO_TYPE_COMMAND,
> +					&request, sizeof(request), &response,
> +					sizeof(response), timeout_ms);
>  	if (ret < 0)
>  		goto out;
>  
> -- 
> 2.20.1
> 
_______________________________________________
greybus-dev mailing list
greybus-dev@xxxxxxxxxxxxxxxx
https://lists.linaro.org/mailman/listinfo/greybus-dev




[Index of Archives]     [Asterisk App Development]     [PJ SIP]     [Gnu Gatekeeper]     [IETF Sipping]     [Info Cyrus]     [ALSA User]     [Fedora Linux Users]     [Linux SCTP]     [DCCP]     [Gimp]     [Yosemite News]     [Deep Creek Hot Springs]     [Yosemite Campsites]     [ISDN Cause Codes]     [Asterisk Books]

  Powered by Linux