clk: Fix a missing check on regmap_bulk_read
diff mbox series

Message ID 20181224190032.23167-1-pakki001@umn.edu
State Not Applicable, archived
Headers show
Series
  • clk: Fix a missing check on regmap_bulk_read
Related show

Commit Message

Aditya Pakki Dec. 24, 2018, 7 p.m. UTC
Currently, vc5_pll_recalc_rate() may produce incorrect output when
regmap_bulk_read() fails. The fix checks the return value of the
latter function and returns 0 in case of failure.

Signed-off-by: Aditya Pakki <pakki001@umn.edu>
---
 drivers/clk/clk-versaclock5.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Stephen Boyd Jan. 9, 2019, 6:55 p.m. UTC | #1
Quoting Aditya Pakki (2018-12-24 11:00:32)
> Currently, vc5_pll_recalc_rate() may produce incorrect output when
> regmap_bulk_read() fails. The fix checks the return value of the
> latter function and returns 0 in case of failure.
> 
> Signed-off-by: Aditya Pakki <pakki001@umn.edu>
> ---
>  drivers/clk/clk-versaclock5.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
> index decffb3826ec..cd76a893c594 100644
> --- a/drivers/clk/clk-versaclock5.c
> +++ b/drivers/clk/clk-versaclock5.c
> @@ -413,7 +413,8 @@ static unsigned long vc5_pll_recalc_rate(struct clk_hw *hw,
>         u32 div_int, div_frc;
>         u8 fb[5];
>  
> -       regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5);
> +       if (regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5))
> +               return 0;

There are a bunch of other regmap_*() APIs in here that "could fail".
Why has this one been chosen but the other ones not?
Marek Vasut Jan. 9, 2019, 9:22 p.m. UTC | #2
On 12/24/18 8:00 PM, Aditya Pakki wrote:
> Currently, vc5_pll_recalc_rate() may produce incorrect output when
> regmap_bulk_read() fails. The fix checks the return value of the
> latter function and returns 0 in case of failure.
> 
> Signed-off-by: Aditya Pakki <pakki001@umn.edu>
> ---
>  drivers/clk/clk-versaclock5.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
> index decffb3826ec..cd76a893c594 100644
> --- a/drivers/clk/clk-versaclock5.c
> +++ b/drivers/clk/clk-versaclock5.c
> @@ -413,7 +413,8 @@ static unsigned long vc5_pll_recalc_rate(struct clk_hw *hw,
>  	u32 div_int, div_frc;
>  	u8 fb[5];
>  
> -	regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5);
> +	if (regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5))
> +		return 0;

Shouldn't this return ret on failure ?

>  	div_int = (fb[0] << 4) | (fb[1] >> 4);
>  	div_frc = (fb[2] << 16) | (fb[3] << 8) | fb[4];
>

Patch
diff mbox series

diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
index decffb3826ec..cd76a893c594 100644
--- a/drivers/clk/clk-versaclock5.c
+++ b/drivers/clk/clk-versaclock5.c
@@ -413,7 +413,8 @@  static unsigned long vc5_pll_recalc_rate(struct clk_hw *hw,
 	u32 div_int, div_frc;
 	u8 fb[5];
 
-	regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5);
+	if (regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5))
+		return 0;
 
 	div_int = (fb[0] << 4) | (fb[1] >> 4);
 	div_frc = (fb[2] << 16) | (fb[3] << 8) | fb[4];