Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1696793 > unrolled thread

[PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.

Started byArvind Yadav <arvind.yadav.cs@gmail.com>
First post2017-07-26 07:50 +0200
Last post2017-07-26 17:50 +0200
Articles 5 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable. Arvind Yadav <arvind.yadav.cs@gmail.com> - 2017-07-26 07:50 +0200
    Re: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of  clk_prepare_enable. Mark Brown <broonie@kernel.org> - 2017-07-26 13:30 +0200
      Re: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of  clk_prepare_enable. Arvind Yadav <arvind.yadav.cs@gmail.com> - 2017-07-26 14:10 +0200
        Re: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of  clk_prepare_enable. Mark Brown <broonie@kernel.org> - 2017-07-26 16:50 +0200
    Re: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of  clk_prepare_enable. Krzysztof Kozlowski <krzk@kernel.org> - 2017-07-26 17:50 +0200

#1696793 — [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.

FromArvind Yadav <arvind.yadav.cs@gmail.com>
Date2017-07-26 07:50 +0200
Subject[PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.
Message-ID<u7nmN-4H4-5@gated-at.bofh.it>
clk_prepare_enable() can fail here and we must check its return value.

Signed-off-by: Arvind Yadav <arvind.yadav.cs@gmail.com>
---
Chnage in v2 :
             Error handling for things done in s3c_i2sv2_probe().

 sound/soc/samsung/s3c2412-i2s.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/sound/soc/samsung/s3c2412-i2s.c b/sound/soc/samsung/s3c2412-i2s.c
index 0a47182..0b96927 100644
--- a/sound/soc/samsung/s3c2412-i2s.c
+++ b/sound/soc/samsung/s3c2412-i2s.c
@@ -65,13 +65,16 @@ static int s3c2412_i2s_probe(struct snd_soc_dai *dai)
 	s3c2412_i2s.iis_cclk = devm_clk_get(dai->dev, "i2sclk");
 	if (IS_ERR(s3c2412_i2s.iis_cclk)) {
 		pr_err("failed to get i2sclk clock\n");
-		return PTR_ERR(s3c2412_i2s.iis_cclk);
+		ret = PTR_ERR(s3c2412_i2s.iis_cclk);
+		goto err;
 	}
 
 	/* Set MPLL as the source for IIS CLK */
 
 	clk_set_parent(s3c2412_i2s.iis_cclk, clk_get(NULL, "mpll"));
-	clk_prepare_enable(s3c2412_i2s.iis_cclk);
+	ret = clk_prepare_enable(s3c2412_i2s.iis_cclk);
+	if (ret)
+		goto err;
 
 	s3c2412_i2s.iis_cclk = s3c2412_i2s.iis_pclk;
 
@@ -80,6 +83,11 @@ static int s3c2412_i2s_probe(struct snd_soc_dai *dai)
 			      S3C_GPIO_PULL_NONE);
 
 	return 0;
+
+err:
+	clk_disable(s3c2412_i2s.iis_pclk);
+	clk_put(s3c2412_i2s.iis_pclk);
+	return ret;
 }
 
 static int s3c2412_i2s_remove(struct snd_soc_dai *dai)
-- 
1.9.1

[toc] | [next] | [standalone]


#1696997 — Re: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.

FromMark Brown <broonie@kernel.org>
Date2017-07-26 13:30 +0200
SubjectRe: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.
Message-ID<u7sFP-86J-1@gated-at.bofh.it>
In reply to#1696793

[Multipart message — attachments visible in raw view] — view raw

On Wed, Jul 26, 2017 at 11:15:25AM +0530, Arvind Yadav wrote:

