diff mbox series

[v2] rtc: abx80x: Fix return value of nvmem callback on read

Message ID 20240613120750.1455209-1-joychakr@google.com
State Accepted
Headers show
Series [v2] rtc: abx80x: Fix return value of nvmem callback on read | expand

Commit Message

Joy Chakraborty June 13, 2024, 12:07 p.m. UTC
Read callbacks registered with nvmem core expect 0 to be returned on
success and a negative value to be returned on failure.

abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which
returns the number of bytes read on success as per its api description,
this return value is handled as an error and returned to nvmem even on
success.

Fix to handle all possible values that would be returned by
i2c_smbus_read_i2c_block_data().

Fixes: e90ff8ede777 ("rtc: abx80x: Add nvmem support")
Cc: stable@vger.kernel.org
Signed-off-by: Joy Chakraborty <joychakr@google.com>
---
 drivers/rtc/rtc-abx80x.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

Comments

Dan Carpenter June 13, 2024, 12:31 p.m. UTC | #1
On Thu, Jun 13, 2024 at 12:07:50PM +0000, Joy Chakraborty wrote:
> Read callbacks registered with nvmem core expect 0 to be returned on
> success and a negative value to be returned on failure.
> 
> abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which
> returns the number of bytes read on success as per its api description,
> this return value is handled as an error and returned to nvmem even on
> success.
> 
> Fix to handle all possible values that would be returned by
> i2c_smbus_read_i2c_block_data().
> 
> Fixes: e90ff8ede777 ("rtc: abx80x: Add nvmem support")
> Cc: stable@vger.kernel.org
> Signed-off-by: Joy Chakraborty <joychakr@google.com>

Thanks!

Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>

regards,
dan carpenter
Sean Anderson June 13, 2024, 3:11 p.m. UTC | #2
On 6/13/24 08:07, Joy Chakraborty wrote:
> Read callbacks registered with nvmem core expect 0 to be returned on
> success and a negative value to be returned on failure.
> 
> abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which
> returns the number of bytes read on success as per its api description,
> this return value is handled as an error and returned to nvmem even on
> success.

Humm, I wish this were documented in nvmem-provider.h...