> --- a/sound/soc/samsung/s3c2412-i2s.c
> +++ b/sound/soc/samsung/s3c2412-i2s.c
> @@ -65,13 +65,16 @@ static int s3c2412_i2s_probe(struct snd_soc_dai *dai)
>  	s3c2412_i2s.iis_cclk = devm_clk_get(dai->dev, "i2sclk");
>  	if (IS_ERR(s3c2412_i2s.iis_cclk)) {
>  		pr_err("failed to get i2sclk clock\n");
> -		return PTR_ERR(s3c2412_i2s.iis_cclk);
> +		ret = PTR_ERR(s3c2412_i2s.iis_cclk);
> +		goto err;
>  	}
>  

Why are we making this unrelated change?  None of the error handling we
jump to is relevant if this fails...

>  	/* Set MPLL as the source for IIS CLK */
>  
>  	clk_set_parent(s3c2412_i2s.iis_cclk, clk_get(NULL, "mpll"));
> -	clk_prepare_enable(s3c2412_i2s.iis_cclk);
> +	ret = clk_prepare_enable(s3c2412_i2s.iis_cclk);
> +	if (ret)
> +		goto err;
>  
>  	s3c2412_i2s.iis_cclk = s3c2412_i2s.iis_pclk;
>  
> @@ -80,6 +83,11 @@ static int s3c2412_i2s_probe(struct snd_soc_dai *dai)
>  			      S3C_GPIO_PULL_NONE);
>  
>  	return 0;
> +
> +err:
> +	clk_disable(s3c2412_i2s.iis_pclk);

This will disable the clock if we failed to enable it which is clearly
not correct.  It's also matching a clk_prepare_enable() with a
clk_disable() which is going to leave an unbalanced prepare.

[toc] | [prev] | [next] | [standalone]


#1697027 — Re: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.

FromArvind Yadav <arvind.yadav.cs@gmail.com>
Date2017-07-26 14:10 +0200
SubjectRe: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.
Message-ID<u7tiy-7n-37@gated-at.bofh.it>
In reply to#1696997
Hi,


On Wednesday 26 July 2017 04:58 PM, Mark Brown wrote:
> On Wed, Jul 26, 2017 at 11:15:25AM +0530, Arvind Yadav wrote:
>
>> --- a/sound/soc/samsung/s3c2412-i2s.c
>> +++ b/sound/soc/samsung/s3c2412-i2s.c
>> @@ -65,13 +65,16 @@ static int s3c2412_i2s_probe(struct snd_soc_dai *dai)
>>   	s3c2412_i2s.iis_cclk = devm_clk_get(dai->dev, "i2sclk");
>>   	if (IS_ERR(s3c2412_i2s.iis_cclk)) {
>>   		pr_err("failed to get i2sclk clock\n");
>> -		return PTR_ERR(s3c2412_i2s.iis_cclk);
>> +		ret = PTR_ERR(s3c2412_i2s.iis_cclk);
>> +		goto err;
>>   	}
>>   
> Why are we making this unrelated change?  None of the error handling we
> jump to is relevant if this fails...
3c_i2sv2_probe is enabling "iis" clock. If devm_clk_get(, "i2sclk") fails.
we need to disable and free the clock "iis" .
>
>>   	/* Set MPLL as the source for IIS CLK */
>>   
>>   	clk_set_parent(s3c2412_i2s.iis_cclk, clk_get(NULL, "mpll"));
>> -	clk_prepare_enable(s3c2412_i2s.iis_cclk);
>> +	ret = clk_prepare_enable(s3c2412_i2s.iis_cclk);
>> +	if (ret)
>> +		goto err;
>>   
>>   	s3c2412_i2s.iis_cclk = s3c2412_i2s.iis_pclk;
>>   
>> @@ -80,6 +83,11 @@ static int s3c2412_i2s_probe(struct snd_soc_dai *dai)
>>   			      S3C_GPIO_PULL_NONE);
>>   
>>   	return 0;
>> +
>> +err:
>> +	clk_disable(s3c2412_i2s.iis_pclk);
> This will disable the clock if we failed to enable it which is clearly
> not correct.  It's also matching a clk_prepare_enable() with a
> clk_disable() which is going to leave an unbalanced prepare.
s3c_i2sv2_probe is enabling "iis" clock. And s3c2412_i2s_probe is enabling
"i2sclk"  and "mpll"clock. If, "mpll" clk_prepare_enable fails. We need 
to disable and
free the clock "iis".  and devm will handle other clock "i2sclk". In 
this code we have used
"s3c2412_i2s.iis_cclk" for all the clock which is more confusing for me.
Please correct me if i am wrong.