> Fix to handle all possible values that would be returned by
> i2c_smbus_read_i2c_block_data().
> 
> Fixes: e90ff8ede777 ("rtc: abx80x: Add nvmem support")
> Cc: stable@vger.kernel.org
> Signed-off-by: Joy Chakraborty <joychakr@google.com>
> ---
>  drivers/rtc/rtc-abx80x.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/rtc/rtc-abx80x.c b/drivers/rtc/rtc-abx80x.c
> index fde2b8054c2e..1298962402ff 100644
> --- a/drivers/rtc/rtc-abx80x.c
> +++ b/drivers/rtc/rtc-abx80x.c
> @@ -705,14 +705,18 @@ static int abx80x_nvmem_xfer(struct abx80x_priv *priv, unsigned int offset,
>  		if (ret)
>  			return ret;
>  
> -		if (write)
> +		if (write) {
>  			ret = i2c_smbus_write_i2c_block_data(priv->client, reg,
>  							     len, val);
> -		else
> +			if (ret)
> +				return ret;
> +		} else {
>  			ret = i2c_smbus_read_i2c_block_data(priv->client, reg,
>  							    len, val);
> -		if (ret)
> -			return ret;
> +			if (ret <= 0)
> +				return ret ? ret : -EIO;
> +			len = ret;
> +		}
>  
>  		offset += len;
>  		val += len;

Reviewed-by: Sean Anderson <sean.anderson@seco.com>
Srinivas Kandagatla June 21, 2024, 6:23 a.m. UTC | #3
On Thu, 13 Jun 2024 12:07:50 +0000, Joy Chakraborty wrote:
> Read callbacks registered with nvmem core expect 0 to be returned on
> success and a negative value to be returned on failure.
> 
> abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which
> returns the number of bytes read on success as per its api description,
> this return value is handled as an error and returned to nvmem even on
> success.
> 
> [...]

Applied, thanks!

[1/1] rtc: abx80x: Fix return value of nvmem callback on read
      commit: 126b2b4ec0f471d46117ca31b99cd76b1eee48d8

Best regards,
Alexandre Belloni June 21, 2024, 3:03 p.m. UTC | #4
On 21/06/2024 07:23:24+0100, Srinivas Kandagatla wrote:
> 
> On Thu, 13 Jun 2024 12:07:50 +0000, Joy Chakraborty wrote:
> > Read callbacks registered with nvmem core expect 0 to be returned on
> > success and a negative value to be returned on failure.
> > 
> > abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which
> > returns the number of bytes read on success as per its api description,
> > this return value is handled as an error and returned to nvmem even on
> > success.
> > 
> > [...]
> 
> Applied, thanks!
> 
> [1/1] rtc: abx80x: Fix return value of nvmem callback on read
>       commit: 126b2b4ec0f471d46117ca31b99cd76b1eee48d8
> 

Please drop it from your tree, I'm going to handle the rtc related
patches...

> Best regards,
> -- 
> Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>
Srinivas Kandagatla June 21, 2024, 9:21 p.m. UTC | #5
On 21/06/2024 16:03, Alexandre Belloni wrote:
> On 21/06/2024 07:23:24+0100, Srinivas Kandagatla wrote:
>>
>> On Thu, 13 Jun 2024 12:07:50 +0000, Joy Chakraborty wrote:
>>> Read callbacks registered with nvmem core expect 0 to be returned on
>>> success and a negative value to be returned on failure.
>>>
>>> abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which
>>> returns the number of bytes read on success as per its api description,
>>> this return value is handled as an error and returned to nvmem even on
>>> success.
>>>
>>> [...]
>>
>> Applied, thanks!
>>
>> [1/1] rtc: abx80x: Fix return value of nvmem callback on read
>>        commit: 126b2b4ec0f471d46117ca31b99cd76b1eee48d8
>>
> 
> Please drop it from your tree, I'm going to handle the rtc related
> patches...
> 

Sure I will drop it.

--srini
>> Best regards,
>> -- 
>> Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
>>
>
Alexandre Belloni June 27, 2024, 10:22 p.m. UTC | #6
On Thu, 13 Jun 2024 12:07:50 +0000, Joy Chakraborty wrote:
> Read callbacks registered with nvmem core expect 0 to be returned on
> success and a negative value to be returned on failure.
> 
> abx80x_nvmem_xfer() on read calls i2c_smbus_read_i2c_block_data() which
> returns the number of bytes read on success as per its api description,
> this return value is handled as an error and returned to nvmem even on
> success.
> 
> [...]

Applied, thanks!

[1/1] rtc: abx80x: Fix return value of nvmem callback on read
      https://git.kernel.org/abelloni/c/fc82336b50e7

Best regards,
diff mbox series

Patch

diff --git a/drivers/rtc/rtc-abx80x.c b/drivers/rtc/rtc-abx80x.c
index fde2b8054c2e..1298962402ff 100644
--- a/drivers/rtc/rtc-abx80x.c
+++ b/drivers/rtc/rtc-abx80x.c
@@ -705,14 +705,18 @@  static int abx80x_nvmem_xfer(struct abx80x_priv *priv, unsigned int offset,
 		if (ret)
 			return ret;
 
-		if (write)
+		if (write) {
 			ret = i2c_smbus_write_i2c_block_data(priv->client, reg,
 							     len, val);
-		else
+			if (ret)
+				return ret;
+		} else {
 			ret = i2c_smbus_read_i2c_block_data(priv->client, reg,
 							    len, val);
-		if (ret)
-			return ret;
+			if (ret <= 0)
+				return ret ? ret : -EIO;
+			len = ret;
+		}
 
 		offset += len;
 		val += len;