~arvind

[toc] | [prev] | [next] | [standalone]


#1697248 — Re: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.

FromMark Brown <broonie@kernel.org>
Date2017-07-26 16:50 +0200
SubjectRe: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.
Message-ID<u7vNo-1yO-29@gated-at.bofh.it>
In reply to#1697027

[Multipart message — attachments visible in raw view] — view raw

On Wed, Jul 26, 2017 at 05:35:32PM +0530, Arvind Yadav wrote:
> On Wednesday 26 July 2017 04:58 PM, Mark Brown wrote:
> > On Wed, Jul 26, 2017 at 11:15:25AM +0530, Arvind Yadav wrote:

> > > +err:
> > > +	clk_disable(s3c2412_i2s.iis_pclk);
> > This will disable the clock if we failed to enable it which is clearly
> > not correct.  It's also matching a clk_prepare_enable() with a
> > clk_disable() which is going to leave an unbalanced prepare.

> s3c_i2sv2_probe is enabling "iis" clock. And s3c2412_i2s_probe is enabling
> "i2sclk"  and "mpll"clock. If, "mpll" clk_prepare_enable fails. We need to
> disable and
> free the clock "iis".  and devm will handle other clock "i2sclk". In this
> code we have used
> "s3c2412_i2s.iis_cclk" for all the clock which is more confusing for me.
> Please correct me if i am wrong.

OK, they are different clocks.  This inconsistent handling seems like a
big part of the problem though - it's going to be a source of errors.
We're also still only disabling here, not unpreparing, so we're missing
something.

[toc] | [prev] | [next] | [standalone]


#1697318 — Re: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.

FromKrzysztof Kozlowski <krzk@kernel.org>
Date2017-07-26 17:50 +0200
SubjectRe: [PATCH v2 01/11] ASoC: samsung: s3c2412: Handle return value of clk_prepare_enable.
Message-ID<u7wJs-2ak-19@gated-at.bofh.it>
In reply to#1696793
On Wed, Jul 26, 2017 at 11:15:25AM +0530, Arvind Yadav wrote:
> clk_prepare_enable() can fail here and we must check its return value.
> 
> Signed-off-by: Arvind Yadav <arvind.yadav.cs@gmail.com>
> ---
> Chnage in v2 :
>              Error handling for things done in s3c_i2sv2_probe().
> 
>  sound/soc/samsung/s3c2412-i2s.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/soc/samsung/s3c2412-i2s.c b/sound/soc/samsung/s3c2412-i2s.c
> index 0a47182..0b96927 100644
> --- a/sound/soc/samsung/s3c2412-i2s.c
> +++ b/sound/soc/samsung/s3c2412-i2s.c
> @@ -65,13 +65,16 @@ static int s3c2412_i2s_probe(struct snd_soc_dai *dai)
>  	s3c2412_i2s.iis_cclk = devm_clk_get(dai->dev, "i2sclk");
>  	if (IS_ERR(s3c2412_i2s.iis_cclk)) {
>  		pr_err("failed to get i2sclk clock\n");
> -		return PTR_ERR(s3c2412_i2s.iis_cclk);
> +		ret = PTR_ERR(s3c2412_i2s.iis_cclk);
> +		goto err;

No, this is kind of messy and error-prone. I think that each unit should
rather clean by itself. You should not touch s3c_i2sv2 stuff directly.

Instead define a s3c_i2sv2_cleanup() (or remove() to match the
convention?) and call it here on error-paths.

Best regards,
Krzysztof

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web